Когда я пытаюсь обновить информацию об аудиофайле, метод onChange()
в моем ContentObserver вызывается дважды по какой-то причине.
Я регистрирую Observer в своей функции MainActivity, и он наблюдает изменения в MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
Мой класс ContentObserver
public class MediaStoreObserver extends ContentObserver {
public MediaStoreObserver(Handler handler) {
super(handler);
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
}
@Override
public void onChange(boolean selfChange, Uri uri) {
super.onChange(selfChange, uri);
Log.d("MediaStoreObserver", "Change detected!");
}
}
OnChange вызывается дважды, когда я вызываю этот метод
public void changeMp3Tags(Context c, long songID, long albumID,
String title, String artist, String album, String file_path, String year) throws Exception {
try {
final Uri musicUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
final Uri sArtworkUri = Uri.parse("content://media/external/audio/albumart");
Uri albumArtUri = ContentUris.withAppendedId(sArtworkUri, albumID);
ContentResolver resolver = c.getContentResolver();
String currentTitle = MediaStore.Audio.Media.TITLE;
String currentArtist = MediaStore.Audio.Media.ARTIST;
String currentAlbumID = MediaStore.Audio.Media.ALBUM_ID;
String currentAlbum = MediaStore.Audio.Media.ALBUM;
String currentAlbumData = MediaStore.Audio.Media.DATA;
String currentYear = MediaStore.Audio.Media.YEAR;
ContentValues values = new ContentValues();
values.put(currentTitle, title);
values.put(currentArtist, artist);
values.put(currentAlbum, album);
values.put(currentYear, year);
ContentValues valuesAlbum = new ContentValues();
valuesAlbum.put(currentAlbumID, albumID);
valuesAlbum.put(currentAlbumData, file_path);
//Update song info.
String where = MediaStore.Audio.Media._ID + "=?";
String[] whereVal = {Long.toString(songID)};
resolver.update(musicUri, values, where, whereVal);
//Update albumArt.
resolver.delete(albumArtUri, null,null);
resolver.insert(sArtworkUri, valuesAlbum);
}catch (Exception e){
Log.e(TAG, "Exception caught when changing MP3 tags!", e);
throw new Exception();
}
}
РЕДАКТИРОВАТЬ
Я нашел причину, по которой он вызывается дважды, потому что я также удаляю значение и вставляю его для обновления обложки альбома.
Как я могу отфильтровать это в мой обозреватель, чтобы onChange()
не вызывали дважды?
//Update albumArt.
resolver.delete(albumArtUri, null,null);
resolver.insert(sArtworkUri, valuesAlbum);