Android:从MediaStore.Audio.Genres.Members表中删除条目
我正在写一个Android音乐播放器,能够编辑MP3歌曲类型 我遵循的程序是:Android:从MediaStore.Audio.Genres.Members表中删除条目,android,mediastore,Android,Mediastore,我正在写一个Android音乐播放器,能够编辑MP3歌曲类型 我遵循的程序是: 编辑MP3文件本身中的流派标记 更新SqlLite MediaStore.Audio.Genres表以反映更改(我不想触发Android长时间的“重新扫描”操作以获取更改本身) 我的研究表明我需要修改MediaStore.Audio.Genres.Members表(即我用来获取流派信息的表) 我的问题是一个看似简单的删除操作没有按预期工作 注意:我不知道如图所示使用硬编码URI,但这只是测试代码 String 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
为什么上面的查询返回有效的条目,而删除失败?编辑表没有意义。android会自动更新你的标签音乐。为什么不从mp3的角度来看待这个问题呢?向用户展示流派列表,提供替换功能,然后用新流派更新曲目,也许您不再需要这些,但如果您需要,我可以建议我使用的解决方案:
显示流派时,只需检查每种流派的曲目数量,如果为0,则不显示该流派。您更希望使用AUDIO_ID列而不是BaseColumns。_ID,因为每次删除行时都可能更新行ID 以下是我在自己的应用程序中所做的工作(在Android 4.0.4上测试并运行良好):
你试过了吗?因为我不认为Android正在更新平板电脑。android中的流派真是一团糟。据我所知,我有很多空的流派,当我更新MP3 ID3TAG中的流派标记时,它不会刷新MediaStore中的流派(曲目名称、专辑或艺术家的其他更改将更新它)。我在更新MediaStore.audio.genres.name表时,从音频文件更改流派名称时遇到问题,你找到解决办法了吗?看看我的帖子
context.getContentResolver().delete(MediaStore.Audio.Genres.Members.getContentUri(
"external", genreId), MediaStore.Audio.Genres.Members.AUDIO_ID + " = " + song.getId(), null);