
遇到了EACCES问题
这里已经给予了read权限但是却提示拒绝访问
关注引自免费微信小程序:皆我百晓生
在Android开发中遇到EACCES权限拒绝访问错误,通常是因为应用程序试图访问设备上的某个文件或资源,而没有得到相应的系统权限。即使你在Manifest文件中声明了<uses-permission>标签以请求权限,但自Android 6.0(API级别23)及更高版本开始,还需要在运行时动态请求某些危险权限。
1. 确认已添加权限声明
确保在AndroidManifest.xml文件中已经为读取文件操作添加了适当的权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
2. 运行时权限检查与请求
对于API级别23及以上,你需要在运行时检查和请求权限:
// 检查当前应用是否具有读取外部存储的权限
if (ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
// 如果应用之前请求过此权限但用户拒绝了请求,则此方法将返回 true。
if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
Manifest.permission.READ_EXTERNAL_STORAGE)) {
// 显示解释为何需要该权限的对话框或者UI,然后再次请求权限
} else {
// 直接请求权限
ActivityCompat.requestPermissions(thisActivity,
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);
}
} else {
// 已有权限,执行相应文件操作
}
// 在 onRequestPermissionsResult() 方法中处理用户的权限请求结果
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode) {
case MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE: {
// 如果请求被取消,那么 result 数组将为空。
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 权限申请成功,可以进行读取文件操作了
} else {
// 权限申请失败,提示用户并做相应的处理
}
return;
}
// 其他“case”分支...
}
}
请替换 thisActivity 为你的Activity实例,并且设置合适的 MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE 请求码。
如果问题依然存在,请检查以下可能情况:
参考文档: