【问题标题】:How to Answer or reject incoming calls programmatically in Android 9+?如何在 Android 9+ 中以编程方式接听或拒绝来电?
【发布时间】:2023-03-14 18:02:01
【问题描述】:
我正在制作一个以编程方式接受来电而不是默认呼叫应用程序的应用程序。在 Android 9 及更低版本中使用tm.acceptRingingCall() 和tm.endCall 更容易实现。不幸的是,从 Android 10 开始,这些方法已被弃用。根据文档,可以使用 InCallService API 来完成。但是,如果不是默认调用应用程序,是否可以做到这一点?
【问题讨论】:
标签:
android
call
phone-call
telephonymanager
【解决方案1】:
很遗憾,答案是否定的。从 Android 10 开始,处理电话的唯一方法是使用 InCallService API。我用 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);