ギャラリーから画像/動画を取得する

ギャラリーから画像/動画を取得する

まずはインテントを作成

簡単に説明していきます。

ACTION_PICK:データからアイテムを選択、そして返す(URI)
参考:https://developer.android.com/reference/android/content/Intent?hl=ja#ACTION_PICK

EXTERNAL_CONTENT_URI:Android内のVideoディレクトリに移動。
MediaStore.Files.getContentUri(“external”)でファイル全般の取得も可能らしいが以下のtypeプロパティで画像と動画の取得ができたので使ってない。
他に使えるuriについて以下に載せときます。
参考:https://android.roof-balcony.com/shori/content-provider/getcontent-3/

typeは指定したuriのMIMEタイプを指定できる。
ここでimageとvideoを指定することでどちらにもアクセスできるようになる。

ちなみにこういったインテントの呼出し方を暗黙的インテントというらしい。
その逆(アクティビティを指定して呼び出す方法)は明示的インテント。
以下が分かりやすい。
参考:https://android.roof-balcony.com/shori/content-provider/getcontent-3/

typeは指定したuriのMIMEタイプを指定できる。
ここでimageとvideoを指定することでどちらにもアクセスできるようになる。

ちなみにこういったインテントの呼出し方を暗黙的インテントというらしい。
その逆(アクティビティを指定して呼び出す方法)は明示的インテント。
参考:Androidの明示的インテント、暗黙的インテント、ブロードキャストインテントについて

startActivityForResult:これによって起動したアクティビティは終了時に起動元のonActivityResultにデータを返します。
また、第2引数に値(requestCode)を指定しているが、これはどのアプリ/機能から呼び出されているかを判別するためのもの。

続いて受け取り側の処理を載せます。

画像か動画かで処理を分けたいのでContentResolverを使ってデータのMIMEタイプから識別をしています。
以下を参考にして書きました。
参考:https://stackoverflow.com/questions/34488921/identify-in-onactivityresult-if-image-was-selected-from-gallery-or-video-was-sel

requestCodeは先ほどstartActivityForResultで指定した値がそのまま返ってきます。
また、resultCodeではRESULT_OKかRESULT_CANCELEDのどちらかが必ず返ってきます。

今回はサンプルとして受け取ったファイルがvideoかimageかでそれぞれ専用のviewに張り付けるようにしています。