删除Android SD卡上的图像时,有时图像被正确删除但在图库中仍保留已删除图像的预览。点击它时,它将作为黑色图像加载。要解决此问题,您需要运行MediaScanner。但是这段代码无法正常工作,而且评论图片的预览仍然保留在图库中。
任何人都知道如何解决这个问题。
Uri contentUri = Uri.fromFile(file);
Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,contentUri);
sendBroadcast(mediaScanIntent);
答案 0 :(得分:17)
您应该从mediaStore中删除它
public static void deleteFileFromMediaStore(final ContentResolver contentResolver, final File file) {
String canonicalPath;
try {
canonicalPath = file.getCanonicalPath();
} catch (IOException e) {
canonicalPath = file.getAbsolutePath();
}
final Uri uri = MediaStore.Files.getContentUri("external");
final int result = contentResolver.delete(uri,
MediaStore.Files.FileColumns.DATA + "=?", new String[] {canonicalPath});
if (result == 0) {
final String absolutePath = file.getAbsolutePath();
if (!absolutePath.equals(canonicalPath)) {
contentResolver.delete(uri,
MediaStore.Files.FileColumns.DATA + "=?", new String[]{absolutePath});
}
}
}
答案 1 :(得分:11)
虽然
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ Environment.getExternalStorageDirectory())));
仅限于4.4
的系统应用这是另一种解决方案..通过您删除或添加的图片的路径,如果图片被删除,图片传递true
或者如果将图片添加到图库,则传递false
。
/**
* Scanning the file in the Gallery database
*
* @param path
* @param isDelete
*/
private void scanFile(String path, final boolean isDelete) {
try {
MediaScannerConnection.scanFile(context, new String[] { path },
null, new MediaScannerConnection.OnScanCompletedListener() {
public void onScanCompleted(String path, Uri uri) {
if (isDelete) {
if (uri != null) {
context.getContentResolver().delete(uri,
null, null);
}
}
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
答案 2 :(得分:1)
对于删除时的每个文件,请使用此
KITKAT
这对我有用
try {
context.getContentResolver().delete(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
MediaStore.Images.Media.DATA + "='"
+ new File(fileUri).getPath() + "'", null);
} catch (Exception e) {
e.printStackTrace();
}
答案 3 :(得分:0)
试试这个:
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ Environment.getExternalStorageDirectory())));
将此添加到您的清单:
<intent-filter>
<action android:name="android.intent.action.MEDIA_MOUNTED" />
<data android:scheme="file" />
</intent-filter>
答案 4 :(得分:0)
我一直在寻找 C# Xamarin 代码,并为 Xamarin-Android 找到了这个
<块引用>您可以将多个已删除文件的地址/路径传递给 ScanFile(Context,string[]),以便 Mediascanner 获得通知并更新图库
Android.Media.MediaScannerConnection.ScanFile(Android.App.Application.Context, new string[] { deletedImageFilePath}, null, null);