ConnectionService 未从 TelecomManager#placeCall 启动

Tho*_*y84 5 android telecom-manager android-connectionservice

我需要拦截设备框架发出的传出呼叫的事件。
按照android 指南,我停在第 3 点电信子系统绑定到您的应用程序的 ConnectionService 实现。,也就是说我已经走到了这一步:

通话流程

val telecomManager :TelecomManager= getSystemService(
        TELECOM_SERVICE
    ) as TelecomManager
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.CALL_PHONE),
            2333)
    } else {
        try {
            val phoneAccountHandle = PhoneAccountHandle(ComponentName(
                applicationContext,
                MyConnectionService::class.java
            ), "ID999")
            telecomManager.registerPhoneAccount(PhoneAccount.builder(
                phoneAccountHandle,
                "label"
            ).setCapabilities(PhoneAccount.CAPABILITY_CONNECTION_MANAGER) .build())
            val extras = Bundle()
            extras.putParcelable(TelecomManager.EXTRA_PHONE_ACCOUNT_HANDLE, phoneAccountHandle)
            telecomManager.placeCall(Uri.parse("tel:$phoneNumber"), extras)
        } catch (e: SecurityException) {
            e.printStackTrace()
        }
    }
Run Code Online (Sandbox Code Playgroud)

连接服务

class MyConnectionService : ConnectionService() {
private val TAG = "mycnnser"
override fun onCreate() {
    super.onCreate()
    Log.d(TAG, "onCreate: ")
}

override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int {
    Log.d(TAG, "onStartCommand: ")
    return super.onStartCommand(intent, flags, startId)
}

override fun onCreateIncomingConnection(connectionManagerPhoneAccount: PhoneAccountHandle, request: ConnectionRequest): Connection {
    Log.d(TAG, "onCreateIncomingConnection: ")
    return super.onCreateIncomingConnection(connectionManagerPhoneAccount, request)
}

override fun onCreateIncomingConnectionFailed(connectionManagerPhoneAccount: PhoneAccountHandle, request: ConnectionRequest) {
    Log.d(TAG, "onCreateIncomingConnectionFailed: ")
    super.onCreateIncomingConnectionFailed(connectionManagerPhoneAccount, request)
}

override fun onCreateOutgoingConnectionFailed(connectionManagerPhoneAccount: PhoneAccountHandle, request: ConnectionRequest) {
    Log.d(TAG, "onCreateOutgoingConnectionFailed: ")
    super.onCreateOutgoingConnectionFailed(connectionManagerPhoneAccount, request)
}

override fun onCreateOutgoingConnection(connectionManagerPhoneAccount: PhoneAccountHandle, request: ConnectionRequest): Connection {
    Log.d(TAG, "onCreateOutgoingConnection: ")
    return super.onCreateOutgoingConnection(connectionManagerPhoneAccount, request)
}

override fun onCreateOutgoingHandoverConnection(fromPhoneAccountHandle: PhoneAccountHandle, request: ConnectionRequest): Connection {
    Log.d(TAG, "onCreateOutgoingHandoverConnection: ")
    return super.onCreateOutgoingHandoverConnection(fromPhoneAccountHandle, request)
}

override fun onCreateIncomingHandoverConnection(fromPhoneAccountHandle: PhoneAccountHandle, request: ConnectionRequest): Connection {
    Log.d(TAG, "onCreateIncomingHandoverConnection: ")
    return super.onCreateIncomingHandoverConnection(fromPhoneAccountHandle, request)
}

override fun onHandoverFailed(request: ConnectionRequest, error: Int) {
    super.onHandoverFailed(request, error)
    Log.d(TAG, "onHandoverFailed: ")
}

override fun onConference(connection1: Connection, connection2: Connection) {
    super.onConference(connection1, connection2)
    Log.d(TAG, "onConference: ")
}

override fun onRemoteConferenceAdded(conference: RemoteConference) {
    super.onRemoteConferenceAdded(conference)
    Log.d(TAG, "onRemoteConferenceAdded: ")
}

override fun onRemoteExistingConnectionAdded(connection: RemoteConnection) {
    super.onRemoteExistingConnectionAdded(connection)
    Log.d(TAG, "onRemoteExistingConnectionAdded: ")
}

override fun onConnectionServiceFocusLost() {
    super.onConnectionServiceFocusLost()
    Log.d(TAG, "onConnectionServiceFocusLost: ")
}

override fun onConnectionServiceFocusGained() {
    super.onConnectionServiceFocusGained()
    Log.d(TAG, "onConnectionServiceFocusGained: ")
}}
Run Code Online (Sandbox Code Playgroud)

显现

val telecomManager :TelecomManager= getSystemService(
        TELECOM_SERVICE
    ) as TelecomManager
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.CALL_PHONE),
            2333)
    } else {
        try {
            val phoneAccountHandle = PhoneAccountHandle(ComponentName(
                applicationContext,
                MyConnectionService::class.java
            ), "ID999")
            telecomManager.registerPhoneAccount(PhoneAccount.builder(
                phoneAccountHandle,
                "label"
            ).setCapabilities(PhoneAccount.CAPABILITY_CONNECTION_MANAGER) .build())
            val extras = Bundle()
            extras.putParcelable(TelecomManager.EXTRA_PHONE_ACCOUNT_HANDLE, phoneAccountHandle)
            telecomManager.placeCall(Uri.parse("tel:$phoneNumber"), extras)
        } catch (e: SecurityException) {
            e.printStackTrace()
        }
    }
Run Code Online (Sandbox Code Playgroud)

问题:调用通过设备框架启动,但所有服务日志从未触发。我的 Android 版本是 10。谢谢