[Android] 外部ストレージに画像を保存・読出しをする

cat29 01 - [Android] 外部ストレージに画像を保存・読出しをする
画像を外部ストレージ領域に保存して読出してみます。端末内の写真が保存されているところに画像ファイルを置くとフォトアプリが写真としてリストアップしてくれます。

Android Studio 3.5.3
API 29



EXTERNAL-STORAGE

 
文字列をテキストファイルとして外部ストレージに保存しましたが、外部ストレージを使うのはむしろ画像が多いのではないでしょうか。
テキストファイルはアプリ内のメモリに保存できますが、画像をたくさん入れるのは限界があります。

save picture 02b - [Android] 外部ストレージに画像を保存・読出しをする
 

 

パーミッションチェック

 
外部ストレージへの読み書きには2種類のパーミッションが必要です。

  1. AndroidManifest.xml にusers-permissionの記述を入れる
  2. WRITE_EXTERNAL_STORAGEREAD_EXTERNAL_STORAGdangerous permission なので、permission checkの実装が必要になります。これを実装するとユーザーに許可・不許可のダイアログを表示させ、ユーザーはいつでもアプリの許可設定を変更できます。

2つめのpermission checkは実装がそこそこあります。テスト段階での確認をするだけならpermission checkをオミットすることができます。
 
permission checkの除外
最初は permission check 無しで実行して、External Storageを呼ぶところまで実行します。そこで止まってしまうかスルーするかもしれませんが終了。
 
該当アプリを「設定」から探し「権限」の項目にあるストレージをenableにします。
 
externalstorage 02 - [Android] 外部ストレージに画像を保存・読出しをする
 
これで、ユーザーがpermissionを許可された状態になりますがあくまでテスト用です。

 

画像ファイルの読み書き

 
画像はassetsに置いてそこからInputStreamで取り込み、FileOutputStreamでバッファリングして保存していきます。
 
外部ストレージでユーザーが保存できるpathは以前は
Environment.getExternalStorageDirectory().getPath()
によって取得できましたがAPI29からは使えません。代わりに

  • Context#getExternalFilesDir(String)

を使います。あるいは以下の方法もあります。

ここでは Context#getExternalFilesDir(String) を使ってみます。
これを使う場合は他とは異なる保存方法になります。
対象範囲別外部ストレージ アクセスを管理する

  • アプリ固有ディレクトリに保存
  • アプリをアンインストールするとファイルも削除されます

ファイルの書き込みや読み出しにはtry-chatchを使いますが、リソースの開放漏れが無いようにfinallyでclose()を入れるか、try-with-resourcesを使います。
 

 
読み出しです。
 

 

サンプルコード

 
assetsにsample_image.jpg画像を置きます。
assetsについてはこちらを参考にしてください。
 
MainActivity.java

 
レイアウト
activity_main.xml

 
リソースです
strings.xml

 
マニフェストの設定です忘れないように
AndroidManifest.xml

 
これで画像を保存して読み出してみましょう。
 

save picture 02b - [Android] 外部ストレージに画像を保存・読出しをする

 
assetから画像を取り込みましたが、ネットから落としたり、画像を何らかの形で動的に取得した場合は一旦内部メモリに落とし込んだ方が扱いやすいかもしれません。
 
保存された画像:
Device File Explorer を使うと保存された画像を確認できます。
EsternalStorageの中にAndroidというディレクトリがありその中に当該プロジェクト以下に画像が保存されていました。

picture save 02b - [Android] 外部ストレージに画像を保存・読出しをする

 
 
関連記事:

References:
ファイルを保存する
ストレージ オプション | Android Developers

誤字脱字、意味不明で分からにゃイ、
などのご意見はこちらから mailフォーム

ブックマークしておくと便利です このエントリーをはてなブックマークに追加

 

アプリ開発が上達するお勧め

アプリ開発を始めたけどわからないところがあり、誰かに聞きたいけど周りにはそんな人はいない…あるいは、会社で働いていて日中そんなに時間をとれないなど、オンラインのプログラミングスクールがいいでしょう。

オンラインスクールは色々ありますが、以下の3つはAndroidが学習できる老舗スクールです。


TECH ACADEMY
Androidアプリコース


こういうものではアプリ作れないと言う意見もありますが、それは結局本人のやる気があるかないかです。やる気があっても独学では突破しにくいところは教えてもらうのが一番早い。


侍エンジニア塾
侍エンジニア塾 無料体験レッスン


とても簡単なことなのに本やネットの画像だけでは分かりにくいことはあります。実際に質問してピンポイントで教えてもらうと、なんだそんなこと、と言うのがけっこうあります。


CodeCamp
~約8,000名の受講生と80社以上の導入実績~
現役エンジニアのオンライン家庭教師CodeCamp




直接(ネットで)誰か分かる人に聞いた方が早く解決して、上達も早いと思います。


無料で転職まで
これはアプリ限定ではありませんが無料です
その代わり就職することを前提にしたスクールでエンジニアになって職を得たいのであれば手っ取り早いかもしれません




シェアする

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

フォローする