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

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

Android Studio 3.2.1
Android 9.0



EXTERNAL-STORAGE

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

 

パーミッションチェック

 
外部ストレージへの読み書きには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を許可された状態になりますがあくまでテスト用です。

 

320x480 0107ddd2cbf3fe9b2650df47e5e47ebd d740e - [Android] 外部ストレージに画像を保存・読出しをする

画像ファイルの読み書き

 
画像はassetsに置いてそこからInputStreamで取り込み、FileOutputStreamでバッファリングして保存していきます。
 
外部ストレージでユーザーが保存できるpathは
Environment.getExternalStorageDirectory().getPath()
によって取得できます。
実際のpathは例えば AVD の Emulator であれば、Terminalから見えます。
 

 
但し、端末によってファイルシステムの実装は異なることもあるため、決め打ちのパスでは問題が起こります。
 
リソースの開放漏れが無いように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から画像を取り込みましたが、ネットから落としたり、画像を何らかの形で動的に取得した場合は一旦内部メモリに落とし込んだ方が扱いやすいかもしれません。
 
アンドロイドのデータベースへ登録:
画像は通常はデフォルトで端末に入っているギャラリーやフォトなどのアプリで表示できます。ただこれはすぐには反映されないので画像を保存してすぐギャラリーを確認しても写真が無いこともあります。
registerDatabase(String file) のようにアンドロイドのデータベースへ登録することでこれは解消します。
 
 
関連記事:

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

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

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

ページのトップへ戻る




 

シェアする

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

フォローする