MP3の曲のジャンルを編集できるAndroidミュージックプレーヤーを書いています。
私が従う手順は次のとおりです。
- MP3ファイル自体のジャンルタグを編集します
- 変更を反映するようにSqlLiteMediaStore.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
上記のクエリが有効なエントリを返すのに、削除が失敗するのはなぜですか?