0

我正在编写一个能够编辑 MP3 歌曲流派的 Android 音乐播放器。

我遵循的程序是:

  1. 编辑 MP3 文件本身的流派标签
  2. 更新 SqlLite MediaStore.Audio.Genres 表以反映更改(我不想为 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

为什么上面的查询返回一个有效的条目,但删除失败???

4

3 回答 3

0

编辑表格没有意义。安卓会自动更新它在你标记的音乐上找到的内容。为什么不从 mp3 的角度来看问题呢?向用户展示流派列表,提供替换功能,然后使用新流派更新曲目,

于 2012-12-31T17:31:00.943 回答
0

也许您不再需要这个,但如果您这样做,我可以建议我使用的解决方案:当您显示流派时,只需检查每个流派的曲目数,如果它为 0,则不显示此流派。

于 2013-11-07T18:30:26.463 回答
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);
于 2015-08-21T15:09:03.980 回答