カテゴリー
SugiBlog Webエンジニアのためのお役立ちTips

SDカード内画像の削除

SDカードに画像を保存する際、同じ名前で上書き保存すると、画像自身は上書きされますが、
元画像のサムネイルだけが残ってしまいます。
実際は、サムネイルとデータベースにもデータが残っているのではないでしょうか。
そのため、上書き保存したい場合は、データベースから削除する必要があります。

1String PATH = Environment.getExternalStorageDirectory().toString();
2Uri IMAGE_URI = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
3File file = new File(PATH, filename);
4 
5if(file.exists()) {
6    String[] proj = { MediaStore.Images.Media._ID, MediaStore.Images.Media.DATA };
7    Cursor cursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, proj, MediaStore.Images.Media.DATA + " = ?", new String[] { PATH + "/" + filename }, null);
8    if(cursor.getCount() != 0) {
9        cursor.moveToFirst();
10        Uri deleteUri = ContentUris.appendId(
11            MediaStore.Images.Media.EXTERNAL_CONTENT_URI.buildUpon(),
12            cursor.getLong(cursor.getColumnIndex(MediaStore.Images.Media._ID))).build();
13        getContentResolver().delete(deleteUri, null, null);
14    }
15    file.delete();
16}
6,818 views

コンテンツプロバイダ

メディア関係のURIのリストです。

1MediaStore.Images.Media.INTERNAL_CONTENT_URI     //内部メディアの画像
2MediaStore.Images.Media.EXTERNAL_CONTENT_URI     //外部メディアの画像
3 
4MediaStore.Video.Media.INTERNAL_CONTENT_URI      //内部メディアの動画
5MediaStore.Video.Media.EXTERNAL_CONTENT_URI      //外部メディアの動画
6 
7MediaStore.Audio.Media.INTERNAL_CONTENT_URI      //内部メディアの音楽
8MediaStore.Audio.Media.EXTERNAL_CONTENT_URI      //外部メディアの音楽
9MediaStore.Audio.Albums.INTERNAL_CONTENT_URI     //内部メディアの音楽アルバム
10MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI     //外部メディアの音楽アルバム
11 
12MediaStore.Video.Thumbnails.INTERNAL_CONTENT_URI //内部メディアの動画のサムネイル
13MediaStore.Video.Thumbnails.EXTERNAL_CONTENT_URI //外部メディアの動画のサムネイル
2,339 views