我正在尝试调用 getCallCapablePhoneAccounts() android.telecom.TelecomManager 类的 方法。虽然我添加了必需的用户权限,但我得到了安全异常。
这是我遇到异常的代码行
List<PhoneAccountHandle> list = getTelecomManager().getCallCapablePhoneAccounts();
list 中添加的用户权限
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
Exception stacktrace Caused by: java.lang.SecurityException: getDefaultOutgoingPhoneAccount: Neither user 10102 nor current process has android.permission.READ_PHONE_STATE. at android.os.Parcel.readException(Parcel.java:1599) at android.os.Parcel.readException(Parcel.java:1552) at com.android.internal.telecom.ITelecomService$Stub$Proxy.getDefaultOutgoingPhoneAccount(ITelecomService.java:615) at android.telecom.TelecomManager.getDefaultOutgoingPhoneAccount(TelecomManager.java:439)
最佳答案
在 Android >=6.0 上,我们必须请求权限运行时。
Step1:添加AndroidManifest.xml文件
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
第二步:请求权限。
int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE);
if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_PHONE_STATE}, REQUEST_READ_PHONE_STATE);
} else {
//TODO
}
Step3:请求权限时处理回调。
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case REQUEST_READ_PHONE_STATE:
if ((grantResults.length > 0) && (grantResults[0] == PackageManager.PERMISSION_GRANTED)) {
//TODO
}
break;
default:
break;
}
}
编辑: 在此处阅读官方指南 Requesting Permissions at Run Time
关于android - 用户 10102 和当前进程都没有 android.permission.READ_PHONE_STATE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32742327/