[Xamarin] Android intent.ResolveActivity が null になる
ResolveActivity の必要性について
Android の開発において、アプリで処理できないインテントを使用して StartActivityForResult を呼び出すとクラッシュするので、ResolveActivity で呼び出しを保護することが求められています。
ResolveActivity をしないで try ~ catch するという方法もありますが、推奨はされません。
Xamarin.Android で他のカメラアプリを起動して撮影して戻してもらう場合は intent に MediaStore.ActionImageCapture を指定して起動します。
1 2 3 4 5 6 7 8 9 |
var intent = new Intent(MediaStore.ActionImageCapture); if (intent.ResolveActivity(PackageManager) != null) { intent.PutExtra(MediaStore.ExtraOutput, photo_uri); StartActivityForResult(intent, RESULT_PHOTO_CAPTURE); } |
ResolveActivity を入れると上記のようなコードになりますが、 ResolveActivity()
の戻り値が常に null になってしまっていました。何が足りないのでしょうか。
解決策
AndroidManifest.xml に以下のコードを追加します。
1 2 3 4 5 6 7 8 9 10 11 12 |
<queries> <!-- Camera --> <intent> <action android:name="android.media.action.IMAGE_CAPTURE" /> </intent> <!-- Gallery --> <intent> <action android:name="android.intent.action.GET_CONTENT" /> </intent> </queries> |
これは applications タグの外側に記載する必要があります。
これを記載することで ResolveActivity の戻り値が常に null になることはなくなります。
ITエンジニア募集中!
キュアコード株式会社はITエンジニアを募集しております。少人数の職場なので、上流・下流やサーバー・クライアント対応の垣根なく、あなたの強みを活かしながら いろいろなことにチャレンジ可能です。エンジニアとしての未経験の方、経験が少ない方も歓迎しています。
下記よりITエンジニア募集の採用情報をご覧いただけます。