android 权限拒绝时的问题解决(详解)
2017-11-18 15:23
197 查看
本篇博客主要针对于相机权限的解决,因为公司项目中二维码遇到这个问题,在网上找了两天的方案,几乎都是同一的解决办法,try catch;
特此我自己写一篇关于二维码权限的拒绝问题解决办法,还添加了6.0权限等问题,希望对你们有所帮助,我的问题只针对于二维码调用相机权限,
对于其他权限,我没有深入的了解,不知能否对于其他权限问题有所帮助,谅解。
问题的解决办法:
1.向项目中部署Module形式的lib_zxing。
2.在调用二维码时的事件做如下权限判断
if (Build.VERSION.SDK_INT >= 23) {
//如果sdk版本大于23.表示6.0以上,走6.0权限
checkPer();
} else {
//否则跳转二维码扫描页面
Intent intent = new Intent(MainActivity.this, CaptureActivity.class);
startActivityForResult(intent, REQUEST_CODE);
}
3.在lib_zxing中的CaptrueActivity中做如下修改
//我们在点击拒绝时,会出现一个相机相关的异常,点击允许没有异常
//如果有异常。我们针对这个异常做相应的处理
if (e != null) {
Log.e("TAG", "callBack: ", e);
//这个是判断6.0以下权限,在点击拒绝时做相应处理
if(Build.VERSION.SDK_INT < 23){
//获取异常,保证只有在这个异常时,才会给出相应的提醒
if(e.toString().equals("java.lang.RuntimeException: Fail to connect to camera service")){
Toast.makeText(CaptureActivity.this,"亲!您拒绝了权限申请!",Toast.LENGTH_LONG).show();
//将页面销毁
finish();
}
}
}
4. 6.0权限方案
首先添加依赖
compile 'pub.devrel:easypermissions:1.0.1'
private void checkPer() {
if (EasyPermissions.hasPermissions(this, Manifest.permission.CAMERA)) {
Intent intent = new Intent(MainActivity.this, CaptureActivity.class);
startActivityForResult(intent, REQUEST_CODE);
} else {
EasyPermissions.requestPermissions(this, "为了您能够正常使用扫一扫功能,juxin商城需要获得相机权限",
RC_CAMERA, Manifest.permission.CAMERA);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
}
@Override
public void onPermissionsGranted(int requestCode, List<String> perms) {
// 请求权限已经被授权
Intent intent = new Intent(MainActivity.this, CaptureActivity.class);
startActivityForResult(intent, REQUEST_CODE);
}
@Override
public void onPermissionsDenied(int requestCode, List<String> perms) {
// 请求权限被拒绝
if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) {
new AppSettingsDialog.Builder(this).
setRationale("没有该权限,此应用程序可能无法正常工作。打开应用设置屏幕以修改应用权限").build().show();
}
}
特此我自己写一篇关于二维码权限的拒绝问题解决办法,还添加了6.0权限等问题,希望对你们有所帮助,我的问题只针对于二维码调用相机权限,
对于其他权限,我没有深入的了解,不知能否对于其他权限问题有所帮助,谅解。
问题的解决办法:
1.向项目中部署Module形式的lib_zxing。
2.在调用二维码时的事件做如下权限判断
if (Build.VERSION.SDK_INT >= 23) {
//如果sdk版本大于23.表示6.0以上,走6.0权限
checkPer();
} else {
//否则跳转二维码扫描页面
Intent intent = new Intent(MainActivity.this, CaptureActivity.class);
startActivityForResult(intent, REQUEST_CODE);
}
3.在lib_zxing中的CaptrueActivity中做如下修改
//我们在点击拒绝时,会出现一个相机相关的异常,点击允许没有异常
//如果有异常。我们针对这个异常做相应的处理
if (e != null) {
Log.e("TAG", "callBack: ", e);
//这个是判断6.0以下权限,在点击拒绝时做相应处理
if(Build.VERSION.SDK_INT < 23){
//获取异常,保证只有在这个异常时,才会给出相应的提醒
if(e.toString().equals("java.lang.RuntimeException: Fail to connect to camera service")){
Toast.makeText(CaptureActivity.this,"亲!您拒绝了权限申请!",Toast.LENGTH_LONG).show();
//将页面销毁
finish();
}
}
}
4. 6.0权限方案
首先添加依赖
compile 'pub.devrel:easypermissions:1.0.1'
private void checkPer() {
if (EasyPermissions.hasPermissions(this, Manifest.permission.CAMERA)) {
Intent intent = new Intent(MainActivity.this, CaptureActivity.class);
startActivityForResult(intent, REQUEST_CODE);
} else {
EasyPermissions.requestPermissions(this, "为了您能够正常使用扫一扫功能,juxin商城需要获得相机权限",
RC_CAMERA, Manifest.permission.CAMERA);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
}
@Override
public void onPermissionsGranted(int requestCode, List<String> perms) {
// 请求权限已经被授权
Intent intent = new Intent(MainActivity.this, CaptureActivity.class);
startActivityForResult(intent, REQUEST_CODE);
}
@Override
public void onPermissionsDenied(int requestCode, List<String> perms) {
// 请求权限被拒绝
if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) {
new AppSettingsDialog.Builder(this).
setRationale("没有该权限,此应用程序可能无法正常工作。打开应用设置屏幕以修改应用权限").build().show();
}
}
相关文章推荐
- 详解Android权限管理之RxPermission解决Android 6.0 适配问题
- 解决向Android虚拟机system传文件权限问题
- XP中如何解决备份文件夹拒绝访问问题(也可解决普通用户访问管理员用户的文件的权限问题)
- 解决android开发中Manifest加入网络权限后显示不出界面的问题
- 在Windows下创建cocos2dx的android项目build_native.sh时如果遇到权限问题的解决办法
- Android应用签名详解(INSTALL_PARSE_FAILED_NO_CERTIFICATES问题解决)
- 修改组件时“权限被拒绝”问题的解决
- Android自定义控件系列八:详解onMeasure()(二)--利用onMeasure测量来实现图片拉伸永不变形,解决屏幕适配问题
- android:windowSoftInputMode属性详解(解决软键盘弹出布局调整问题)
- Android 4.4 的权限问题,导致App 裁剪图片不能保存(已解决)
- 快速解决Android中的selinux权限问题
- MOSS组、用户、权限级别,以及出现:用户不存在或用户不唯一 及 拒绝访问 问题的解决方法
- SqlServerException:拒绝对表对象的select,insert权限解决(新建账号导致的问题)
- Android自定义控件系列八:详解onMeasure()(二)--利用onMeasure测量来实现图片拉伸永不变形,解决屏幕适配问题
- android下SD卡与U盘无读写权限问题的解决办法
- android开发(37) android使用android_serialport_api 操作串口,解决权限问题
- android Touch事件详解(解决冲突问题)
- Android自定义控件系列八:详解onMeasure()(二)--利用onMeasure测量来实现图片拉伸永不变形,解决屏幕适配问题
- 《android 底层开发技术实战详解》第二章搭建开发环境问题解决
- XP中如何解决备份文件夹拒绝访问问题(也可解决普通用户访问管理员用户的文件的权限问题)