Android Q引入了CallRedirectionService
API——似乎是第 3 方应用程序可以使用它的方式之一是取消呼叫并通过 VoIP 重新路由它们——本质上是拦截电话。
我试图实现这个类如下
public class CallMonitorService extends CallRedirectionService {
private static final String TAG = "CallMonitorService";
public CallMonitorService() {
}
@Override
public void onPlaceCall(Uri uri, PhoneAccountHandle phoneAccountHandle, boolean b) {
Log.e(TAG, "onPlaceCall:### ");
}
}
正如您所看到的,我正在覆盖onPlaceCall
其中的抽象方法,CallRedirectionService
并简单地保留一个日志语句来检查/测试此回调方法挂钩是否被 Android 框架调用。
我在我的 Manifest.xml 以及下面添加了此服务,这是CallRedirectionService
类的源代码中记录的内容
<service
android:name=".CallMonitorService"
android:permission="android.permission.BIND_REDIRECTION_SERVICE"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.telecom.CallRedirectionService"/>
</intent-filter>
</service>
我的猜测是,当 Android 系统发出拨出电话时,它onPlaceCall
会被调用,然后我们可以编写自定义代码来对拨出电话进行进一步的操作。我不是 100% 确定这是否CallRedirectionService
应该是这样工作的 - 顺便说一下,在CallRedirectionService
撰写本文时,developer.android.com 中没有关于如何实现的示例。我将两者都设置 minSdkVersion 29
targetSdkVersion 29
在我的build.gradle
但是,当调用时 -onPlaceCall
我的服务内部没有被调用。
我正在使用 Android Q Emulator 进行测试,因为我没有运行 Android Q 的 Android 手机来对此进行测试 - 是否可以通过拨打模拟电话在 Android 模拟器上进行测试,或者我还缺少什么?