![作ればわかる!AndroidプログラミングKotlin対応10のサンプルで学ぶAndroidアプリ開発“実践”入門[金宏和實]](https://tshop.r10s.jp/book/cabinet/0146/9784798160146.jpg?fitin=200:300&composite-to=*,*|200:300)
作ればわかる!Androidプログラミング Kotlin対応 10の実践サンプルで学ぶAndroidアプリ開発入門 [ 金宏 和實 ]
ながれです。
前回、getExternalStorageDirectory()はAndroid 10から使えなくなったというお話をしました。
ではどうすれば良いか?というのが本記事の内容となります。
getExternalStorageDirectory()の代替手段
公式からは、getExternalStorageDirectory()の代替手段として3つの手段が紹介されています。
・Context#getExternalFilesDir(String)
上記3について、それぞれ詳しく見ていきましょう。
Context#getExternalFilesDir(String)
以下のようなパスが取得できます。
/storage/emulated/0/Android/data/{パッケージ名}/files
要は、アプリ固有の領域へのファイルパスですね。
アプリが削除されると、アプリ固有のフォルダも削除されます。
これではgetExternalStorageDirectory()の代替手段とは言えませんね…
(まぁAndroid的には、本来アプリが作成するファイルなどをここに保存するのが望ましいようですが)
MediaStore
ファイルパスを取得する、というよりはファイルにアクセスする手段ですが、MediaStoreは外部ストレージにアクセス可能です。他アプリが作成したファイルパスなどにアクセスできます。
ただし、使えるファイルは画像ファイル・音楽ファイル・動画ファイルのみのようなのでご注意ください。
詳しい使い方は、以下公式サイトをご参照ください。
https://developer.android.com/reference/android/provider/MediaStore.html
Intent#ACTION_OPEN_DOCUMENT
こちらもファイルにアクセスする手段ですが、外部ストレージにアクセス可能です。
StorageAccessFrameworkと呼ばれるフレームワークを使用して、外部ストレージにファイルにアクセスできます。
こちらは、MediaStoreが使えないファイルを使用することができます。
詳しい使い方は、以下公式サイトをご参照ください。
https://developer.android.com/guide/topics/providers/document-provider?hl=ja

まとめ
以前、お仕事でAndroidアプリ開発に携わった際はAndroid 9だったためgetExternalStorageDirectory()を使用していました。
しかし、Android 10では非推奨となったことから、Androidアプリ内でファイルなどを作成する場合はアプリ固有の領域に保存するのが基本、ということを知らなかった自分が恥ずかしいです…
勉強しないと…