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

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

Android Studio 3.4.2
API 29
AndroidX



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

 
BUTTON SAVE でassets に置いた画像を外部ストレージに保存
BUTTON READ で保存した画像を読み出して表示します。
 

 
assetから画像を取り込みましたが、ネットから落としたり、画像を何らかの形で動的に取得した場合は一旦内部メモリに落とし込んだ方が扱いやすいかもしれません。
 
アンドロイドのデータベースへ登録:
画像は通常はデフォルトで端末に入っているギャラリーやフォトなどのアプリで表示できます。ただこれはすぐには反映されないので画像を保存してすぐギャラリーを確認しても写真が無いこともあります。そのためにアンドロイドのデータベースへ登録しています。
 
 
関連記事:

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

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

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




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

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

以下の3つはAndroidが学習できるオンラインスクールです。


TECH ACADEMY
Androidアプリコース



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



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





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

尚、スクールがダメだと言う人がいますが、やる気があれば問題ありません。与えられるのを待っていてはいけないですね
欲しいものは取りに行くのです。


Google Pixel 3 XLグローバル版
SIMフリー 並行輸入品
6.3インチの大画面
背景をぼかすポートレートモード撮影


Anker PowerCore II Slim 10000
Power IQ 2.0搭載
iPhone & Android対応

シェアする

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

フォローする