Вы можете регистрировать события BroadcastReceiver для MediaScanner и обновлять свой список всякий раз, когда получаете Intent.ACTION_MEDIA_SCANNER_FINISHED намерение.
IntentFilter scanFileReceiverFilter= new IntentFilter();
scanFileReceiverFilter.addAction(Intent.ACTION_MEDIA_SCANNER_FINISHED);
scanFileReceiverFilter.addDataScheme("file");
BroadcastReceiver scanFileReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(Intent.ACTION_MEDIA_SCANNER_FINISHED)) {
Uri uri = intent.getData();
String path = null;
if (uri != null) {
path = uri.getPath();
}
//TODO:refresh list in path
}
}
};
getActivity().registerReceiver(scanFileReceiver, scanFileReceiverFilter);
Любое приложение, которое удаляет локальные данные, как ожидается, запустить медиа сканер после изменения, чтобы синхронизировать медиа-DB, так что вы должны получить это.
Но это работает только во время работы вашего приложения. Для удаления фона вы должны зарегистрировать его в манифесте.
Если вы используете БД для записи записей плейлистов, то это будет эффективно, так как вы можете проверить все файлы с путём LIKE path, полученным для обновления.
Обратите внимание, что иногда это событие может быть получено позднее из-за огромного количества контента, присутствующего на устройстве.
Вы также можете использовать ContentObserver для вызова registerContentObserver с uri MediaStore.Audio.Media.getContentUri («внешний»). Поскольку все медиа-провайдеры имеют аудио-представление, это должно работать эффективно.
Я реализовал что-то очень похожее в одном из моих приложений, я не знаю, это то, что вы хотите. В основном я перезагружаю песни на каждом стартах в списке и просматриваю списки воспроизведения, очередь и т. Д. И нахожу песни, которые больше не входят в список, и удаляем их. Я знаю, что это не самое лучшее решение, но работало для меня, потому что количество песен в устройстве avg довольно мало, поэтому перезагрузка не очень сильно влияет на производительность. –
@ HarjotSinghOberai- Спасибо. У меня был аналогичный подход, но это замедлит начало приложения, главным образом, в случае, если все песни находятся в очереди/плейлисте. – Libin
У меня был другой подход, но я никогда не реализовал его. Не делайте ничего при запуске приложения, но всякий раз, когда воспроизводится песня, проверьте путь до установки источника данных в MediaPlayer. Если путь не существует, то вы знаете, что песня была удалена и, таким образом, перейти к следующей песне и в фоновом режиме, удалить песню из списков воспроизведения или в любом другом месте, где она была указана –