我正在编写一个能够编辑MP3歌曲类型的Android音乐播放器。
我正在遵循的程序是:
我的研究建议我需要修改MediaStore.Audio.Genres.Members表(即这是我用来获取流派信息的表)。
我的问题是看似简单的删除操作无法按预期工作。
注意:我知道不要使用如图所示的硬编码URI,但这只是测试代码...
String uriStr = "content://media/external/audio/genres/2/members";
Uri uri = Uri.parse(uriStr);
// Query the table for the row with ID=5448
Cursor cursor = context.getContentResolver().query(uri, null, BaseColumns._ID + "=5448", null, null);
Log.v("Test", "Row count: " + cursor.getCount());
cursor.close();
// Try to delete row 5448
int rowsCount = context.getContentResolver().delete(uri, BaseColumns._ID + "=5448", null);
Log.v("Test", "Rows deleted: " + rowsCount);
// Try (again) to delete row 5448
rowsCount = mService.getContentResolver().delete(uri, BaseColumns._ID + "=?", new String[]{"5448"});
Log.v("Test", "Rows deleted: " + rowsCount);
// Query (again) the table for the row with ID=5448
Cursor cursor1 = mService.getContentResolver().query(uri, null, BaseColumns._ID + "=5448", null, null);
Log.v("Test", "Row count: " + cursor1.getCount());
cursor1.close();
上述代码的日志是......
Row count: 1
Rows deleted: 0
Rows deleted: 0
Row count: 1
为什么上述查询会返回有效条目,但删除会失败???
答案 0 :(得分:0)
编辑表格没有意义。 Android会自动使用标记音乐中的内容更新此内容。为什么不从mp3角度看问题呢?向用户显示一个类型列表,提供替换功能,然后使用新类型更新曲目
答案 1 :(得分:0)
也许你不需要这个,但如果你这样做,我可以建议我使用的解决方案: 当你显示流派时,只需检查每个流派的曲目数量,如果它是0则只是不显示这种流派。
答案 2 :(得分:0)
您更愿意使用AUDIO_ID列而不是BaseColumns._ID,因为每次删除行时都可能会更新行ID。
以下是我在自己的应用中所做的事情(在Android 4.0.4上测试并正常运行):
context.getContentResolver().delete(MediaStore.Audio.Genres.Members.getContentUri(
"external", genreId), MediaStore.Audio.Genres.Members.AUDIO_ID + " = " + song.getId(), null);