0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Photo Pickerの使い方を改めて整理する(Kotlin + ActivityResult対応)

Posted at

はじめに

Androidアプリで画像や動画を扱う機能は非常に一般的ですが、ストレージ権限の取り扱いには常に注意が必要でした。
特にAndroid 10以降はストレージアクセスに関する制限が厳しくなり、ユーザーのプライバシーを守りつつ、快適なメディア選択体験をどう提供するかが開発者の課題となっています。

そんな中登場したのが Photo Picker です。
これはシステムが提供する共通のUIを使って、ユーザーに安全かつ直感的に画像や動画を選ばせることができる仕組みで、端末内メディアだけでなく、Googleフォトなどのクラウドサービスとも連携可能になっています。

さらに、アプリにストレージの権限を与える必要がない という点でも、非常に優れた設計となっており、今後のメディア選択の標準になる存在です。

そこでこの記事では、Photo Pickerの基本的な考え方と導入方法を、Kotlinコード付きでご紹介します。

Photo Pickerとは?

Photo Pickerは、ユーザーが画像や動画を選択するための システム提供のUI です。
従来のように READ_EXTERNAL_STORAGE 権限を使わずに、必要なメディアだけにアクセスできます。

主なメリット

  • クラウド連携:Googleフォト上の画像にもアクセス可能
  • 権限不要:ストレージアクセス権限をリクエストしなくてOK
  • 統一UI:OS提供のUIで端末ごとの違いを吸収

導入方法(Kotlin + Jetpack Activity Result API)

1. 依存関係の追加(必要に応じて)

// Photo Picker は AndroidX Activity に含まれています
implementation "androidx.activity:activity-ktx:1.7.0"

2. Media Pickerのコントラクトを定義

sample.kt
private val pickMedia =
    registerForActivityResult(PickVisualMedia()) { uri ->
        if (uri != null) {
            imageView.setImageURI(uri)
        } else {
            Log.d("PhotoPicker", "画像が選択されませんでした")
        }
    }

3. 実行トリガー

sample.kt
button.setOnClickListener {
    pickMedia.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly))
}

注意点

  • クラウド画像は非同期取得 になることがあるため、ローディング表示を考慮すると◎
  • 古い端末では ACTION_PICK や SAF(ストレージアクセスフレームワーク)との使い分けが必要
  • 複数選択や動画の選択には以下のようなリクエストも可能
PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.VideoOnly)

まとめ

Photo Pickerを活用することで、安全かつ直感的な画像選択機能をユーザーに提供できます。
クラウド連携や権限削減が当たり前になりつつある今、積極的に取り入れていくのがオススメです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?