2016-04-04 15 views
3

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; 
} 

答えて

0

は、Android 6(マシュマロ)へのアップグレード後に正確に同じ問題に直面していました。 Cordovaのファイルプラグイン(v 4.1.1)にAndroid Marshmallowに関する権限の問題があります。この問題では、アンドロイドファイルシステムでフォルダが作成され、パスが存在しないというエラーが発生します。

この問題は修正されました。この作業を行うには、コードバーファイルのプラグインgithub内のandroid srcフォルダから最新のFileUtils.javaを取得する必要があります。プラグインを更新すると、ファイルシステムへの最初のアクセス時に、アプリケーションはユーザーからのアクセス許可を要求します。それ以降、後続のリクエストは正常に機能します。これに関する情報については、Apacheの問題追跡ツールのCB-10798を参照してください。うまくいきたいと思っています。

+0

ありがとうございます。次のバージョンの 'cordova-plugin-file'がリリースされるのをご存じですか? – finchie

+0

@finchie、申し訳ありませんが、私はそれについては考えていません。しかし、今のところ、この問題に関するFileUtils.javaの変更をgithubと回避策から引き出すことはできます。 – Gandhi

+0

v4.2。'cordova-plugin-file'の0がリリースされました - このバージョンにアップグレードすると問題は解決しました!再度、感謝します! – finchie

関連する問題