[Android] Storage Access Framework でフォトアプリから画像を取り出す

デフォルトでAndroidにインストールされているギャラリーあるいはフォトから画像を取得するにはSAF(Storage Access Framework)を使うと可能です。
画像ファイルを読み出したい場合などは、ACTION_OPEN_DOCUMENT を使い、また保存したい場合はACTION_CREATE_DOCUMENTアクションを使います。

Android Studio
2021.1.1




SAF, Storage Access Framework

 
SAFを使うことによりコンテンツを容易に参照できます。

  • ドキュメント ストレージ プロバイダ全体から簡単にドキュメント、画像、その他のファイルを参照して開くことができる
  • 標準の Picker UI により、アプリやプロバイダを通じて一貫性のある方法でファイルにアクセスできる

1x1.trans - [Android] Storage Access Framework でフォトアプリから画像を取り出す

図 2. ストレージ アクセス フレームワークのフロー
Ref:ストレージ アクセス フレームワーク

 

 

Intent ACTION_OPEN

 
画像ファイルを取り出してみましょう。

  • Intent.ACTION_OPEN_DOCUMENT
    • ピッカーを使用してファイルを選択するためのIntent
  • Intent.CATEGORY_OPENABLE:
    • openFileDescriptor() によるファイル ストリームとして利用可能な「開くことができる」ファイルのカテゴリーを選択
  • setType:
    • MIME タイプを指定、取得するファイルの形式をフィルターする 


 
ピッカーから画像を選択すると、registerForActivityResult()を使って結果のコールバックを登録しそこからデータを取り出します
 


このケースでは、パーミッションなど必要ありません(これがありがたいですね)

 

サンプルコード

 
フォトにある画像を読みだして表示させてみましょう。
 
1x1.trans - [Android] Storage Access Framework でフォトアプリから画像を取り出す


 
MainActivity.java

activity_main.xml

 
リソースです
strings.xml
 

サンプル動画

 


 
本来は非同期で画像を取り込む事が望ましいとされています。(この例では簡略化させていただきました…)
 
 
関連ページ:
 

asynctask 00b 100x100 - [Android] Storage Access Framework でフォトアプリから画像を取り出す
データを保存するストレージ領域が目的・用途によって区分されてセキュリティー的に厳しくなりました。 対象範囲別外部ストレージ   S...

 
 
References:
Storage Access Framework
インテント
ACTION_OPEN_DOCUMENT
ACTION_GET_CONTENT

シェアする

  • このエントリーをはてなブックマークに追加

フォローする