在开发项目中,遇见要进行文件操作,遇见Caused by: android.system.ErrnoException: open failed: EACCES (Permission denied)错误
第一步(确认AndroidManifest.xml获取权限是否有添加)
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
第二步 确认AndroidManifest.xml里面 <application》 标签 是否有添加 (android10的动态获取权限)
android:requestLegacyExternalStorage="true"
此行代码意思为:使用旧的存储策略,不使用androidQ的新策略。但这个不是长久之计,很快将会强制都使用新策略。
但是在添加权限之后发现还是报错,之后看到一篇大神的文章才发现,android 6.0之上的系统除了添加权限还要在你报错的代码前面添加请求权限的代码。
private static final int REQUEST_EXTERNAL_STORAGE = 1;
private static String[] PERMISSIONS_STORAGE = { Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE };
public static void verifyStoragePermissions(Activity activity) {
// Check if we have write permission
int permission = ActivityCompat.checkSelfPermission(activity,
Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (permission != PackageManager.PERMISSION_GRANTED) {
// We don't have permission so prompt the user
ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE,
REQUEST_EXTERNAL_STORAGE);
}
}
完整代码
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:dist="http://schemas.android.com/apk/distribution"
package="com.example.myapplication">
<dist:module dist:instant="true" />
<!--摄像头权限 -->
<uses-permission android:name="android.permission.CAMERA" />
<!--存储权限 SD卡读写权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!--Camera Feature 声明对camera