[Android MediaPlayer:Android Q及更高版本中的文件访问

问题描述 投票:1回答:1

我正在编写要迁移到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

java android android-external-storage
1个回答
0
投票

您需要添加

android:requestLegacyExternalStorage =“ true”

在androidManifest文件中,它有助于从Q访问文件。

© www.soinside.com 2019 - 2024. All rights reserved.