请求权限被拒绝的检测及处理
2015-11-11 00:34
399 查看
背景
正确的检查权限
请求权限的回调
但是这样肯定是步行的,checkPermission()方法只是检查有没有申请这个权限,而不能检查申请了之后又没有被拒绝
正确的做法应该是被拒绝之后提示用户权限被拒绝,再次点击时判断如果被拒绝就申请权限
正确的检查权限
请求权限的回调
背景
最近项目中请求打电话权限,然后正好手机中安装了360,拒绝了权限申请之后发现再次点击就没有反应了,因此需要先检查一下权限,网上有些说PackageManager pm = getPackageManager(); int permission = pm.checkPermission("android.permission.CALL_PHONE", "packageName"); if (permission == PackageManager.PERMISSION_GRANTED){ //具有权限 }
但是这样肯定是步行的,checkPermission()方法只是检查有没有申请这个权限,而不能检查申请了之后又没有被拒绝
正确的做法应该是被拒绝之后提示用户权限被拒绝,再次点击时判断如果被拒绝就申请权限
正确的检查权限
应该使用ContextCompat的checkSelfPermission()方法,代码如下:int checkCallPhonePermission = ContextCompat.checkSelfPermission(mContext,Manifest.permission.CALL_PHONE); if(checkCallPhonePermission != PackageManager.PERMISSION_GRANTED){ //没有权限或被拒绝,重新申请 ActivityCompat.requestPermissions(mContext,new String[]{Manifest.permission.CALL_PHONE},REQUEST_CODE_ASK_CALL_PHONE); return; }else{ //具有权限,调用自己的打电话的方法 call(phone); }
请求权限的回调
有请求权限的方法,当然也有返回的请求结果,我们只需要重写Activity的onRequestPermissionsResult()方法即可。代码如下:@Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { switch (requestCode) { case REQUEST_CODE_ASK_CALL_PHONE: if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { // 请求成功,获得权限,拨打电话 call(phone); } else { // 请求被拒绝,提示用户 Toast.makeText(MainActivity.this, "CALL_PHONE Denied", Toast.LENGTH_SHORT) .show(); } break; default: super.onRequestPermissionsResult(requestCode, permissions, grantResults); } }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories