我的函数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()。 谁能告诉我如何克服这个问题?
答案 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的完全集成可以参考