Android 7.1 までは、ITelephony.endCall() メソッドを使用してアプリにパーミッション android.permission.CALL_PHONE と android.permission.READ_PHONE_STATE を与えることで、着信を終了することができました。
Android 8.0 Oreo (API 26) で同じことをすると、このエラーが発生します
105) 12-14 17:37:26.161 20962-20962/com.xinthe.carmode W/System.err: android.os.Looper.loop(Looper.java:164) 12-14 17:37:26.161 20962- 20962/com.xinthe.carmode W/System.err: android.app.ActivityThread.main(ActivityThread.java:6809) 12-14 17:37:26.161 20962-20962/com.xinthe.carmode W/System.err : java.lang.reflect.Method.invoke(Native Method) 12-14 17:37:26.161 20962-20962/com.xinthe.carmode W/System.err で: com.android.internal.os.Zygote$MethodAndArgsCaller で実行 (Zygote.java:240) 12-14 17:37:26.161 20962-20962/com.xinthe.carmode W/System.err: com.android.internal.os.ZygoteInit.main (ZygoteInit.java:767) ) 12-14 17:37:26.162 20962-20962/com.xinthe.carmode W/System.err: 原因: java.lang.SecurityException: ユーザー 10304 も現在のプロセスも android.permission.CALL_PHONE を持っていません。12-14 17:37:26。
READ_PHONE_STATE ランタイム許可のコードは次のとおりです。
String[] PERMISSIONS = {Manifest.permission.READ_CONTACTS, Manifest.permission.READ_PHONE_STATE,
Manifest.permission.ANSWER_PHONE_CALLS};
void permissionCheck() {
if (!hasPermissions(this, PERMISSIONS)) {
ActivityCompat.requestPermissions(this, PERMISSIONS, PERMISSION_ALL);
}
}
public static boolean hasPermissions(Context context, String... permissions) {
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && context != null && permissions != null) {
for (String permission : permissions) {
if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) {
return false;
}
}
}
return true;
}
誰でも私を助けてもらえますか?