我通过以下方式插入图片:
ContentValues values = new ContentValues();
values.put(Images.Media.TITLE, filename);
values.put(Images.Media.DATE_ADDED, System.currentTimeMillis());
values.put(Images.Media.MIME_TYPE, "image/jpeg");
Uri uri = this.getContentResolver().insert(Images.Media.EXTERNAL_CONTENT_URI, values);
但是当我尝试删除时
File f = new File(imageURI);
f.delete();
图片不再存在,但空占位符是。有什么想法吗?
答案 0 :(得分:15)
Android有各种各样的缓存来跟踪媒体文件。
试试这个:
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory())));
它使MediaScanner服务再次运行,这应该从设备的缓存中删除已删除的图像。
您似乎还需要将此权限添加到AndroidManifest.xml:
<intent-filter>
<action android:name="android.intent.action.MEDIA_MOUNTED" />
<data android:scheme="file" />
</intent-filter>
答案 1 :(得分:10)
如评论中所述,接受的答案使用了大量内存。虽然MediaScannerConnection没有“deleteFile”方法,但只要在删除文件后将旧文件路径传递给“scanFile”方法即可。媒体扫描仪将重新扫描并删除媒体。
在N5上测试。 Android 4.4。
编辑:其他人已经声明这不适用于4.2
new AsyncTask<Void, Void, Void>(){
@Override
protected Void doInBackground(Void... params) {
String filePath = recording.file.getAbsolutePath();
recording.file.delete();
MediaScannerConnection.scanFile(context,
new String[]{filePath}, null, null);
return null;
}
}.execute();
答案 2 :(得分:6)
您还可以使用以下方法从图库中删除图像:
getContentResolver()。delete(imageUri,null,null);
当你调用insert时,只需确保'imageUri'是uri返回给你的。
答案 3 :(得分:3)
如果您不知道@manisha和@答案中所需的image-id @Muhammad Waqas Khan您也可以按文件名删除
String fullPathToFile = "/storage/sdcard0/DICM/test.jpg";
getContentResolver().delete(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
MediaStore.Images.Media.DATA + "=?", new String[]{ fullPathToFile } );
[更新2016-06-16]
危险:这看起来像“只删除mediaDB中的项目”。 由于mediaDB中存在SQLite-cascade-file-delete-trigger,引用文件也会被删除(如果存在)。
为避免这种情况,您必须在调用delete之前将MediaStore.Images.Media.DATA列更改为不存在的文件路径。
答案 4 :(得分:2)
这对我有用(在HTC Desire,Android 2.3上测试)
// Tell the media scanner about the new file so that it is
// immediately available to the user.
MediaScannerConnection.scanFile(this,new String[] { file.toString() }, null,
new MediaScannerConnection.OnScanCompletedListener() {
public void onScanCompleted(String path, Uri uri) {
Log.i("ExternalStorage", "Scanned " + path + ":");
Log.i("ExternalStorage", "-> uri=" + uri);
}
});
答案 5 :(得分:1)
使用此方法
getContentResolver()。删除(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
MediaStore.Images.Media._ID +“=?”,new String [] {Long.toString(id)});
答案 6 :(得分:1)
在File.delete();
之后添加此行:
MediaScannerConnection.ScanFile(this,new string[]{fileUrl.ToString()}, null, null);
答案 7 :(得分:1)
<svg><path></path><text></text></svg>
答案 8 :(得分:0)
在删除文件后添加此权限:
MediaScannerConnection.scanFile(context, arrayOf(imageURI.getPath()), null, null)
:)