新网创想网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
我的博客
为沧州等地区用户提供了全套网页设计制作服务,及沧州网站建设行业解决方案。主营业务为做网站、网站制作、沧州网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
我的博客:Android6.0动态权限申请步骤以及需要注意的一些坑
因为工作需要,简单研究了一下Android6.0权限申请,在Google提供的sample的基础上,写了一个简单的demo。算是自己的笔记吧,可能会比较混乱,主要是方便以后查看。后期有别的问题,随时更新~
(1)checkSelfPermission:检查是否拥有这个权限
(2)requestPermissions:请求权限,一般会弹出一个系统对话框,询问用户是否开启这个权限。
(3)shouldShowRequestPermissionRationale:在允许询问时返回true ; 在权限通过 或者权限被拒绝并且禁止询问时返回false ,如果从来没有询问过,也是返回的false, 所以单纯的使用shouldShowRequestPermissionRationale去做什么判断,是没用的。。。 所以说这个地方有坑,我的解决方法是,在回调里面处理,如果用户拒绝了这个权限,则打开本应用信息界面,由用户自己手动开启这个权限。
(4)每个应用都有自己的权限管理界面,里面有本应用申请的权限以及各种状态,即使用户已经同意了你申请的权限,他也随时可以关闭
其实和申请一个权限是一样的,只是requestPermissions(final @NonNull Activity activity,
final @NonNull String[] permissions, final int requestCode),里面的permissions给的参数多些而已。
1、在Android 6.0之后,APP获取手机的权限不再仅仅只是在清单文件中声明就行了,它将手机的权限分为了两类:正常权限和危险权限:
2、动态申请权限涉及到的方法:
3、例子:申请获取用户位置信息(危险权限)
4、权限清单:
例如
申请定位权限:
if (Build.VERSION.SDK_INT =M !hasPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)) {
String[] permissions =new String[1];
permissions[0] = Manifest.permission.ACCESS_COARSE_LOCATION;
Log.e("TAG", "onRequestPermissionsResult 申请权限");
//申请权限
ActivityCompat.requestPermissions(this, permissions,MY_LBS_PERMISSION_REQUEST_CODE);
}
//处理权限请求
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode ==MY_LBS_PERMISSION_REQUEST_CODE) {
boolean isAllGranted =true;
for (int grant : grantResults) {
if (grant != PackageManager.PERMISSION_GRANTED) {
isAllGranted =false;
break;
}
}
if (isAllGranted) {
Log.e("TAG", "onRequestPermissionsResult 同意");
}else {
List notAsk =new ArrayList();
for (String permission : permissions) {
Log.e("TAG", "onRequestPermissionsResult - 循环 -");
if (!ActivityCompat.shouldShowRequestPermissionRationale(this, permission)
ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {
notAsk.add(permission);
}
}
if (notAsk.size() 0) {//拒绝不再提醒
Log.e("TAG", "onRequestPermissionsResult 拒绝不再提醒");
}else {
Log.e("TAG", "onRequestPermissionsResult 本次拒绝");
}
}
}
}
/**
* 检查是否有某个权限
* @param context context
* @param permission 权限
* @return true means has
*/
public static boolean hasPermission(Context context, String permission) {
return ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_GRANTED;
}