gpt4 book ai didi

java - 如何通知 MediaStore 某些项目已删除?

转载 作者:行者123 更新时间:2023-12-04 17:45:30 24 4
gpt4 key购买 nike

我有一个简单的图库应用程序,用户可以在其中拍摄或删除照片。对于拍照,这可以通知 MediaStore 新创建的文件:

File file = new File(storageDir, createImageName());

final Uri uri = Uri.fromFile(file);

Intent scanFileIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri);
sendBroadcast(scanFileIntent);

我删除了照片,但本 map 库应用程序仍将它们显示为空白文件。这是行不通的。我的目标是最低 Android 5.0:

File file = new File(Environment.getExternalStorageDirectory() + File.separator + "Folder where application stores photos");

final Uri uri = Uri.fromFile(file);


Intent scanFileIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri);
sendBroadcast(scanFileIntent);

我想做的是扫描我的应用程序在删除文件时创建的文件夹,以通知 MediaStore 已删除的图像和文件夹。我该怎么做?

最佳答案

这是一个从 MediaStore 中删除媒体文件的任何记录的方法。

请注意,MediaStore 中的 DATA 列是指文件的完整路径。

    public static boolean deleteFileFromMediaStore(
Context context, String fileFullPath)
{
File file = new File(fileFullPath);

String absolutePath, canonicalPath;
try { absolutePath = file.getAbsolutePath(); }
catch (Exception ex) { absolutePath = null; }
try { canonicalPath = file.getCanonicalPath(); }
catch (Exception ex) { canonicalPath = null; }

ArrayList<String> paths = new ArrayList<>();

if (absolutePath != null) paths.add(absolutePath);
if (canonicalPath != null && !canonicalPath.equalsIgnoreCase(absolutePath))
paths.add(canonicalPath);

if (paths.size() == 0) return false;

ContentResolver resolver = context.getContentResolver();
Uri uri = MediaStore.Files.getContentUri("external");

boolean deleted = false;

for (String path : paths)
{
int result = resolver.delete(uri,
MediaStore.Files.FileColumns.DATA + "=?",
new String[] { path });

if (result != 0) deleted = true;
}

return deleted;
}

关于java - 如何通知 MediaStore 某些项目已删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48733122/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com