旧. -開発日記-

〜とあるプログラマーのつぶやきや開発メモなど〜

保存した画像のギャラリー反映

こんばんは

業務のほうが依然忙しく、睡眠削ってのAndroidお勉強まっただ中ですが...。
諸々メモ書きとして残しておいた方がよさそうなネタがいくつか
溜まってきたので。


今回は「保存した画像をギャラリーへ反映させる」といったもの。

Androidで、例えば画面のキャプチャーなんかを撮り、
それを保存する処理をした時、必ず1度はハマったのではないでしょうか?
自分は当時一行にギャラリーに反映されないこの現象を
「そういうものなんだAndroidは」と開き直っていました。

ちゃんと対応策がありましたのでメモメモ。

AndroidはMediaScanといった処理を行いデータベース化することで
ギャラリーに反映され、初めて参照することが出来ます。
これはSDカードをマウントした際に発生するため、
実際紹介する処理を行わなくても、手動で一度SDカードマウントすれば
ギャラリーには反映されます。

けどアプリを使っているユーザーはそんなことは気にしないですし、
いざ自分がDLしたアプリで「保存」を押したのにギャラリーの
どこにも 存在していなかったら...
(実際にはマウントすれば見えたかもしれないけれど)


「あれ?」


てことになって不安になってしまいますよね。
なのでユーザビリティから考えても即時反映させられるならしてあげましょう。

//事前にpicturePathには以下のような記述でパスを代入しておく
//String picturePath = Environment.getExternalStorageDirectory().getPath() 
// + "/ディレクトリ名/" + System.currentTimeMillis() +".jpg";

String[] paths = {picturePath};//保存された画像のパス
String[] mimeTypes = {"image/jpeg"};

MediaScannerConnection.scanFile(
  getApplicationContext(), paths, mimeTypes, new OnScanCompletedListener() {

  @Override
     public void onScanCompleted(String path, Uri uri) {
       Log.d("スキャンしたファイルのパス", "-> path=" + path);
       Log.d("ContentProviderのURI", "-> uri=" + uri);
   }
 );

Log.dで、実際スキャンしたファイルのパスと、
ContentProviderのURIが確認出来ます。

これでキャプチャーを撮った画像や独自カメラで撮影した絵などを保存した場合も
即座にギャラリーに反映させてやることが出来ます。