AndroidのPhoto pickerについて調べたメモ（起動確認編）

## なぜ調べたか
2024年8月31日月までにREAD_MEDIA_IMAGESとREAD_MEDIA_VIDEOを要求できるアプリの数を減らすとのことで
その対応としてAndroidの写真選択ツール（Photo picker）の利用を検討する必要があるとのことだがOSバージョンによってどのように起動するのかわからなかったので所有している実機を利用して調べてみた

※対応は2025年1月までの延長をリクエストできるらしいです

## はじめに公式情報の確認して実装方法を確認する
https://developer.android.com/training/data-storage/shared/photopicker?hl=ja

## 単一選択で実装して起動してみる

* プロジェクトを新規作成する、今回はJetpack Composeを利用して作成
* PhotoPicker用のボタンを作成

```kotlin
@Composable
fun PhotoPickerButton() {

    val pickMedia =
        rememberLauncherForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri ->

            if (uri != null) {
                Log.d("PhotoPicker", "Selected URI: $uri")
            } else {
                Log.d("PhotoPicker", "No media selected")
            }
        }

    Button(onClick = {
        pickMedia.launch(
            PickVisualMediaRequest(
                ActivityResultContracts.PickVisualMedia.ImageOnly
            )
        )
    }) {
        Text(text = "単一選択")
    }
}
```
ボタンを配置して起動した画面はこちら
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/380332/ad76ab71-021d-6c20-4e25-707a40072170.png">

## まずは初期化したAndroid13の実機で起動してみる

* 初期化してそのまま起動してみるとPhoto pickerが起動した
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/380332/19777ee1-59f9-6559-2284-bfab30e96cfa.png">

* 初期化した際のGoogle システム アップデートは「2023年2月1日」
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/380332/2aa13cd0-0f29-0488-a603-6f7319ddaaa5.png">

* 初期化した際のGoogle Play 開発者サービスのバージョンは「24.26.32」
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/380332/9a70fd0c-c2dd-9acb-2666-e3d0038302de.png">

## 次に初期化したAndroid11の実機で起動してみる
* 利用可能なデバイスとして記載されている内容が下記のためまずはAndroid11で起動を試してみる
  * Android 11（API レベル 30）以降を実行している
  * モジュラー システム コンポーネントの変更を Google システム アップデートから受け取っている

### GooglePlayシステムアップデートをしないで起動した場合（試した端末は2021年4月1日版になっている）
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/380332/b65bbb3c-2573-21ca-6b6c-ad485cc64f57.png">
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/380332/ff87b6f1-9cf8-da80-6d31-d4626a92d444.png">

### GooglePlayシステムアップデートをしないで起動するとPhoto pickerは起動しなかった
これは下記の公式情報通りPhoto pickerが利用できない状態だったためACTION_OPEN_DOCUMENT インテントのアクションを自動的に呼び出した結果だと思われる
> デバイスで写真選択ツールを使用できない場合、ライブラリは代わりに ACTION_OPEN_DOCUMENT インテントのアクションを自動的に呼び出します。このインテントは、Android 4.4（API レベル 19）以降を搭載しているデバイスでサポートされています。特定のデバイスで写真選択ツールが使用可能かどうかを確認するには、isPhotoPickerAvailable() を呼び出します。

### GooglePlayシステムアップデートをして最新にした後に起動した場合（確認した時点では2024年5月1日版になっている）
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/380332/4d72b06c-1e14-65d2-b1c0-df94a2022275.png">
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/380332/e478743b-060d-277f-1121-600af6914868.png">

### GooglePlayシステムアップデートして最新にしてから起動するとPhoto pickerは起動した

## 最後に初期化したAndroid10の実機で起動してみる
* 下記の内容が公式に記載されているのでAndroid10でも起動してみる
> Android 4.4（API レベル 19）～Android 10（API レベル 29）を搭載した以前のデバイスと、Google Play 開発者サービスをサポートする Android 11 または 12 を搭載した Android Go デバイスには、バックポート バージョンの写真選択ツールをインストールできます。Google Play 開発者サービスを介してバックポート バージョンの写真選択ツール モジュールの自動インストールを有効にするには、アプリのマニフェスト ファイルで <application> タグに次のエントリを追加してください。

* 初期化してGooglePlayシステムアップデートを確認すると2020年3月1日になっていたがアップデートはこれ以上できなかったのでそのまま起動してみた
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/380332/72b6cca6-847a-795d-ec95-2c705178eed3.png">
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/380332/3bc8cae5-dc0a-fb78-1cbe-949d475e82cd.png">

### 結果Photo pickerは起動しなかった
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/380332/3d50a4e5-b905-c11a-5dc7-d602ff9712a0.png">

### 次にGoogle Play 開発者サービスを最新にアップデートして試してみた

* アップデート前はバージョン「19.6.29」
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/380332/2f669dc2-6b0b-215c-e960-5abbe6818607.png">

* アップデート後はバージョン「24.26.32」
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/380332/3f6186d7-2edb-28e0-fd36-66cea4dc3e3d.png">

* アップデートが終わったので起動した結果
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/380332/65b4eb00-b45e-02d1-1ad1-1805d6dd45f5.png">
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/380332/78db0dea-480f-6d76-a750-cb1b69d919d7.png">

### Google Play 開発者サービスのアップデートをダウンロードしていますと表示されて完了するとPhoto pickerが起動した

## 起動の確認を行ってみた結果

### 下記のことからPhoto pickerが起動できない場合の考慮をする必要があると思われる

* Android13
  * 初期化して特にアップデートはせずにPhoto pickerが起動する
* Android11
  * GooglePlayシステムアップデートがアップデートされていないとPhoto pickerを起動することができない
* Android10
  * Google Play 開発者サービスがアップデートされていないとPhoto pickerを起動することができない

## ※ポリシーについての記載はこちら

2023年10月25日のポリシーに関するお知らせに下記内容が記載されており
> ユーザー エクスペリエンスのプライバシー保護を強化するために、写真と動画の権限に関するポリシーを導入して、写真 / 動画に関する広範な権限（READ_MEDIA_IMAGES および READ_MEDIA_VIDEO）を要求できるアプリの数を減らします。アプリは、アプリの機能に直接関連する目的のためにのみ写真と動画にアクセスできます。こうしたファイルに一度だけアクセスする必要があるアプリや、頻繁にアクセスする必要がないアプリでは、Android の写真選択ツールなどのシステムの選択ツールをご使用いただく必要があります。

2024年4月3日のポリシーに関するお知らせに下記内容が記載されていて詳細を確認すると「2024年8月31日までに対応するか2025年1月までの延長をリクエスト送る必要がある」とのことでした
> 昨年 10 月、写真または動画の広範な権限（READ_MEDIA_IMAGES と READ_MEDIA_VIDEO）をリクエストできるアプリの数を減らすため、写真と動画の権限に関するポリシーを導入しました。2024 年 8 月 31 日から、アプリの機能に直接関係のある目的でのみ、アプリは写真と動画にアクセスできるようになります。こうしたファイルに一度だけアクセスする必要があるアプリや、頻繁にアクセスする必要がないアプリでは、Android の写真選択ツールなどのシステムの選択ツールを使用することが求められます。

https://support.google.com/googleplay/android-developer/answer/14016515?hl=ja

https://support.google.com/googleplay/android-developer/answer/14594990?hl=ja

https://support.google.com/googleplay/android-developer/answer/14115180?hl=ja