以编程方式断开调用不能在Android 8.0(Oreo)中工作[重复]

问题描述 投票:0回答:2

这个问题在这里已有答案:

在Android 7.1之前,可以通过使用ITelephony.endCall()方法结束传入呼叫,并为您的应用提供权限android.permission.CALL_PHONE和android.permission.READ_PHONE_STATE。

在Android 8.0 Oreo(API 26)上执行相同操作时,我收到此错误

12-14 17:37:26.160 20962-20962 / com.xinthe.carmode W / System.err:java.lang.reflect.InvocationTargetException 12-14 17:37:26.161 20962-20962 / com.xinthe.carmode W / System .err:at java.lang.reflect.Method.invoke(Native Method)12-14 17:37:26.161 20962-20962 / com.xinthe.carmode W / System.err:at com.xinthe.carmode.listeners.MyPhoneStateListener .disconnectCall(MyPhoneStateListener.java:108)12-14 17:37:26.161 20962-20962 / com.xinthe.carmode W / System.err:at com.xinthe.carmode.listeners.MyPhoneStateListener.onCallStateChanged(MyPhoneStateListener.java:51 )12-14 17:37:26.161 20962-20962 / com.xinthe.carmode W / System.err:at android.telephony.PhoneStateListener $ 1.handleMessage(PhoneStateListener.java:338)12-14 17:37:26.161 20962- 20962 / com.xinthe.carmode W / System.err:at android.os.Handler.dispatchMessage(Handler.java:105)12-14 17:37:26.161 20962-20962 / com.xinthe.carmode W / System.err :at android.os.Looper.loop(Looper.java:164)12-14 17:37:26.161 20962-20962 / com.xinthe.carmode W / System.err:at androi d.app.ActivityThread.main(ActivityThread.java:6809)12-14 17:37:26.161 20962-20962 / com.xinthe.carmode W / System.err:at java.lang.reflect.Method.invoke(Native Method) )12-14 17:37:26.161 20962-20962 / com.xinthe.carmode W / System.err:at com.android.internal.os.Zygote $ MethodAndArgsCaller.run(Zygote.java:240)12-14 17: 37:26.161 20962-20962 / com.xinthe.carmode W / System.err:at 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.162 20962-20962 / com.xinthe.carmode W / System.err:at android.os.Parcel.readException(Parcel.java:1942)12-14 17:37:26.162 20962-20962 / com.xinthe.carmode W / System.err:at android.os.Parcel.readException(Parcel.java:1888)12-14 17:37:26.162 20962-20962 / com.xinthe.carmode W / System.err:at com.android.internal.telephony.ITelephony $ Stub $ Proxy.endCall(ITelephony.java:1955)12-14 17:37:26.162 20962-20962 / com.xinthe.carmode W / System.err:... 10 more 12-14 17:37:26.162 20962-20962 / com.xinthe.carmode E /结束呼叫错误:致命错误:无法连接到电话子系统12-14 17:37:26.162 20962-20962 / com.xinthe.carmode E / End调用错误:异常对象:java.lang.reflect.InvocationTargetException

以下是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;
}

谁能帮帮我吗 ?

android android-permissions telephonymanager android-phone-call
2个回答
3
投票

看起来你忘了为CALL_PHONE添加运行时权限引起:java.lang.SecurityException:用户10304和当前进程都没有android.permission.CALL_PHONE。


0
投票

一种可能的解决方案是通过Android Accessibility Service。您可以找到取消呼叫按钮的资源ID,并通过11y服务点击它!

查看此链接,该链接使用Android辅助功能服务按下“强制停止”按钮,就像Greenify App一样。

How to click button in settings using AccessibilityService?

希望这可以帮助!

© www.soinside.com 2019 - 2024. All rights reserved.