Android:从MediaStore.Audio.Genres.Members表中删除条目

Android:从MediaStore.Audio.Genres.Members表中删除条目,android,mediastore,Android,Mediastore,我正在写一个Android音乐播放器,能够编辑MP3歌曲类型 我遵循的程序是: 编辑MP3文件本身中的流派标记 更新SqlLite MediaStore.Audio.Genres表以反映更改(我不想触发Android长时间的“重新扫描”操作以获取更改本身) 我的研究表明我需要修改MediaStore.Audio.Genres.Members表(即我用来获取流派信息的表) 我的问题是一个看似简单的删除操作没有按预期工作 注意:我不知道如图所示使用硬编码URI,但这只是测试代码 String uri

我正在写一个Android音乐播放器,能够编辑MP3歌曲类型

我遵循的程序是:

  • 编辑MP3文件本身中的流派标记
  • 更新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
    

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

    编辑表没有意义。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);