问题描述
我正在制作一个以编程方式接受来电而不是默认呼叫应用程序的应用程序。使用tm.acceptRingingCall()
和tm.endCall
在Android 9及更低版本中更容易实现。不幸的是,从Android 10开始不推荐使用这些方法。根据文档,可以使用InCallService
API来完成。但是有可能在没有默认调用应用程序的情况下做到这一点?
解决方法
不幸的是,答案是否定的。从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);