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

问题描述

我正在制作一个以编程方式接受来电而不是认呼叫应用程序的应用程序。使用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);

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...