我正在创建一个Android音乐应用程序,我在使用SQLiteDatabase存储歌曲值后,在主要活动的OnCreate()的ContentResolver上获取它们。
然而,当我打开Android设备监视器并推送文件或动态(new File(path).delete();
)删除文件时,如果我关闭应用程序并再次启动它或运行它,它就不会在ContentResolver中更新再次从Android Studio,在启动时还有另一个查询,但仍然显示已删除的歌曲,而添加的歌曲则没有。
由于文件已在ADM中正确删除/添加,我怀疑这是ContentResolver未更新的问题。我只修改了我的数据库以添加或删除歌曲行,因为我认为ContentResolver会自行更新。请帮助我确保如何更新。
还有一种更好(也可能)的方式让歌曲从根目录手动遍历文件系统吗?
答案 0 :(得分:0)
我很尴尬地发现答案非常明显,但是如果其他人有类似的混乱时刻我会留下这个问题:
首先获取文件路径。举个例子:
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());
然后您可以手动将其从内容解析器中删除,因为它不会立即更新:
System.out.println(getContentResolver().delete(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, MediaStore.Audio.Media.DATA + " = '" + path + "'", null));
如果您需要确认,系统输出将打印已删除的内容行数或者是否已在控制台上删除该文件。