【问题标题】:Stuck on window.requestFileSystem卡在 window.requestFileSystem
【发布时间】:2015-02-05 11:46:16
【问题描述】:

我正在开发基于 phonegap 4.0 和 wikiitude 的 Android 应用程序。我想在根目录(/storage/emulated/0/ 或 /storage/sdcard0 如果有 SD)上创建一个文件夹。这样做的代码是:

onDeviceReady: function() {

    app.receivedEvent('deviceready');
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail);
    app.wikitudePlugin = cordova.require("com.wikitude.phonegap.WikitudePlugin.WikitudePlugin");
    app.wikitudePlugin.isDeviceSupported(app.onDeviceSupportedCallback, app.onDeviceNotSupportedCallback);  


},  

gotFS: function(fileSystem) {

    alert( "Got the file system: "+fileSystem.name +"<br/>" +
            "root entry name is "+fileSystem.root.name + "<p/>");
    fileSystem.root.getDirectory("ARMedia", {create: true}, gotDir, fail);

},

gotDir: function(dirEntry) {

    file.entry = fileEntry;
    alert('Folder ARMedia created!');   
},

fail: function(error) {

    alert(error);
},

问题是,当我在我的设备(小米 mi3 和三星 Galaxy Tab 2)上测试时,应用卡在“window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail);”强>

文件传输和文件的插件已经在我的插件文件夹中,android manifest.xml 具有 WRITE_EXTERNAL_STORAGE 的权限,我已经尝试了几乎所有的东西......我只是想知道为什么程序没有更进一步的 window.requestFileSystem。

感谢和抱歉我的英语不好。

【问题讨论】:

  • “卡住”是什么意思?如果您的意思是抛出错误,请告诉我们什么错误。
  • 卡住意味着应用程序没有走得更远,没有任何错误代码或警报。这就是为什么我不知道如何修复它
  • 一个应用程序不会停止。 :) 使用远程调试检查控制台。

标签: javascript android cordova phonegap-plugins wikitude


【解决方案1】:

很可能是:LocalFileSystem.PERSISTENT。我相信你的意思是 window.PERSISTENT 或 window.TEMPORARY。

【讨论】:

  • LocalFileSystem和window有什么区别?
  • Window 是 JavaScript 可用的对象,LocalFileSystem 不是 (afaik)。
  • 还是不行,虽然网上所有window.requestFileSystem的例子都是LocalFileSystem。即:docs.phonegap.com/en/edge/cordova_file_file.md.html
  • 是的。 HTMLRocks 文章 (html5rocks.com/en/tutorials/file/filesystem) 将其显示为 Window 的一部分。我想我看到了另一个问题。您使用 gotFS 作为上面未显示的另一个对象的键。你能编辑你的 Q 以显示更多的 JS 吗?
【解决方案2】:

如您所见,html 5 file system API docs, 对于持久存储,window.requestFileSytem() 的第二个参数是配额,“应用程序存储所需的大小(以字节为单位)”。 如果将其设置为零,则文件系统可能无用。

要查看是否允许您请求一定数量的内存,您应该遵循文档建议:

要使用持久性存储,您必须获得用户的许可才能存储持久性数据。同样的限制不适用于临时存储,因为浏览器可以自行决定驱逐临时存储的数据。

为了通过 FileSystem API 使用 PERSISTENT 存储,Chrome 在 window.webkitStorageInfo 下公开了一个新 API 来请求存储:

window.webkitStorageInfo.requestQuota(PERSISTENT, 1024*1024, function(grantedBytes) {
    window.requestFileSystem(PERSISTENT, grantedBytes, onInitFs, errorHandler)
    ;
}, function(e) {
    console.log('Error', e);
});

一旦用户授予权限,以后就无需调用 requestQuota()(除非您希望增加应用的配额)。后续要求相同或更少配额的调用是无用的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-17
    相关资源
    最近更新 更多