Phonegap / Cordova deviceready或requestFileSystem无法运行android

时间:2013-12-29 02:30:19

标签: android cordova

Cordova 3.1.0 S3 Android 4.2和Nexus 4 Android 4.4

我看到来自cordova图书馆的相当奇怪的行为。在我的项目的根html文件中包含一个init文件。当我使用window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, setFS, fail);

时,每件事似乎都在加载并正常工作

第一次尝试似乎没有效果。

console.log("Loaded INIT");
    document.addEventListener("deviceready", deviceIsReady, false);

    function setFS(fileSystem){
        window.rootFS = fileSystem.root;
        console.log("FS SET");
    }
    function fail(error){
        console.log(error);
    }
    function deviceIsReady() {
        window.requestFileSystem  = window.requestFileSystem || window.webkitRequestFileSystem;
        //window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, setFS, fail);
        var attempts = 0;

        var intervalID = window.setInterval(function(){
            window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, setFS, fail);
            console.log("Requested fileSystem");
            attempts++;
            if(window.rootFS || attempts>3)
                clearInterval(intervalID);
        },500);


        console.log("INIT_________");

    }

上面的代码在应用程序启动时产生以下输出。

"Requested fileSystem"
"FS SET"
"Requested fileSystem"
"INIT_________"
"Loaded INIT"

这是为了获取fileSystem.root而必须实现的hacky变通方法。现在两次调用deviceIsReady会让我相信“deviceready”事件正在运行。正如您所看到的,setFS仅被调用一次 - 第二次。当我通过输入按钮的onclick处理程序以编程方式调用window.requestFileSystem时,我看到类似的行为。在第一次单击“setFS”没有被调用,但第二次单击按钮它工作正常。此外,此间隔最初是在满足相同条件时退出的do while循环。我有完全相同的结果。它将在第二次退出。

最后,我在尝试使用fileTransfer.download时看到了类似的行为。我必须循环两次才能使它工作。现在我无法将其推向生产!有人请帮忙!

1 个答案:

答案 0 :(得分:1)

我尝试了你的例子,它在我的N4上运行4.4时按预期工作。

在调用requestFileSystem之后,您正在检查window.rootFS,这有点可疑。 setFS回调将以异步方式调用,因此不可能在您检查它的地方设置它。