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,则问题将得到解决。

如何实施?(最佳做法)

  1. 首先确定用户的设备是否是棉花糖设备:

private boolean shouldAskPermission(){

return(Build.VERSION.SDK_INT>Build.VERSION_CODES.LOLLIPOP_MR1);

}

  1. 如果shouldAskPermission()返回true,则需要你的许可:

String[] perms = {"android.permission.WRITE_EXTERNAL_STORAGE"};

int permsRequestCode = 200;

requestPermissions(perms, permsRequestCode);

该方法requestPermissions(String[] permissions, int requestCode);是在Android Activity类内部找到的公共方法。

  1. 你将在onRequestPermissionResult方法中收到请求的结果,如下所示:

@Override

public 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

回到顶部