无法在Android Phonegap上创建/写入文件

时间:2014-08-04 21:24:49

标签: android cordova phonegap-plugins

我正在尝试使用以下方法在Android上创建文件:

document.addEventListener("deviceready", onDeviceReady, false);

function onDeviceReady() {
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail);
}

function gotFS(fileSystem) {
    fileSystem.root.getFile("example.txt", {
        create: true
    }, gotFileEntry, fail);
}

function gotFileEntry(fileEntry) {
    fileEntry.createWriter(gotFileWriter, fail);
}

function gotFileWriter(writer) {
    writer.onwriteend = function(evt) {
        console.log("contents of file now 'some sample text'");
        writer.truncate(11);
        writer.onwriteend = function(evt) {
            console.log("contents of file now 'some sample'");
            writer.seek(4);
            writer.write(" different text");
            writer.onwriteend = function(evt) {
                console.log("contents of file now 'some different text'");
            }
        };
    };
    writer.write("some sample text");
}

function fail(error) {
    console.log(error.code);
}

此代码在iOS上正常工作,我可以在Documents文件夹中看到创建的文件。但是在Android上我没有看到任何文件。

我添加了所有插件。我还按顺序采取了以下步骤

  1. 添加插件 cordova插件添加org.apache.cordova.file cordova插件添加org.apache.file-transfer

  2. 从我的应用程序中编译和构建android cordova编译android cordova build android

  3. 此外,我的配置文件还包含以下条目:

    <name>Hello Cordova</name>
    
    <description>
        A sample Apache Cordova application that responds to the deviceready event.
    </description>
    
    
    
    <access origin="*"/>
    
    
    <content src="index.html" />
    
    <!-- Preferences for iOS -->
    <preference name="AllowInlineMediaPlayback" value="false" />
    <preference name="AutoHideSplashScreen" value="true" />
    <preference name="BackupWebStorage" value="cloud" />
    <preference name="DisallowOverscroll" value="false" />
    <preference name="EnableLocation" value="false" /><!-- DEPRECATED -->
    <preference name="EnableViewportScale" value="false" />
    <preference name="FadeSplashScreen" value="true" />
    <preference name="FadeSplashScreenDuration" value=".25" />
    <preference name="HideKeyboardFormAccessoryBar" value="false" />
    <preference name="KeyboardDisplayRequiresUserAction" value="true" />
    <preference name="KeyboardShrinksView" value="false" />
    <preference name="MediaPlaybackRequiresUserAction" value="false" />
    <preference name="ShowSplashScreenSpinner" value="true" />
    <preference name="SuppressesIncrementalRendering" value="false" />
    <preference name="TopActivityIndicator" value="gray" />
    <preference name="iosPersistentFileLocation" value="Library" />
    
    
    <feature name="Geolocation">
      <param name="ios-package" value="CDVLocation"/>
    </feature>
    <feature name="Device">
      <param name="ios-package" value="CDVDevice"/>
    </feature>
    <feature name="Accelerometer">
      <param name="ios-package" value="CDVAccelerometer"/>
    </feature>
    <feature name="Compass">
      <param name="ios-package" value="CDVLocation"/>
    </feature>
    <feature name="Media">
      <param name="ios-package" value="CDVSound"/>
    </feature>
    <feature name="Camera">
      <param name="ios-package" value="CDVCamera"/>
    </feature>
    <feature name="Contacts">
      <param name="ios-package" value="CDVContacts"/>
    </feature>
    <feature name="File">
      <param name="ios-package"  value="CDVFile"/>
    </feature>
    <feature name="NetworkStatus">
      <param name="ios-package" value="CDVConnection"/>
    </feature>
    <feature name="Notification">
      <param name="ios-package" value="CDVNotification"/>
    </feature>
    <feature name="FileTransfer">
      <param name="ios-package" value="CDVFileTransfer"/>
    </feature>
    <feature name="Capture">
      <param name="ios-package" value="CDVCapture"/>
    </feature>
    <feature name="Battery">
      <param name="ios-package" value="CDVBattery"/>
    </feature>
    <feature name="SplashScreen">
      <param name="ios-package" value="CDVSplashScreen"/>
    </feature>
    <feature name="Echo">
      <param name="ios-package" value="CDVEcho"/>
    </feature>
    <feature name="Globalization">
      <param name="ios-package" value="CDVGlobalization"/>
    </feature>
    <feature name="InAppBrowser">
      <param name="ios-package" value="CDVInAppBrowser"/>
    </feature>
    <feature name="Logger">
      <param name="ios-package" value="CDVLogger"/>
    </feature>
    <feature name="LocalStorage">
        <param name="ios-package" value="CDVLocalStorage"/>
    </feature>
    <feature name="File">
        <param name="android-package" value="org.apache.cordova.file.FileUtils" />
    </feature>
    <feature name="FileTransfer">
        <param name="android-package" value="org.apache.cordova.filetransfer.FileTransfer" />
    </feature>
    <!-- Deprecated plugins element. REmove in 3.0 -->
    <plugins>
    
    </plugins>
    

    我的Android清单文件中包含必要的权限:

    以下是我的Cordova版本:3.5.0-0.2.6

    在iOS上一切正常。在Android Logcat上出现以下错误:

    “Uncaught ReferenceError:LocalFileSystem未定义”,来源:file ?? android_asset / www / app.js

2 个答案:

答案 0 :(得分:0)

你不能在同一个config.xml文件中混淆iOS和android。确保在单独的config.xml中设置cordova插件

的iOS

enter image description here

机器人

enter image description here

答案 1 :(得分:0)

基本上是插件的添加方式。我发现在phonegap和cordova网站上发布的文件真的很混乱。我可能不得不关注它们以使其发挥作用。 要在plugins.xml中添加必要的插件信息,您需要遵循以下步骤:

http://docs.phonegap.com/en/2.0.0/cordova_file_file.md.html#File

要更改配置文件,您需要遵循以下步骤:

http://cordova.apache.org/docs/en/3.3.0/cordova_file_file.md.html#File

然后编译并运行。我不确定是否有任何地方可以找到统一的文件。如果您知道任何统一的文件,请告诉我。我正在使用Phonegap 3.5和cordova 3.5版本,并查看旧文档以找出方法

相关问题