2015-12-26 5 views
6

私のアンドロイドアプリでは、Environment.getExternalStorageDirectory() + "\MyApp"ディレクトリにいくつかのファイルを保存します。これは、アンドロイド6マシュマロ更新するまでうまくいきました。マシュマロ更新後、私はこのディレクトリに書き込めません。marshmallowのgetExternalFilesDir()パスに書き込むには、実行時アクセス権のチェックが必要ですか?

答え:this回答に記載されているように、アプリは実行時に外部ストレージに書き込む前にユーザーからの許可を求める必要があります。

しかし、私はcontext.getExternalFilesDir(null)の代わりEnvironment.getExternalStorageDirectory()を使用し、(外部ストレージディレクトリの中にもあるcontext.getExternalFilesDir(null)から返されるパスを)私は、実行時に任意の許可を求める必要はありませんし、それだけで動作します。

これは偶然のようなものですか、実行時に許可を求めずにcontext.getExternalFilesDir(null)に書き続けることはできますか?

+0

API 16の権限をチェックする必要があなたは本当にアンドロイド6に許可を要求することなく、外部ストレージにファイルを書き込むことができていますか? –

答えて

8

documentation状態:

キットカット以降では、何の権限は読み取りまたは 返されたパスへの書き込みに必要ありません。それは常に呼び出し側のアプリケーションにアクセス可能です。この は、呼び出し元の アプリケーションのパッケージ名に対して生成されたパスにのみ適用されます。他のパッケージに属するパスにアクセスするには、 WRITE_EXTERNAL_STORAGEおよび/またはREAD_EXTERNAL_STORAGEが必要です。

あなたは、Android 4.4+でgetExternalFilesDir()への読み取り/書き込みアクセス権を持ちません。

低いAPIレベルをサポートする必要がある場合は、FileProviderを使用することをおすすめします。

+0

API 25をターゲットにしていて、API 16までサポートしている場合は、マニフェストでWRITE_EXTERNAL_STORAGE権限を宣言してから、実行時に権限を要求しないでください。 – ankushg

0

私は権限が提示されている知っているようでは、Android 6以降に開始と 上だから、

関連する問題