您的位置:首页 > 移动开发 > Android开发

Android 6.0 动态请求权限

2016-12-06 08:45 465 查看

Android 6.0 动态请求权限

描述:*Android 应用在访问额外的资源或信息时,需要请求相应权限。根据权限的敏感性,系统可能会自动授予权限,或者由用户对请求进行许可。Android6.0及以上应用除了在清单文件中声明权限,敏感权限还需要在用户使用时动态授予。官方定义了普通和危险权限,经测试发现部分手机厂商的敏感权限会有所差异*。

问题:应用中用到 READ_PHONE_STATE 权限来获取设备ID,在华为、小米的6.0系统的手机上运行都可以正常获取,然而在Nexus5X上获取失败而导致应用闪退。

原因:华为、小米等系统会默认允许该权限,而官方定义该权限为危险权限默认不被允许。

解决:

1,将 targetSdkVersion 版本号调整为 23 以下,这样应用不需要在运行时请求权限,系统会默认允许清单文件中所有权限。

2,在应用中向用户动态请求权限,请求方式如下:

private static final int PERMISSION_REQUEST_COARSE_LOCATION = 1;

@Override
protected void onCreate(Bundle savedInstanceState) {
......
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// Android M Permission check
if (this.checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, PERMISSION_REQUEST_COARSE_LOCATION);
}
}
}

@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case PERMISSION_REQUEST_COARSE_LOCATION:
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// TODO request success
}
break;
}
}


用如上这种方式处理非常的繁琐,所以笔者决定采用这个 第三方库 来处理这个事情。

关于 第三方库 的使用与说明待续……
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android Permission