簡體   English   中英

Android:從MediaStore.Audio.Genres.Members表中刪除條目

[英]Android: deleting entries from MediaStore.Audio.Genres.Members table

我正在編寫一個能夠編輯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

為什么上面的查詢返回一個有效的條目,但是刪除失敗?

編輯表格沒有任何意義。 android會自動使用您標記的音樂中的內容進行更新。 為什么不從mp3角度看問題呢? 向用戶顯示類型列表,提供替換功能,然后使用新類型更新曲目,

也許您不需要更多,但是如果您這樣做,我可以為我提供解決方案的建議:在顯示流派時,只需檢查每種流派具有的曲目數,如果為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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM