android6.0是否获取到权限和运行时请求权限
来源:互联网 发布:linux dd u盘启动盘 编辑:程序博客网 时间:2024/06/09 11:18
之前做腾讯地图和二维码扫描遇到的问题,在app装上之后危险权限是需要用户同意后才能获取到权限,然而android6.0不能提示获取,然后需要在使用时该权限时判断是否获取到了权限,再做其他逻辑,
Requesting Permissions at Run Time
从Android6.0(API >= 23)开始,用户在APP运行的时候授予其权限而不是像以前安装的时候就通通授予了(以前授权方式好像没什么卵用)。由于不在需要在安装或更新APP的时候授予相关权限,这就简化了APP的安装过程。这也提高了用户对APP功能的控制,比如:用户可以选择让一个Camera APP使用Camera,用户可以在任何时候在设置面板撤销这个权限。。。
看完是不是有点像我们在国产ROM中常见到的每个应用运行时权限授予。
系统权限也被分城normal和dangerous两类:
直接上代码
使用ContextCompat.checkSelfPermission()检查权限,第一个参数是上下文,第二个是相关权限.如果APP有该权限返回PackageManager.PERMISSION_GRANTED,APP接着可以进行对应操作;如果没有权限,以上方法返回PERMISSION_DENIED,APP需要明确的向用户请求授权。Android提供shouldShowRequestPermissionRationale()方法求向用户展示为啥你需要这个权限,当用户之前已经请求过该权限并且拒绝了授权这个方法返回true。
注意:如果用户拒绝权限请求的时候选择了Don’t ask again选项,上面的方法返回false,当然如果设备本身就不允许有这个权限也是返回false。
requestPermissions()就是请求权限方法,异步方法。需要三个参数,上下文,需要请求的权限字符串数组,int类型常量请求码,请求码在回调中使用,下面是代码
/** * 判断是否获取到相机权限 */if(ContextCompat.checkSelfPermission(context, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { if(ActivityCompat.shouldShowRequestPermissionRationale(HuaQiActivity.this,Manifest.permission.CAMERA)) {//是否请求过该权限 }else {//没有则请求获取权限 ActivityCompat.requestPermissions(context,new String[]{Manifest.permission.CAMERA},REQUESTCODE); }}else {//如果已经获取到了权限则直接进行下一步操作 Intent intent = new Intent(context, CaptureActivity.class); startActivityForResult(intent, SCANNIN_GREQUEST_CODE);}用户点击后允许或拒绝该权限后有回调响应,如果允许会返回值,直接判断
代码
@Overridepublic void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); switch (requestCode) { case REQUESTCODE: if(grantResults.length>0 && grantResults[0]==PackageManager.PERMISSION_GRANTED){ Intent intent = new Intent(context, CaptureActivity.class); startActivityForResult(intent, SCANNIN_GREQUEST_CODE); }else { Toast.makeText(HuaQiActivity.this,"您拒绝了获取到相机权限,请手动获取或重装软件",Toast.LENGTH_SHORT).show(); } break; }}
- android6.0是否获取到权限和运行时请求权限
- android6.0是否获取到权限和运行时请求权限
- Android6.0在运行时请求权限
- Android6.0 运行时权限
- Android6.0 运行时权限
- Android6.0运行时权限
- 【Android6.0】运行时权限
- Android6.0 运行时权限
- Android6.0 运行时权限
- Android6.0 运行时权限
- Android6.0运行时权限
- Android6.0运行时权限
- Android6.0---运行时权限
- Android6.0运行时权限
- Android6.0运行时权限
- android6.0运行时权限
- Android6.0 运行时权限
- Android6.0运行时权限。
- VS2010/MFC编程入门之四十五(MFC常用类:CFile文件操作类)
- 【移动端兼容问题研究】javascript事件机制详解(涉及移动兼容)
- SpriteFrameCache
- flask+mod_wsgi+apache在windows上的布署
- android 代码混淆
- android6.0是否获取到权限和运行时请求权限
- 特权级3——调用门
- Android 7.0 API 概述
- 今天发现了一篇介绍Sqoop中通过hadoop mapreduce从关系型数据库import数据分析
- Object方法
- iOS开发技能一览图
- myeclipse 10 破解
- lambda(),map(),reduce(),filter()
- FFMPEG基本用法