我有一个 Phonegap 应用程序,它使用文件系统 API 将文件保存在设备文件系统上。
启动时,应用程序需要一些文件系统空间,window.requestFileSystem
但运行时可以下载其他文件,我无法预测所需磁盘空间的总量。
这个想法是在下载开始之前检查可用空间,如果空间不够,则向用户发送一条消息。
Phonegap 有什么方法可以检查剩余的可用空间吗?
我有一个 Phonegap 应用程序,它使用文件系统 API 将文件保存在设备文件系统上。
启动时,应用程序需要一些文件系统空间,window.requestFileSystem
但运行时可以下载其他文件,我无法预测所需磁盘空间的总量。
这个想法是在下载开始之前检查可用空间,如果空间不够,则向用户发送一条消息。
Phonegap 有什么方法可以检查剩余的可用空间吗?
在找到这篇文章之前,我创建了自己的函数来执行此操作,尝试获取具有确定字节的文件系统,直到达到限制并递归地假设可用空间。由于回调,可能有必要将超时设置为大于 0。在我的测试中,cordova.exec 方式和我的方式之间的差异非常小,并且可能会更好地降低限制值的准确性。
function availableBytes(callback, start, end){
callback = callback == null ? function(){} : callback
start = start == null ? 0 : start
end = end == null ? 1 * 1024 * 1024 * 1024 * 1024 : end //starting with 1 TB
limit = 1024 // precision of 1kb
start_temp = start
end_temp = end
callback_temp = callback
if (end - start < limit)
callback(start)
else{
window.requestFileSystem(LocalFileSystem.PERSISTENT, parseInt(end_temp - ((end_temp - start_temp) / 2)), function(fileSystem){
setTimeout(function(){
availableBytes(callback_temp, parseInt(parseInt(end_temp - ((end_temp - start_temp) / 2))), end_temp)
}, 0)
}, function(){
setTimeout(function(){
availableBytes(callback_temp, start_temp, parseInt(end_temp - ((end_temp - start_temp) / 2)))
}, 0)
})
}
}
可以像这样使用:
availableBytes(function(free_bytes){
alert(free_bytes)
}
代码将调用 File 插件 (cordova.file.plugin) 的 getFreeDiskSpace 方法,并根据成功或错误回调,给你一个结果。如果达到成功回调,您将获得以千字节为单位的总可用磁盘空间。您可以通过简单的数学轻松转换为兆字节或千兆字节。
cordova.exec(function(result) {
alert("Free Disk Space: " + result);
}, function(error) {
alert("Error: " + error);
}, "File", "getFreeDiskSpace", []);
Phonegap 不提供此功能。解决方案是自己创建一个 phonegap 插件来检查可用空间。