はじめに
- SDK30以降デフォルトで入っているギャラリーアプリ以外で画像のクロップができなくなった
元のコード
ImageEditActivity.java
Intent intent = new Intent("com.android.camera.action.CROP");
//intentに対して色々
grantPermissions();
startActivityForResult(intent, requestCode);
PermissionsManager.kt
fun grantPermissions(){
context.packageManager.queryIntentActivities(
intent,
PackageManager.MATCH_DEFAULT_ONLY
).forEach { resolveInfo ->
//権限の付与
}
}
ちなみにstartActivityForResult
はactivityの1.2.0-alpha04からdeprecatedなのでregisterForActivityResult
を
flagsがint値のqueryIntentActivities
は、APIレベル33からResolveInfoFlags
を使用したqueryIntentActivities
を使ってねとなっています。。
解決
api29までは使用できていることから、30でのPackagevisibilityの変更に関係していそうと踏み、
For other scenarios, like opening a specific third party application directly from your UI, developers will have to explicitly list the application package names or intent filter signatures like this:
以下のようにAndroidManifest.xmlにIntentFilterを追加することで解決
AndroidManifest.xml
<queries>
<intent>
<action android:name="com.android.camera.action.CROP" />
<data android:mimeType="image/*" />
</intent>
</queries>