Как заставить стандартный музыкальный проигрыватель находить мои файлы

#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())));
  

слишком дорого и сканировать все. Мой совет: если можете, используйте подход «для каждого файла».