Java/SetDataSource/MediaPlayer的奇怪URI行为

3
我正在使用一个URI,将其传递给Android上的MediaPlayer,如下所示:

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"。
请问有人能解释一下为什么会发生这种情况吗?
1个回答

2
原来,Android 需要一些奇怪的权限操作。解决方法是使用不同的打开方式,并使用某种权限要求,它以持久性访问输出相同的 URI。请保留 HTML 标签。
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();
            }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接