アプリには 2 つのアクティビティがあり、MainActivity は ImagePicker を呼び出します。これは、電話ギャラリーにすべての画像を配置する GridView を持ち、ContentResolver を使用してカーソルを取得します。
テストしたときは私の電話では問題なく動作しましたが、エミュレーターでは毎回即座にクラッシュしました。
エラーログは次のとおりです。
java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/images/media from pid=5934, uid=10060 には android.permission.READ_EXTERNAL_STORAGE または grantUriPermission() が必要です
以下に示すように、マニフェストに許可が書かれています。
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".ImagePicker" />
</application>