簡體   English   中英

奇怪的 URI 行為 java/setDataSource/MediaPlayer

[英]Weird URI behavior java/setDataSource/MediaPlayer

我正在使用我傳遞給 android 上的 MediaPlayer 的 URI,如下所示:

mediaPlayer.setDataSource(context, Uri.parse(<uri>));

當我使用 Intent.createChooser 獲取它時,它播放一次,然后嘗試讓它再次播放,結果 java.io.IOException: setDataSource failed.: status=0x80000000。

當我直接將 URI 作為字符串傳遞時,它會導致 java.io.IOException: setDataSource failed.: status=0x80000000,盡管選擇器輸出的 URI 始終相同。

uri 看起來像這樣:“content://com.android.providers.media.documents/document/audio%3A21739”。

有人可以請說明為什么會發生這種情況嗎?

原來 android 需要一些奇怪的權限惡作劇,解決方案是使用不同的開頭加上使用某種權限要求,以某種方式輸出相同的 uri,但具有持久訪問權限:

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
                    intent.setType("*/*");
                    intent.addCategory(Intent.CATEGORY_OPENABLE);
                    startActivityForResult(Intent.createChooser(intent, "Select file to add"), ADD_2);

在 onActivityResult 中:

if (resultCode == RESULT_OK) {
                Uri uri = data.getData();
                final int takeFlags = data.getFlags() & Intent.FLAG_GRANT_READ_URI_PERMISSION;
                getContentResolver().takePersistableUriPermission(uri, takeFlags);
                Log.d(TAG, "Added track uri: " + uri);
                playlist.add(uri.toString());
                adapter.notifyDataSetChanged();
            }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM