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

Adn*_*had 4 android call phone-call telephonymanager

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

Adn*_*had 6

不幸的是,答案是否定的。从 Android 10 开始,处理电话的唯一方法是使用 API InCallService。我用java制作了一个基本的拨号器应用程序,它解释了如何作为默认拨号器应用程序处理呼叫的基础知识(链接: 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);
Run Code Online (Sandbox Code Playgroud)