使用 Phonegap,我如何检查剩余的可用磁盘空间?
Posted
技术标签:
【中文标题】使用 Phonegap,我如何检查剩余的可用磁盘空间?【英文标题】:With Phonegap, how can I check how much free disk space remaining? 【发布时间】:2013-02-26 12:15:00 【问题描述】:我有一个 Phonegap 应用程序,它使用文件系统 API 将文件保存在设备文件系统上。
应用程序在启动时需要window.requestFileSystem
的一些文件系统空间,但运行时可以下载其他文件,我无法预测所需的磁盘空间总量。
这个想法是在下载开始之前检查可用空间,如果空间不足,则向用户发送消息。
Phonegap 有什么方法可以检查剩余可用空间吗?
【问题讨论】:
你找到/创建了一个插件吗?愿意分享吗? @kioopi 不,我不知道。每次我必须开始下载操作时,我都使用带有字节下载的 window.requestFileSystem 解决了问题。如果没有足够的空间可用,window.requestFileSystem 会失败,我会停止下载并通知用户 【参考方案1】:在找到this post 之前,我创建了自己的函数来执行此操作,尝试获取具有确定字节的文件系统,直到达到限制并递归地假定可用空间。由于回调,可能需要设置大于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)
【讨论】:
【参考方案2】:代码将调用文件插件(cordova.file.plugin)的getFreeDiskSpace方法,并根据成功或错误回调,给你一个结果。如果达到成功回调,您将获得以千字节为单位的总可用磁盘空间。您可以通过简单的数学轻松转换为兆字节或千兆字节。
cordova.exec(function(result)
alert("Free Disk Space: " + result);
, function(error)
alert("Error: " + error);
, "File", "getFreeDiskSpace", []);
【讨论】:
对我来说,这在 ios 上返回免费字节,在 android 上返回 -1。【参考方案3】:Phonegap 不提供此功能。解决方案是自己创建一个 phonegap 插件来检查可用空间。
Phonegap plugin development guide android implementation iOS implementation【讨论】:
您可以查看此存储库中可用插件的列表:github.com/phonegap/phonegap-plugins/tree/master/Android以上是关于使用 Phonegap,我如何检查剩余的可用磁盘空间?的主要内容,如果未能解决你的问题,请参考以下文章