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