Android 6.0打开失败:EACCES(权限被拒绝)
我已经加入uses-permission
包括WRITE_EXTERNAL_STORAGE,MOUNT_UNMOUNT_FILESYSTEMS,READ_EXTERNAL_STORAGE来AndroidManifest.xml
。
当我尝试在Nexus5(Android 6.0)中运行我的应用程序时,它引发了如下异常:
java.io.IOException: open failed: EACCES (Permission denied)
然后我尝试了另一部Android手机(Android 5.1),一切正常。代码如下:
private File createImageFile() throws IOException { String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = "JPEG_" + timeStamp + "_";
File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
File image = File.createTempFile(imageFileName, ".jpg", storageDir);
currentPhotoPath = image.getAbsolutePath();
return image;
}
Android 6.0在权限方面有区别吗?
回答:
在Android 6(Marshmallow)中,即使用户在安装时接受了你的所有权限,他们仍可以稍后决定从你手中夺走其中一些权限。
快速解决方案,但不建议使用:也许如果targetSdkVersion将gradle 更改为22,则问题将得到解决。
如何实施?(最佳做法)
- 首先确定用户的设备是否是棉花糖设备:
private boolean shouldAskPermission(){return(Build.VERSION.SDK_INT>Build.VERSION_CODES.LOLLIPOP_MR1);
}
- 如果
shouldAskPermission()
返回true
,则需要你的许可:
String[] perms = {"android.permission.WRITE_EXTERNAL_STORAGE"};int permsRequestCode = 200;
requestPermissions(perms, permsRequestCode);
该方法requestPermissions(String[] permissions, int requestCode)
;是在Android Activity类内部找到的公共方法。
- 你将在
onRequestPermissionResult
方法中收到请求的结果,如下所示:
@Overridepublic void onRequestPermissionsResult(int permsRequestCode, String[] permissions, int[] grantResults){
switch(permsRequestCode){
case 200:
boolean writeAccepted = grantResults[0]==PackageManager.PERMISSION_GRANTED;
break;
}
}
收到结果后,你将需要适当地处理它们。
以上是 Android 6.0打开失败:EACCES(权限被拒绝) 的全部内容, 来源链接: utcz.com/qa/428021.html