📷
UnityでAndroidのPhotoPicker写真選択ツールの呼び出し
Google Play の写真と動画の権限に関するポリシーの詳細
2025年初頭からREAD_MEDIA_IMAGES
、READ_MEDIA_VIDEO
権限はメディアを管理するようなアプリでしか使えなくなります。
また、Android13以降アプリ外部に保存されているメディアを選択するには、写真選択ツール(PhotoPicker)の使用が推奨されています。
写真選択ツール
UnityでAndroidのネイティブ実装を行う場合、AndroidJavaClass
を使うかJava/Kotlinでプラグインを作成するかです。
C# スクリプトから Java や Kotlin のプラグインコードを呼び出す
今回はUnityPlayerActivity
を継承したクラスで実装を行います。
カスタムアクティビティの作成
PhotoPicker
はPickVisualMedia
、PickMultipleVisualMedia
を使用すべきですが、
registerForActivityResult
はFragment
やComponentActivity
を継承する必要があります。
UnityPlayerActivity
では使用できないためMediaStore.ACTION_PICK_IMAGESを使用します。
/**
* 画像/動画を選択可能な選択ツールを表示
*/
private static void openChooser() {
Intent chooserIntent;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
// API33以上はPhotoPickerを使用
chooserIntent = new Intent(MediaStore.ACTION_PICK_IMAGES);
chooserIntent.putExtra(
MediaStore.EXTRA_PICK_IMAGES_MAX,
5 // 選択可能な最大枚数を指定
);
chooserIntent.setType("*/*");
} else {
chooserIntent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
chooserIntent.addCategory(Intent.CATEGORY_OPENABLE);
chooserIntent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
chooserIntent.setType("*/*");
chooserIntent.putExtra(
Intent.EXTRA_MIME_TYPES,
new String[] { "image/*", "video/*" }
);
}
try {
UnityPlayer.currentActivity.startActivityForResult(
chooserIntent,
0
);
} catch (ActivityNotFoundException e) {
Log.e("Unity", Objects.requireNonNull(e.getMessage()));
}
}
Android13(PhotoPciker) | Android13(PhotoPicker無し) | Android8 |
---|---|---|
Discussion