android - 用户 10102 和当前进程都没有 android.permission.READ_PHONE_STATE

标签 android android-6.0-marshmallow

我正在尝试调用 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/

相关文章:

android - 使用 ADT r14 构建时出现问题

android - 在 Android 应用程序中与服务器同步

android - 是否有将 Espresso 与 Lollipop (Android 21) 一起使用的解决方法?

android - 如何授予 USB 权限,以便我的信息亭设备不询问确认对话框?

Android 6.0 - 危险权限和特殊权限有什么区别?

android - 在通知栏中设置没有图标的AlarmClock

android - 谷歌地图未专门在 Android Lollipop 和 Marshmallow 谷歌地图 v2 中加载

java - 未知输入字节长度转换为 int

ADT 和 Mac OS (10.8) 中的 Android NDK : Cannot run program "/ndk-build": Unknown reason Error: Program "/ndk-build" is not found in PATH

Android - 如何知道我失去了检查通话的权限(在 Marshmallow 上)