iOSとAndroidの両方で実行する必要があるオンライン ビルド サービスを介してPhoneGapアプリケーションをビルドしようとしていますが、この質問は Android の部分に焦点を当てています。
アプリケーションの主な目的は、ファイルシステムにアクセスして変更できるようにすることです。Raymond Camden のブログ投稿に触発されて、私は彼と非常によく似たサンプル アプリケーションを作成することになりました。これは、読み取り/書き込み権限でファイル システムにアクセスします。主な違いは、SDK をインストールせずに、androidManifes.xmlファイルを気にせずに、アプリケーションをオンラインでビルドすることです。
私の問題は、ファイルシステムにアクセス (ディレクトリの一覧表示、ファイルの読み取り) はできるが、ファイルシステムに何も書き込めないことです。
ファイル アクセス許可を得るために、必要な<feature />
タグをconfix.xmlに含めました。
<feature name="http://api.phonegap.com/1.0/file"/>
私のアプリケーションで使用されるサンプルコードは次のとおりです。
ファイル コードの読み取り:
// Request fileSystem
fileSystem.root.getFile(fileName, {create:true}, readFile, onError);
// Function that reads a file
function readFile(file){
var reader = new FileReader();
reader.onloadend = function(e) {
console.log("contents: ", e.target.result);
}
reader.readAsText(file);
}
ファイルコードの書き込み/追加:
fileSystem.root.getFile(fileName, {create:true}, function(file){
file.createWriter(function(writer) {
writer.onwrite = function() {
console.log('writing', arguments);
}
writer.onerror = function(e) {
console.error('error', e);
}
writer.onwriteend = function() {
console.log('writeend', arguments);
}
//Go to the end of the file...
writer.seek(writer.length);
// Append a timestamp
writerOb.write("Test at "+new Date().toString() + "\n");
})
}, onError);
2 番目のコード サンプルでは、対象のファイルに何も書き込まれておらず、onerror
ハンドラーは、NOT_FOUND_ERR
. そして、これは意味がありません。なぜなら、同じファイルを読み取ることができるからです (そして、それを見つけることができます)。
同様に、新しいファイルを作成しようとすると ( write/append file codeと同じコードを使用しますが、対象のファイルが存在しません)、INVALID_MODIFICATION_ERR
エラーが発生します。
公式ドキュメントの例も試してみましたが、同じ結果が得られました (読み取りと書き込みなし)。
PhoneGap は HTML5 ファイルAPIを使用しているため、このスタック オーバーフローの回答(および他のサイト) で提案されているように、ブロブを介してコンテンツを書き込もうとしましたが、うまくいきませんでした。
私は何が欠けていますか?ファイルを書き込むための別のプラグインが必要ですか、それともオンライン ビルド ツールでは実行できず、SDK をダウンロードして昔ながらの方法でアプリケーションをコンパイルする必要がありますか?
PS: 私の PhoneGap のバージョンは2.3.0です。