getCallCapablePhoneAccounts()Android.telecom.TelecomManagerクラス。必要なユーザー権限を追加しましたが、セキュリティ例外を取得しています。
例外が発生しているコード行は次のとおりです
List<PhoneAccountHandle> list = getTelecomManager().getCallCapablePhoneAccounts();
マニフェストに追加されたユーザー権限
<uses-permission Android:name="Android.permission.READ_PHONE_STATE" />
例外スタックトレースの原因:Java.lang.SecurityException:getDefaultOutgoingPhoneAccount:ユーザー10102も現在のプロセスにもAndroid.permission.READ_PHONE_STATEがありません。 Android.os.Parcel.readException(Parcel.Java:1599)at com.Android.internal.telecom.ITelecomService $ Stub $ Proxy.getDefaultOutgoingPhoneAccount(ITelecomService.Java)のAndroid.os.Parcel.readException(Parcel.Java:1552)で:615)at Android.telecom.TelecomManager.getDefaultOutgoingPhoneAccount(TelecomManager.Java:439)
6.0以上のAndroidでは、許可ランタイムを要求する必要があります。
ステップ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
}
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;
}
}
編集:公式ガイドはこちらをご覧ください 実行時に権限をリクエストする
Android Mを実行していますか?その場合、これはマニフェストでアクセス許可を宣言するだけでは不十分だからです。一部の権限については、ランタイムでユーザーに明示的に確認する必要があります。 http://developer.Android.com/training/permissions/requesting.html
Samsungデバイスでこの問題が発生していました(他のデバイスでも問題ありません)。 zyamysのようなコメントで提案されているように、manifest.permission行を追加しましたが、元の行の代わりに追加しました。
<uses-permission Android:name="Android.permission.READ_PHONE_STATE" />
<uses-permission Android:name="Android.Manifest.permission.READ_PHONE_STATE" />
API 22をターゲットにしているので、明示的に許可を求める必要はありません。