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

时间:2012-12-18 11:36:05

标签: android mediastore

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

我正在遵循的程序是:

  1. 编辑MP3文件本身的类型标签
  2. 更新SqlLite MediaStore.Audio.Genres表以反映更改(我不想触发Android的冗长'重新扫描'操作以自行获取更改)
  3. 我的研究建议我需要修改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
    

    为什么上述查询会返回有效条目,但删除会失败???

3 个答案:

答案 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);