📷

UnityでAndroidのPhotoPicker写真選択ツールの呼び出し

2024/04/16に公開

Google Play の写真と動画の権限に関するポリシーの詳細

2025年初頭からREAD_MEDIA_IMAGESREAD_MEDIA_VIDEO権限はメディアを管理するようなアプリでしか使えなくなります。
また、Android13以降アプリ外部に保存されているメディアを選択するには、写真選択ツール(PhotoPicker)の使用が推奨されています。
写真選択ツール

UnityでAndroidのネイティブ実装を行う場合、AndroidJavaClassを使うかJava/Kotlinでプラグインを作成するかです。
C# スクリプトから Java や Kotlin のプラグインコードを呼び出す
今回はUnityPlayerActivityを継承したクラスで実装を行います。
カスタムアクティビティの作成

PhotoPickerPickVisualMediaPickMultipleVisualMediaを使用すべきですが、
registerForActivityResultFragmentComponentActivityを継承する必要があります。
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
Android13でPhotoPicker Android13でPhotoPickerじゃない場合 Android8での表示

https://github.com/unagirabbit/android-photo-picker

Discussion