IT박스

사용자 10102와 현재 프로세스 모두 android.permission.READ_PHONE_STATE가 없습니다.

itboxs 2020. 11. 27. 07:55
반응형

사용자 10102와 현재 프로세스 모두 android.permission.READ_PHONE_STATE가 없습니다.


android.telecom.TelecomManager 클래스 getCallCapablePhoneAccounts () 메서드 를 호출하려고합니다 . 필요한 사용자 권한을 추가했지만 보안 예외가 발생 합니다.

예외가 발생하는 코드 줄은 다음과 같습니다.

List<PhoneAccountHandle> list = getTelecomManager().getCallCapablePhoneAccounts();

매니페스트에 추가 된 사용자 권한

<uses-permission android:name="android.permission.READ_PHONE_STATE" />

예외 stacktrace 원인 : java.lang.SecurityException : getDefaultOutgoingPhoneAccount : 사용자 10102와 현재 프로세스 모두 android.permission.READ_PHONE_STATE가 없습니다. 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에서는 런타임 권한을 요청해야합니다.

1 단계 : AndroidManifest.xml 파일에 추가

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

2 단계 : 권한을 요청합니다.

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
}

3 단계 : 권한을 요청할 때 콜백을 처리합니다.

@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;
    }
}

편집 : 여기에서 공식 가이드 읽기 런타임에 권한 요청


Android M을 실행하고 있습니까? 그렇다면 매니페스트에서 권한을 선언하는 것만으로는 충분하지 않기 때문입니다. 일부 권한의 경우 런타임에서 명시 적으로 사용자에게 요청해야합니다. http://developer.android.com/training/permissions/requesting.html


삼성 기기에서이 문제가 발생했습니다 (다른 기기에서는 괜찮음). zyamys 가 자신의 의견에서 제안한 것처럼 manifest.permission 줄을 추가했지만 원래 줄 대신 추가하여 다음과 같이했습니다.

<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.Manifest.permission.READ_PHONE_STATE" />

API 22를 대상으로하므로 명시 적으로 권한을 요청할 필요가 없습니다.

참고 URL : https://stackoverflow.com/questions/32742327/neither-user-10102-nor-current-process-has-android-permission-read-phone-state

반응형