本篇博客主要针对于相机权限的解决,因为公司项目中二维码遇到这个问题,在网上找了两天的方案,几乎都是同一的解决办法,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(); } }