android6.0以上授权申请拒绝引起的崩溃(魅族mx6,魅蓝note6)和Android6.0以下oppo系列手机拒绝权限引起的崩溃问题的终极解决方案

本文介绍了Android6.0及以上版本及特定品牌手机权限申请被拒绝后引发的崩溃问题,特别是魅族MX6、魅蓝Note6以及Android6.0以下OPPO手机的情况。6.0以下手机权限由手机管家拦截,6.0以上手机在拒绝权限后仍显示已授权,导致程序异常。为避免崩溃,建议在进入业务逻辑前进行try-catch处理,并探讨了使用PermissionsDispatcher和RXPermissions进行权限管理的场景及代码实现。
摘要由CSDN通过智能技术生成


以下用相机权限举例

1.正常机型是这样的:6.0以下不需要授权,6.0以上需要授权,需要授权的,授权以后进入正常业务逻辑,拒绝授权停留在本页面。

2.不正常机型:6.0以下由手机管家,或者安全中心之类的手机自带app进行权限拦截。

                       6.0以上机型,拒绝授权申请以后依然返回已经授权,此时按照正常的逻辑进入下一个页面肯定会崩溃,因为camera是空的,只要有相关的操作要执行就会异常。

发生原因:6.0以下:

camera=Camera.open(0);点进去
public static Camera open(int cameraId) {
    return new Camera(cameraId);
}
继续点进区

Camera(int cameraId) {
    int err = cameraInitNormal(cameraId);
    if (checkInitErrors(err)) {
        if (err == -EACCES) {
            throw new RuntimeException("Fail to connect to camera service");
        } else if (err == -ENODEV) {
            throw new RuntimeException("Camera initialization failed");
        }
        // Should never hit this.
        throw new RuntimeException("Unknown camera error");
    }
}点进
cameraInitNormal方法中

private int cameraInitNormal(int cameraId) {
    return cameraInitVersion(cameraId, CAMERA_HAL_API_VERSION_NORMAL_CONNECT);
}
private int cameraInitVersion(int cameraId, int halVersion) {
    mShutterCallback = null;
    mRawImageCallback = null;
    mJpegCallback = null;
    mPreviewCallback = null;
    
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值