사용자 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를 대상으로하므로 명시 적으로 권한을 요청할 필요가 없습니다.
'IT박스' 카테고리의 다른 글
HTTPS 백엔드 서버와 통신하도록 Apache 서버를 구성하는 방법은 무엇입니까? (0) | 2020.11.27 |
---|---|
C ++ std :: chrono :: time_point를 long 및 back으로 변환하는 방법 (0) | 2020.11.27 |
Error : com.android.builder.dexing.DexArchiveBuilderException : guava-21.0.jar Android 3.1 개발자 채널 처리 실패 (0) | 2020.11.27 |
Oracle 10g 데이터베이스 스키마에서 연결된 사용자 삭제 (0) | 2020.11.27 |
Ruby에서 'Monkey Patching'은 정확히 무엇을 의미합니까? (0) | 2020.11.27 |