2015-04-14 3 views
0

У меня есть приложение, которое позволяет пользователям составлять список песен, которые они выбирают на своем устройстве. Затем они могут выбрать песню для воспроизведения, и приложение откроет урику песни с намерением, чтобы музыкальный проигрыватель по умолчанию использовался для воспроизведения песни.Android - открыть аудио-контент uri с намерением

Это прекрасно работает, если я выбираю песню с помощью диспетчера файлов Astro, но если я выберу файл через Google Drive, раздел Audio или раздел Downloads, то песня не будет воспроизводиться.

Я выбираю файлы с Intent, как так:

Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
intent.setType("audio/*"); 
intent = Intent.createChooser(intent, "Select audio or music"); 

И затем извлекая Ури с data.getData().

Чтобы позже открыть Uri Im помощью намерения, как:

Intent intent = new Intent(Intent.ACTION_VIEW, uri); 
context.startActivity(intent); 

Astro файловый менеджер возвращается URIS в виде file:///storage/sdcard0/Download/My%20Song.mp3 и эти те открытые и играть хорошо с приложением по умолчанию медиа.

Привод Google возвращает Uris в форме content://com.google.android.apps.docs.storage/document/acc%3D1%3Bdoc%3D421. Когда я пытаюсь открыть Uris таким образом с помощью Intent, используя мультимедийное приложение по умолчанию, оно показывает всплывающее окно «Не удалось воспроизвести запрошенный трек».

Как открыть контент, который Google Google возвращает с помощью приложения по умолчанию для этого типа носителя?

Edit: Я также попытался явно устанавливая тип пантомимы при открытии Ури с Intent:

Intent intent = new Intent(Intent.ACTION_VIEW, audio.getAudioUri()); 
intent.setType("audio/*"); 
contentController.startActivity(intent); 

Когда я делаю это открывает с VLC Media Player и VLC сообщает об ошибке «VLC встречается ошибка с этим носителем. Попробуйте обновить медиа-библиотеку ».

EDIT 2: Всегда открывать с VLC, хотя я принуждать Chooser:

Intent intent = new Intent(Intent.ACTION_VIEW, uri); 
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 
intent.setType("audio/*"); 
Intent chooser = Intent.createChooser(intent, "Play the song with"); 
//contentController.startActivity(intent); 
contentController.startActivity(chooser); 

Я даже пытался Настройки-> Apps-> Сброс настроек приложения, и это до сих пор всегда недобросовестный VLC. Это на Nexus 5 под управлением Android 5.1.

Редактировать 3: ошибки LogCat Я вижу эти ошибки в окне LogCat:

04-14 09:26:27.869 29143-29143/com.my.app E/Audio﹕ Permission Denial: opening provider com.google.android.apps.docs.storagebackend.StorageBackendContentProvider from ProcessRecord{2f0a6a28 29143:com.my.app/u0a80} (pid=29143, uid=10080) requires android.permission.MANAGE_DOCUMENTS or android.permission.MANAGE_DOCUMENTS 
04-14 09:26:27.871 29143-29143/com.my.app E/Audio﹕ Permission Denial: opening provider com.google.android.apps.docs.storagebackend.StorageBackendContentProvider from ProcessRecord{2f0a6a28 29143:com.my.app/u0a80} (pid=29143, uid=10080) requires android.permission.MANAGE_DOCUMENTS or android.permission.MANAGE_DOCUMENTS 

В AndroidManifest.xml из приложения у меня есть, что указано:

<uses-permission android:name="android.permission.MANAGE_DOCUMENTS" /> 

Редактировать 4: Ну, это похоже на специфику устройства. Все тесты выше были сделаны на Nexus 5. Я только что протестировал на своем Nexus 7 (Android 5.0.2) и открыл контент uri с прямым намерением, а не с помощью выбора, без ошибок.

+0

Какое сообщение об ошибке вы видите в журнале Android (logcat)? – cketti

ответ

3

Медиаплееру требуется разрешение на доступ к поставщику контента (Google Диска). Добавьте флаг FLAG_GRANT_READ_URI_PERMISSION в цель.

Intent intent = new Intent(Intent.ACTION_VIEW, uri); 
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 
context.startActivity(intent); 
+0

После добавления этого сообщения я все еще получаю ту же ошибку, о которой сообщает VLC. Я собираюсь заставить выбора и попробовать другие медиаплееры. Я не уверен, почему это заставляет VLC, когда я указываю mimetype «audio/*» – Ashy

+0

Спасибо, человек, ты мой герой! Вы остановились, чтобы не бросать мой компьютер с 4-го этажа ... :) – MilanNz

Смежные вопросы