android - 我无法在 android 10 手机上读取文件,但它可以在 android 7 上运行
问题描述
我已将所有必需的权限添加到清单中。
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
我在我的活动中实现了以下内容:
if (ContextCompat.checkSelfPermission(LibraryActivity.this,
Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(LibraryActivity.this,
Manifest.permission.READ_EXTERNAL_STORAGE)) {
ActivityCompat.requestPermissions(LibraryActivity.this,
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
MY_PERMISSION_REQUEST);
} else {
ActivityCompat.requestPermissions(LibraryActivity.this,
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
MY_PERMISSION_REQUEST);
}
} else {
doStuff();
}
我还实现了 onRequestPermissionsResult方法:
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == MY_PERMISSION_REQUEST) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
if (ContextCompat.checkSelfPermission(LibraryActivity.this,
Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(this, "Permission granted", Toast.LENGTH_SHORT).show();
doStuff();
}
} else {
Toast.makeText(this, "No permission granted", Toast.LENGTH_SHORT).show();
finish();
}
}
}
我正在尝试使用文件从内部存储中播放音乐:
MediaPlayer player = MediaPlayer.create(getContext(), Uri.fromFile(file));
在android 7 file.canRead()返回true并且程序运行正常,但在android 10 file.canRead()返回false并且程序无法运行。
解决方案
推荐阅读
- kotlin - 另一个片段中的 Recyclerview 绑定
- java - 使用附加数据检索流响应正文
- python - tkinter GUI(灯光未显示到我的窗口)
- python - kivymd/uix/filemanager.py 失败,找不到模块 PIL
- node.js - 如何在终端 mac 上解决这个 node-sass 问题?我也不能运行这个包
- android - 如何将从 Home 小部件获取的数据传递给它的子小部件?
- java - java - 在派生构造函数中调用超级构造函数是否与设置字段值完全相同?
- sql-server - 是否可以将 azure 托管 sql 服务数据库复制到本地实例中
- amazon-web-services - 使用预签名 URL“SignatureDoesNotMatch”获取 AWS S3 对象
- android - 协调器布局“layout_behavior”在所有底部选项卡上隐藏底部导航栏