我正在编写要迁移到Android Q的媒体播放器应用。我使用MediaStore查询音频文件,并将艺术家,专辑,路径等存储在SQLight数据库中。如果要播放音频文件,请从数据库中获取路径(SQL查询)并将其设置为mediaplayer.setDatasource(path)。尝试这样做,我打开失败:EACCES(权限被拒绝)错误消息。
用户可以使用文件选择器选择存储音频文件的目录。
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);
startActivityForResult(Intent.createChooser(intent, "Choose directory"), PICK_AUDIO_REQUEST);
在onActivityResult
中,我对所选目录设置了权限,例如
Uri uri = data.getData();
int takeFlags = data.getFlags();
takeFlags &= (Intent.FLAG_GRANT_READ_URI_PERMISSION |
Intent.FLAG_GRANT_WRITE_URI_PERMISSION |Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);
[当我尝试使用媒体播放器mMediaPlayer.setDataSource(path);
中的路径时
我遇到以下错误:
open failed: EACCES (Permission denied)
使用android:requestLegacyExternalStorage="true"
不是我想要实现的解决方案。
在manifest.xml中,我设置了权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
请帮助。
谢谢,GGK
您需要添加
android:requestLegacyExternalStorage =“ true”
在androidManifest文件中,它有助于从Q访问文件。