Android API-23+ 的权限添加问题要注意,在模拟器上开了个6.0系统的Nexus X5,做了个视频播放器的测试。结果搞半天一直说是没有sd卡读取权限。
一直在提示
Exception 'open failed: EACCES (Permission denied);
我了个头疼啊,检查了不下十次权限配置,还一个字一个字的对过了,还是不行!
但是在 AndroidManifest文件中有声明sd卡读写权限,后来又以为是模拟器的问题,换了一种模拟器还是一个熊样。后来经过多方摸打,终于发现了api的更新问题。自己的认知没有跟得上技术的发展速度,真的是个硬伤啊!!!
下面来说办法:在API 23+ 以上,不仅仅要在AndroidManifes里添加相应的权限,在应用启动后还要在代码中向系统请求相应的权限,只有在弹窗中点击授权后,你才能拥有对应的权限!
请求权限具体代码如下:
// Storage Permissions
private static final int REQUEST_EXTERNAL_STORAGE = 1;
private static String[] PERMISSIONS_STORAGE = {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
};
/**
* Checks if the app has permission to write to device storage
*
* If the app does not has permission then the user will be prompted to grant permissions
*
* @param activity
*/
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
);
}
}
代码引用:http://stackoverflow.com/questions/8854359/exception-open-failed-eacces-permission-denied-on-android