#android #android-mediascanner
#Android #android-mediascanner
Вопрос:
Мое приложение загружает некоторые mp3-файлы на SD-карту. Я хочу воспроизвести их с помощью других музыкальных проигрывателей, установленных на устройстве. Но другие музыкальные проигрыватели автоматически не находят мои загруженные файлы. Как я могу принудительно запустить MediaScanner, чтобы мои медиафайлы можно было воспроизводить из стандартного музыкального приложения?
Я загружаю файлы, используя этот код
public void run() {
loaded = 0;
try{
java.io.BufferedInputStream in = new java.io.BufferedInputStream(new java.net.URL(url).openStream());
java.io.FileOutputStream fos = new java.io.FileOutputStream(FileName);
java.io.BufferedOutputStream bout = new BufferedOutputStream(fos,1024);
byte[] data = new byte[1024];
int x=0;
while((x=in.read(data,0,1024))>=0 amp;amp; !stop){
loaded = x;
bout.write(data,0,x);
}
fos.flush();
bout.flush();
fos.close();
bout.close();
in.close();
}catch(Exception e){
}
}
Комментарии:
1. Он должен делать это автоматически. Возможно, вам придется перезапустить музыкальный проигрыватель после загрузки элементов.
Ответ №1:
Вы можете принудительно сканировать медиафайл с трансляцией:
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" Environment.getExternalStorageDirectory())));
Ответ №2:
Убедитесь, что в папке, в которой находятся ваши файлы, нет файла с именем «.nomedia». Этот файл указывает MediaScanner не проверять его.
(примечание: перед nomedia стоит «.», что означает, что он может быть скрыт)
Ответ №3:
Вот простое «решение на основе одного файла»:
Всякий раз, когда вы добавляете или удаляете файл, сообщите об этом поставщику контента MediaStore, используя
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(imageAddedOrDeleted)));
Главное преимущество: работа с любым типом mime, поддерживаемым MediaStore
Примечание:
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" Environment.getExternalStorageDirectory())));
слишком дорого и сканировать все. Мой совет: если можете, используйте подход «для каждого файла».