3

我正在使用 PhoneGap 并试图向用户显示可用于存储的可用空间量。

我尝试了各种不同类型的代码来让它工作,但没有运气。

有没有人有一个关于如何在 PhoneGap 中显示可用存储空间的工作示例?我目前在 android 工作,但我正在寻找一个 phonegap 跨平台解决方案。

谢谢你。

4

6 回答 6

3

主要用于自我参考,现在有一个用于此的 api:

cordova.exec(win, fail, "File", "getFreeDiskSpace", []);
于 2014-05-07T07:31:06.060 回答
3

在创建这篇文章之前,我创建了自己的函数来执行此操作,尝试获取具有确定字节的文件系统,直到达到限制并递归地假定可用空间。由于回调,可能需要将超时设置为大于 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)
}
于 2014-07-09T18:03:53.007 回答
2

正如@RomainMF 所述,以下在 Cordova 3.4.1-0.1.0 中有效:

cordova.exec(
    function(freeSpace) {
      alert('reported free space is ' + freeSpace);
    },
    function() {
      alert('failed');
    }, 
    "File", "getFreeDiskSpace", []
  );

freeSpace 参数是以字节为单位的可用存储空间,如果不可用,则为 -1。

它适用于 4.0 AVD 和我的 Galaxy S4,并正确报告外部存储(见下文)。

不要忘记在之后运行您的deviceready代码cordova plugin add org.apache.cordova.file

插件文档:https ://github.com/apache/cordova-plugin-file/

文档中未提及此调用,但可以阅读Java/Android 源代码(以及iOS/Objective-C。AFAIK 您只能通过这种方式获取外部存储的可用空间,因为 checkInternal 参数是设置为 false(请参阅getFreeDiskSpace

于 2014-05-09T08:28:24.977 回答
0

我认为Phonegap 不提供此功能。
因此,您需要通过 Java、原生 Android SDK 从 SD 卡中获取可用空间。

像这样的东西:

File sdcard = Environment.getExternalStorageDirectory();
StatFs stat = new StatFs(sdcard.getAbsolutePath());
long available = stat.getAvailableBlocks() * (long) stat.getBlockSize();

然后使用WebIntent插件通过意图将值传递给 PhoneGap 。现在您在 PhoneGap 中获得了可用空间。

于 2012-07-23T07:58:43.807 回答
0

我猜这不是 Phonegap 本身规范的一部分,而是您可能必须为其制作 phonegap 插件的本机代码解决方案。

我无法回答 Android 但在 IOS 上,因为该应用程序是沙盒的,我不确定您是否能够访问可用空间量。

于 2012-07-23T00:30:58.837 回答
0

在电话间隙中,您可能无法完成它,但您可以创建和使用插件。单击此处了解更多信息,这些信息可能会引导您找到问题的解决方案。

于 2012-07-23T04:04:27.027 回答