PhoneGap - 显示可用空间?

时间:2012-07-22 23:47:59

标签: javascript android cordova

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

我尝试了各种不同类型的代码,但是没有运气。

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

谢谢。

6 个答案:

答案 0 :(得分:3)

主要是为了自我引用,现在有一个api:

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

答案 1 :(得分: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,并正确报告外部存储(见下文)。

请勿忘记在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

答案 2 :(得分: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 :(得分:0)

我猜这不是Phonegap本身规范的一部分,而是一个本机代码解决方案,您可能需要为其创建一个phonegap插件。

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

答案 4 :(得分:0)

在手机缺口中你可能无法完成它,但你可以创建和使用插件。点击here以获取可能引导您解决问题的更多信息。

答案 5 :(得分:0)

我认为,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中的可用空间。