<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
を宣言するだけで十分ですか、それとも<uses-permission Android:name="Android.permission.READ_EXTERNAL_STORAGE" />
も宣言する必要がありますか? Javadocはこの重要な情報を省略しています。
READ_EXTERNAL_STORAGE
はJelly Bean(レベル16)でのみ存在します。 ドキュメント によると、Jelly Bean以降のすべてのアプリケーションは、宣言しなくてもその権限を持っています。
外部ストレージへの保護された読み取りアクセスを提供します。 Android 4.1では、デフォルトですべてのアプリケーションに引き続き読み取りアクセス権があります。これは将来のリリースで変更され、アプリケーションがこの権限を使用して読み取りアクセス権を明示的に要求する必要があります。アプリケーションがすでに書き込みアクセス権を要求している場合、開発者がAndroidが将来どのように動作するかをテストするために、読み取りアクセス制限をオンにする新しい開発者オプションがあります。
したがって、将来の互換性のために宣言する必要がありますが、Jelly Beanの電話を使用していて、開発者向けオプション「USBストレージの保護」オプションを設定しない限り、これが問題の原因ではない可能性があります。
明示的に両方の権限を宣言するのが最善ですが、Android.permission.WRITE_EXTERNAL_STORAGE
のみを宣言すると、ビルド時にAndroid.permission.READ_EXTERNAL_STORAGE
がAPKに自動的に追加されます。
APKでコマンドaapt dump badging
を使用して、Androidがimplyへの書き込み権限の使用を考慮していることと、読み取り権限も必要であることを確認できます。
マニフェストでonlyWRITE_EXTERNAL_STORAGE
を宣言した私のAPKのaaptからの出力を次に示します。
uses-permission:'Android.permission.WRITE_EXTERNAL_STORAGE'
uses-permission:'Android.permission.READ_EXTERNAL_STORAGE'
uses-implied-permission:'Android.permission.READ_EXTERNAL_STORAGE',
'requested WRITE_EXTERNAL_STORAGE'