У меня есть приложение, которое позволяет пользователям составлять список песен, которые они выбирают на своем устройстве. Затем они могут выбрать песню для воспроизведения, и приложение откроет урику песни с намерением, чтобы музыкальный проигрыватель по умолчанию использовался для воспроизведения песни.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 с прямым намерением, а не с помощью выбора, без ошибок.
Какое сообщение об ошибке вы видите в журнале Android (logcat)? – cketti