アプリケーションのプログラム内からデバイスへ画像を追加した際、
そのままでは、ギャラリー(標準の画像ビューワー)に表示(反映)されません。
解決するには、以下のように MediaScannerConnection クラスを使用するか、ContentResolver クラスを使用します。
※サンプルコードでは両方のコードを記述していますが、実際には、どちらか一方でOKです
HTC Desire + Android 2.2 の環境でのみ動作確認
サンプルコード
String title = "test";
String fileName = title + ".jpg";
String mimeType = "image/jpeg";
File file = new File(
Environment.getExternalStorageDirectory(),
fileName);
// MediaScannerConnection を使用する場合
MediaScannerConnection.scanFile( // API Level 8
this, // Context
new String[] { file.getPath() },
new String[] { mimeType },
null);
// ContentResolver を使用する場合
ContentResolver contentResolver = getContentResolver();
ContentValues values = new ContentValues(7);
values.put(Images.Media.TITLE, title);
values.put(Images.Media.DISPLAY_NAME, fileName);
values.put(Images.Media.DATE_TAKEN, System.currentTimeMillis());
values.put(Images.Media.MIME_TYPE, mimeType);
values.put(Images.Media.ORIENTATION, 0);
values.put(Images.Media.DATA, file.getPath());
values.put(Images.Media.SIZE, file.length());
contentResolver.insert(Images.Media.EXTERNAL_CONTENT_URI, values);
参考
- ギャラリーへの画像反映方法について ・・・要グループアカウント
- MessageView.java
※上記では、MediaScannerConnectionクラスのstaticなscanFileメソッドを使用していましたが、
MessageView.java の MediaScannerNotifier クラスのように、
MediaScannerConnectionClient インターフェースを使用する方法もあります - 「WEB+DB PRESS Vol.57
」の「第5章 カメラ本格活用アプリを作ろう P.51」にも解説がありました
- @gabu さん、@thorikawa さん、有難うございました
