我有一个应用程序可以让用户列出他们从设备中选择的歌曲。然后他们可以选择要播放的歌曲,应用程序将使用 Intent 打开歌曲的 uri,以便使用默认音乐播放器实际播放歌曲。
如果我使用 Astro 文件管理器选择歌曲,这可以正常工作,但如果我通过 google Drive、音频部分或下载部分选择文件,则歌曲将无法播放。
我正在选择具有如下意图的文件:
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("audio/*");
intent = Intent.createChooser(intent, "Select audio or music");
然后用 . 检索 Uri data.getData()
。
稍后使用以下意图打开 Uri Im:
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
context.startActivity(intent);
Astro 文件管理器以表格形式返回 Uris,file:///storage/sdcard0/Download/My%20Song.mp3
这些文件可以在默认媒体应用程序中打开并正常播放。
谷歌驱动器正在返回 Uris 的形式content://com.google.android.apps.docs.storage/document/acc%3D1%3Bdoc%3D421
。当我尝试使用默认媒体应用程序使用 Intent 打开 Uris 时,它会显示一个弹出窗口“无法播放您请求的曲目”。
如何打开 Google Drive 使用该媒体类型的默认应用返回的内容 Uri?
编辑:我还尝试在使用 Intent 打开 uri 时显式设置 mime 类型:
Intent intent = new Intent(Intent.ACTION_VIEW, audio.getAudioUri());
intent.setType("audio/*");
contentController.startActivity(intent);
当我这样做时,它会打开 VLC 媒体播放器,并且 VLC 报告错误“VLC 遇到此媒体错误。请尝试刷新媒体库。”
编辑 2:即使我强制选择器,它也总是使用 VLC 打开:
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);
我什至尝试过设置->应用程序->重置应用程序首选项,它仍然始终默认为 VLC。这是在运行 Android 5.1 的 Nexus 5 上。
编辑 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)上进行了测试,并使用直接 Intent 而不是选择器打开内容 uri,没有错误。