首页 > 解决方案 > 如何在 Android 9+ 中以编程方式接听或拒绝来电?

问题描述

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

标签: androidcallphone-calltelephonymanager

解决方案


不幸的是,答案是否定的。从 Android 10 开始,处理电话的唯一方法是使用InCallServiceAPI。我用 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);

推荐阅读