呼叫需要可能被用户拒绝的许可

时间:2018-01-30 06:30:05

标签: java android

我的函数isPhoneSupported()显示此错误;

Call requires permission which maybe rejected by the user

我的功能如下:

public boolean isPhoneSupported() {
        TelephonyManager mgr;
        String context = Context.TELEPHONY_SERVICE;
        mgr = (TelephonyManager) getSystemService(context);
        if (mgr.getLine1Number() == null)
        {
            return false;
        }
        else{
            return true;
        }
    }

错误显示在: getLine1Number()。 谁能告诉我如何克服这个问题?

2 个答案:

答案 0 :(得分:1)

这是因为您已经要求用户提供权限并且用户拒绝了该权限。 如果这对您是强制性的,您应该一次又一次地向用户询问此权限,否则您可以在致电getLine1Number()之前添加支票,如果这是可选的。

答案 1 :(得分:0)

您可以使用RxPermissions来简化权限处理流程。下面是您可以直接使用的Rx的一些代码片段。

RxPermissions rxPermissions = new RxPermissions(this); // where this is an Activity instance

rxPermissions
    .requestEach(Manifest.permission.READ_PHONE_STATE, Manifest.permission.READ_SMS , Manifest.permission.READ_PHONE_NUMBERS)
    .subscribe(permission -> { // will emit 3 Permission objects
        if (permission.granted) {
           // `permission.name` is granted !
        } else if (permission.shouldShowRequestPermissionRationale) {
           // Denied permission without ask never again
        } else {
           // Denied permission with ask never again
           // Need to go to the settings for this. 
        }
    });

您可以使用上面的代码段来有效地管理项目中的权限模型。

此外,为了快速集成,只需在模块的build.gradle中添加以下行以及上面的代码段。

    //RxAndroid
        implementation "io.reactivex.rxjava2:rxandroid:${libraries.rxAndroid}"
   // RxJava
        implementation "io.reactivex.rxjava2:rxjava:${libraries.rxjava2}"
    //RXpermissions
        implementation 'com.tbruyelle.rxpermissions2:rxpermissions:0.8.1@aar'

RxPermission的完全集成可以参考

  1. Rx Permission