【问题标题】:PhoneGap - Display available free space?PhoneGap - 显示可用空间?
【发布时间】:2012-07-21 05:45:46
【问题描述】:

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

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

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

谢谢。

【问题讨论】:

    标签: javascript android cordova


    【解决方案1】:

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

    cordova.exec(win, fail, "File", "getFreeDiskSpace", []);
    

    【讨论】:

    • 这实际上似乎有效:cordova.exec(callbackSuccess, callbackFailure, "File", "getFreeDiskSpace", []);
    • 这在phonegap中也有效吗?据我所知,cordova 和 phonegap 实际上已经分开了。我尝试查找此内容,但在 phonegap API 文档中找不到它。您可以发布指向您找到此文档的文档的链接吗?谢谢,看起来很酷很简单!
    • 我已经创建了一个带有解释的答案。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      正如@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,并正确报告外部存储(见下文)。

      别忘了在devicereadycordova plugin add org.apache.cordova.file 之后运行你的代码

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

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

      【讨论】:

      • 对我来说,它在 iOS 上返回免费字节,在 android 上返回 -1
      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

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

          类似这样的:

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

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

          【讨论】:

            猜你喜欢
            • 2015-11-30
            • 2014-12-19
            • 2017-08-31
            • 1970-01-01
            • 2014-04-14
            • 2018-02-01
            • 1970-01-01
            • 2013-11-11
            • 1970-01-01
            相关资源
            最近更新 更多