Android 媒体扫描仪 : How do I remove files?

标签 android android-mediascanner

我正在编写一个应用程序,用于删除可能会或可能不会在任何一种类型的媒体库中列出的文件,例如音乐或图片。虽然我可以使用 MediaScannerConnection.scanFile 方法将文件添加 到媒体库,但似乎没有任何调用来通知服务文件已被删除。将不再存在的文件路径发送给它也不会导致所需的行为。我应该如何从库中删除 Android 存储设备上不再存在的项目?

最佳答案

我能够使用这两个问题的点点滴滴将一个方法放在一起

  1. What is the String 'volumeName' argument of MediaStore.Audio.Playlists.Members.getContentUri referring to?
  2. How can I refresh MediaStore on Android?

基本上,我只是对每种 MediaStore 类型(音频、视频和图像)运行查询,按路径选择并删除我找到的任何记录。

public static void RemoveAllForPaths(String[] paths, Context context)
{
    private static final String[] FIELDS = { MediaStore.MediaColumns._ID, MediaStore.MediaColumns.DATA, MediaStore.MediaColumns.TITLE };
    if(paths == null || paths.length == 0) return;
    String select = "";
    for(String path : paths)
    {
        if(!select.equals("")) select += " OR ";
        select += MediaStore.MediaColumns.DATA + "=?";
    }

    Uri uri;
    Cursor ca;

    uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
    ca = context.getContentResolver().query(uri, FIELDS, select, paths, null);
    for(ca.moveToFirst(); !ca.isAfterLast(); ca.moveToNext()){
        int id = ca.getInt(ca.getColumnIndex(MediaStore.MediaColumns._ID));
        uri = ContentUris.withAppendedId(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, id);
        context.getContentResolver().delete(uri, null, null);
    }
    ca.close();

    // More of the same just setting the URI to Video and Images
}

我不完全确定这样做有多安全,但这是迄今为止我找到的唯一解决方案,一些初步测试似乎有效。如果有人对此方法有任何进一步的信息或执行此功能的更好方法,我邀请其他人提交其他答案。

关于Android 媒体扫描仪 : How do I remove files?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8379690/

相关文章:

android - 在 IntelliJ 中构建时 Unresolved maven android 依赖项

java - Android FirebaseDatabase recyclerview 单个变量(userid)的 null 异常

android - 具有自定义评级可绘制对象的 RatingBar 的重力

java - Android Studio - fragment onClickListener 不工作

android - 使用 MediaStore android 重命名图像

android - 如何将拍摄的照片添加到 MediaStore

android - 通过 MediaScannerConnection 客户端获取图像的内容方案 Uri

Android Studio-Libgdx-无法使用 Gradle 分发 'https://services.gradle.org/distributions/gradle-4.4-all.zip' 执行构建

android - 在android中扫描不同的内存类型

java - 刷新媒体扫描仪扫描的文本文件