共有メモリにファイルを保存するためにSAF(Storage Access Framework)を利用します。ファイル保存に使うのは ACTION_CREATE_DOCUMENTです。取り出したい場合は ACTION_OPEN_DOCUMENT を使います。
2021.1.1
SAF, Storage Access Framework
SAFを使うことによりコンテンツを容易に参照できるようになりました。
- ドキュメント ストレージ プロバイダ全体から簡単にドキュメント、画像、その他のファイルを参照して開くことができる
- 標準の Picker UI により、アプリやプロバイダを通じて一貫性のある方法でファイルにアクセスできる
図 2. ストレージ アクセス フレームワークのフロー
Ref:ストレージ アクセス フレームワーク
Intent ACTION_CREATE
テキストファイルをSAFを使って保存します。
IntentはACTION_CREATE_DOCUMENT
setTypeでMIMEの設定
EXTRA_TITLEでは名前を設定する時のデフォルト候補。
registerForActivityResultを使ってUriを受け取り、そのUriに出力していきます。
サンプルコード
テキストファイルに「Storage Access Framework」の文字列を入れてそれを保存してみます。
MainActivity.java
strings.xml
実行してボタンをタップすると共有ストレージの「Downloads」に移行して、そこに保存できます。
adb を使ってストレージを覗いてみると、text_file.txt が存在します。
また、ファイル内容も想定したものです。
画像ファイルの保存
SAFを使って「Download」ディレクトリにテキストファイルを保存しましたが、同じように画像を保存することも可能です。
関連ページ:
References:
Storage Access Framework
インテント
ACTION_OPEN_DOCUMENT
ACTION_GET_CONTENT