如何在 Android 9+ 中以编程方式接听或拒绝来电?

How to Answer or reject incoming calls programmatically in Android 9+?

我正在制作一个以编程方式接受来电而不是默认呼叫应用程序的应用程序。使用 tm.acceptRingingCall()tm.endCall 在 Android 9 及以下更容易实现。不幸的是,从 Android 10 开始,这些方法已被弃用。根据文档,可以使用 InCallService API 来完成。但是是否可以在不成为默认调用应用程序的情况下做到这一点?

很遗憾,答案是否定的。从 Android 10 开始,处理 phone 调用的唯一方法是使用 InCallService API。我在 java 中制作了一个基本的拨号器应用程序,它解释了如何将呼叫作为默认拨号器应用程序处理的基础知识 (link: https://github.com/adnan-creator/java-custom-dialer)。因此,目前最好的解决方案是成为默认的拨号器应用程序,直到您需要以编程方式接受或拒绝呼叫的功能。然后您可以将控件传回内置的拨号器应用程序。

这可以通过在控制之前存储内置拨号器的包名来完成 telecomManager.getDefaultDialerPackage().

然后可以将控件传递回内置拨号器应用程序

Intent intent = (new Intent(TelecomManager.ACTION_CHANGE_DEFAULT_DIALER))
                    .putExtra(
                     TelecomManager.EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME, 
                     storedPackageName);
this.startActivityForResult(intent, REQUEST_CODE_SET_DEFAULT_DIALER);