您的位置:首页 > 移动开发 > Android开发

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();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐