[Android] MediaStore 画像を保存する

パブリックな共有ストレージのMediaStoreに画像を保存する方法について見てみましょう。

Android Studio 4.1
API 30

 



MediaStore

 
ストレージには内部ストレージ(Internal Storage)と外部ストレージ(External Storage)があります。アプリには固有のストレージ領域がありますが、共有のストレージ領域を使うことも可能です。

mediastore save 03 - [Android] MediaStore 画像を保存する

メディアコレクションは共有可能なストレージで写真、動画やミュージックなどのメディアを保存できる領域です。

  • MediaStore APIを使ってアクセスし、他のアプリが作成したメディアには読み出しでアクセスできる
  • 読み出しにはREAD_EXTERNAL_STORAGE のPermissionが必要,
  • 保存に WRITE_EXTERNAL_STORAGE は不要(Android 10 以降)
    mediastore save 05 - [Android] MediaStore 画像を保存する
  • アプリが削除されてもファイルは残っている

 画像:(写真とスクリーンショットを含む)
DICM/、Picture/ ディレクトリに格納されている
● 動画:
DCIM/、Movies/、Pictures/ ディレクトリに格納
● オーディオ:
オーディオファイルは Alarms/、Audiobooks/、Music/、Notifications/、Podcasts/、Ringtones/ ディレクトリに格納
オーディオ プレイリストは Music/ ディレクトリまたは Movies/ ディレクトリに格納

 

 

プロバイダにデータを挿入

 
Mediaファイルを保存するには、ContentResolver.insert() を使ってプロバイダにデータを挿入します。プロバイダに新しい行を挿入し、その行のコンテンツ URI を返します。

 
ContentValues:ContentResolverにデータを保存するためのクラスで、
ファイル情報を入力し、insert() の引数に使います

insert()からUriオブジェクトが返されるので、そこに保存します。

IS_PENDING を 1 に設定して処理が完了していないので他からのアクセスを無視するようにします。

処理が終わったら IS_PENDING を 0 にして解除してから
update() にて更新をします。

 

サンプルコード

 
drawableに入れた画像をMediaStoreに保存してみましょう。

MainActivity.java

 
適当な画像をsample_image.jpgとして用意しdrawableに入れます。

acitivty_main.xml

 
strings.xml

これで実行すると、
mediastore save 01 - [Android] MediaStore 画像を保存する
 
スマホの「フォト」アプリから共有ストレージを見ると「Pictures」に保存されているのがわかります。

mediastore save 04b - [Android] MediaStore 画像を保存する
 
画像の情報を見ると
mediastore save 02 - [Android] MediaStore 画像を保存する
 
以下に保存されていることが分かります。

尚、このパスはあくまで例で実装は端末に依存します。

 
 
関連ページ:
 

asynctask 00b 100x100 - [Android] MediaStore 画像を保存する
データを保存するストレージ領域が目的・用途によって区分されてセキュリティー的に厳しくなりました。 対象範囲別外部ストレージ   S...

 
References:
外部ストレージ内のメディア ファイルを操作する
共有ストレージからメディア ファイルにアクセスする
コンテンツ プロバイダの基本

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

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

 

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

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

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


TECH ACADEMY
Androidアプリコース


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


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


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


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




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




シェアする

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

フォローする