【问题标题】:Android: ContentResolver wont update it's valuesAndroid:ContentResolver 不会更新它的值
【发布时间】:2015-05-27 06:25:35
【问题描述】:

我正在制作一个 android 音乐应用程序,我正在使用 SQLiteDatabase 从 Main 活动的 OnCreate() 的 ContentResolver 查询中获取歌曲值后存储它们。

但是,当我打开 Android 设备监视器并推送文件或动态 (new File(path).delete();) 删除文件时,如果我关闭应用程序并再次启动它或再次运行它,它不会在 ContentResolver 中更新Android Studio,启动时有另一个查询,但删除的歌曲仍然显示,添加的歌曲不显示。

由于文件已正确删除/添加到 ADM 中,我怀疑这是 ContentResolver 未更新的问题。我只修改了我的数据库以添加或删除歌曲行,因为我认为 ContentResolver 将自行更新。请帮助我如何确保它得到更新。

这也是让歌曲从根目录手动遍历文件系统的更好(并且可能)的方法吗?

【问题讨论】:

  • 查看 MediaScannerConnection
  • @pskink 感谢您的提示,但是使用 MediaScannerConnection,如何扫描已删除的文件?我的意思是我是否只扫描它在删除之前的文件路径?行得通吗?

标签: java android cursor android-contentresolver


【解决方案1】:

好吧,我很尴尬地发现答案非常明显,但我会保留这个问题,以防其他人有类似的困惑时刻:

首先获取文件路径。举个例子:

public static String getPath(int position)
    {
        cursor.moveToPosition(position);
        return cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));
    }

所以现在您将路径存储在一个名为 path 的字符串中,然后您实际上删除了该文件:

System.out.println(new File(path).getAbsoluteFile().delete());

然后您可以手动将其从 contentresolver 中删除,否则它不会立即更新:

System.out.println(getContentResolver().delete(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, MediaStore.Audio.Media.DATA + " = '" + path + "'", null));

如果需要确认,系统会在控制台打印删除的内容行数或文件是否已删除。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-26
    • 1970-01-01
    • 2020-06-09
    • 2012-03-11
    • 2021-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多