Android Q представил CallRedirectionService
API - кажется, что один из способов использования сторонних приложений - это отмена вызовов и перенаправление их через 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
, и просто сохраняю инструкцию log, чтобы проверить / проверить, вызван ли этот хук метода обратного вызова платформой 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
. Кстати, на developer.android.com нет примера того, как реализовать CallRedirectionService
на момент написания этой статьи. Я установил оба minSdkVersion 29
targetSdkVersion 29
в моем build.gradle
Однако при совершении звонка onPlaceCall
внутри моего Сервиса не вызывается.
Я использую Android Q Emulator для тестирования, так как у меня нет телефона Android под управлением Android Q, чтобы проверить это - это не может быть проверено на эмуляторе Android путем размещения эмулированного телефонного звонка или Что еще мне не хватает?