Android 4.4からAndroid 6にデプロイメントプラットフォーム(Nexusタブレット)をアップグレードすると同時に、Cordova 3.4アプリケーションをCordova 6.0にアップグレードしています。これの一部として、ファイルシステムプラグインcordova-plugin-file
をv0.2.5からv4にアップグレードしました.1.1Android 6 Cordovaアプリがファイルシステムにアクセスしようとする前に許可を求めるようにするには、どうすればよいですか?
アプリケーションは、最初の実行時に共有ファイルシステム(file:///storage/emulated/0/
)に10個のフォルダのディレクトリ構造を作成します。私は、同じ場所がアプリの新バージョンで使用されていることを確認するためにconfig.xmlに以下のプリファレンスを追加しました:
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="23" />
<preference name="AndroidPersistentFileLocation" value="Compatibility" />
私は、ユーザーのAndroid 6の新しいアクセス許可モデルがあることを承知していますアプリケーションが要求する各許可を別々に許可する必要があります。
デバイスは、Android 6.0(APIレベル23)以上を実行している、と アプリのtargetSdkVersionが23以上で、アプリは実行時にユーザーからの権限 を要求します。場合最初の実行時に予想されるように Android Developer documentation
以前のバージョンがインストール(およびアンインストール以降)を持っていたタブレットにインストールされ、作成したディレクトリ構造を持っていた、私のアプリの新バージョンでは、ユーザーに入力を求める、実行しますファイルシステムへのアクセスを許可します。
しかし、アプリがインストールの前に持っていなかったタブレット上にインストールしたとき(または、私は以前のバージョンで作成されたディレクトリ構造を削除するとき)アプリはFileError.PATH_EXISTS_ERR
エラーをスローして失敗しました。期待どおりにファイルシステムにアクセスするためのアクセス許可をユーザーに求めるプロンプトは表示されません。
私は、アプリケーションが構築されたときに、生成されたAndroidManifest.xmlには必要な権限属性含まれないことをチェックしました:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
私の現在の回避策は、アプリケーションを停止することで、[設定]に移動>アプリケーション>のMyApp >許可を有効にし、アプリを再度実行する前に手動で「ストレージ」権限を有効にします。しかし、私は本当に私のユーザーがこれを行う必要はありません!
実際にファイルシステムにアクセスしようとする前に、アプリケーションに必要な権限を与えるようにユーザーに指示する方法を教えてください。ここで
は、私のコードのいくつかのサンプルです:
window.requestFileSystem(window.LocalFileSystem.PERSISTENT, 4000 * 1024 * 1024, gotFileSystem, errorHandler);
function gotFileSystem(fileSystem) {
// store reference to file system
fs = fileSystem;
}
function createDir(directoryName) {
var directoryCreated = when.defer();
fs.root.getDirectory(directoryName, {
create: true
}, function (dirEntry) {
directoryCreated.resolve();
}, function(e) {
directoryCreated.reject(e);
}
);
return directoryCreated.promise;
}
ありがとうございます。次のバージョンの 'cordova-plugin-file'がリリースされるのをご存じですか? – finchie
@finchie、申し訳ありませんが、私はそれについては考えていません。しかし、今のところ、この問題に関するFileUtils.javaの変更をgithubと回避策から引き出すことはできます。 – Gandhi
v4.2。'cordova-plugin-file'の0がリリースされました - このバージョンにアップグレードすると問題は解決しました!再度、感謝します! – finchie