在 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 .run(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;
}
谁能帮帮我吗 ?