ユーザーがデバイスから選択した曲のリストを作成できるアプリがあります。その後、再生する曲を選択できます。アプリはインテントを使用して曲の uri を開き、デフォルトの音楽プレーヤーを使用して実際に曲を再生します。
Astro ファイル マネージャーで曲を選択すると問題なく動作しますが、Google ドライブ、オーディオ セクション、またはダウンロード セクションからファイルを選択すると、曲は再生されません。
次のようなインテントでファイルを選択しています。
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 ファイル マネージャーはフォームfile:///storage/sdcard0/Download/My%20Song.mp3
で Uris を返し、これらはデフォルトのメディア アプリで開いて正常に再生されます。
Google ドライブは Uris をフォームで返しcontent://com.google.android.apps.docs.storage/document/acc%3D1%3Bdoc%3D421
ます。デフォルトのメディアアプリを使用してインテントでそのように Uris を開こうとすると、「要求したトラックを再生できませんでした」というポップアップが表示されます。
そのメディア タイプのデフォルト アプリで Google ドライブが返すコンテンツ URI を開くにはどうすればよいですか?
編集:インテントでURIを開くときに、MIMEタイプを明示的に設定しようとしました:
Intent intent = new Intent(Intent.ACTION_VIEW, audio.getAudioUri());
intent.setType("audio/*");
contentController.startActivity(intent);
これを行うと、VLC メディア プレーヤーで開き、VLC が「VLC でこのメディアにエラーが発生しました。メディア ライブラリを更新してください。」というエラーが報告されます。
EDIT 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) でテストしたところ、チューザーではなく直接のインテントでコンテンツ URI を開いてもエラーは発生しませんでした。