ConnectionService
abstract class ConnectionService : Service
| kotlin.Any | ||||
| ↳ | android.content.Context | |||
| ↳ | android.content.ContextWrapper | |||
| ↳ | android.app.Service | |||
| ↳ | android.telecom.ConnectionService | |||
An abstract service that should be implemented by any apps which either:
- Can make phone calls (VoIP or otherwise) and want those calls to be integrated into the built-in phone app. Referred to as a system managed
ConnectionService. - Are a standalone calling app and don't want their calls to be integrated into the built-in phone app. Referred to as a self managed
ConnectionService.
ConnectionService needs to take the following steps so that Telecom will bind to it:
1. Registration in AndroidManifest.xml
<service android:name="com.example.package.MyConnectionService"
android:label="@string/some_label_for_my_connection_service"
android:permission="android.permission.BIND_TELECOM_CONNECTION_SERVICE">
<intent-filter>
<action android:name="android.telecom.ConnectionService" />
</intent-filter>
</service>
2. Registration of PhoneAccount with TelecomManager.
See PhoneAccount and TelecomManager#registerPhoneAccount for more information.
System managed ConnectionServices must be enabled by the user in the phone app settings before Telecom will bind to them. Self-managed ConnectionServices must be granted the appropriate permission before Telecom will bind to them.
Once registered and enabled by the user in the phone app settings or granted permission, telecom will bind to a ConnectionService implementation when it wants that ConnectionService to place a call or the service has indicated that is has an incoming call through TelecomManager#addNewIncomingCall. The ConnectionService can then expect a call to onCreateIncomingConnection or onCreateOutgoingConnection wherein it should provide a new instance of a Connection object. It is through this Connection object that telecom receives state updates and the ConnectionService receives call-commands such as answer, reject, hold and disconnect.
When there are no more live calls, telecom will unbind from the ConnectionService.
Summary
| Constants | |
|---|---|
| static String |
The |
| Inherited constants | |
|---|---|
| Public constructors | |
|---|---|
| Public methods | |
|---|---|
| Unit |
addConference(conference: Conference!)Adds a new conference call. |
| Unit |
addExistingConnection(phoneAccountHandle: PhoneAccountHandle!, connection: Connection!)Adds a connection created by the |
| Unit |
conferenceRemoteConnections(remoteConnection1: RemoteConnection!, remoteConnection2: RemoteConnection!)Indicates to the relevant |
| Unit |
Call to inform Telecom that your |
| RemoteConference? |
createRemoteIncomingConference(connectionManagerPhoneAccount: PhoneAccountHandle?, request: ConnectionRequest?)Ask some other |
| RemoteConnection? |
createRemoteIncomingConnection(connectionManagerPhoneAccount: PhoneAccountHandle, request: ConnectionRequest)Ask some other |
| RemoteConference? |
createRemoteOutgoingConference(connectionManagerPhoneAccount: PhoneAccountHandle?, request: ConnectionRequest?)Ask some other |
| RemoteConnection? |
createRemoteOutgoingConnection(connectionManagerPhoneAccount: PhoneAccountHandle, request: ConnectionRequest)Ask some other |
| MutableCollection<Conference!>! |
Returns all the active |
| MutableCollection<Connection!>! |
Returns all the active |
| IBinder? |
Return the communication channel to the service. |
| open Unit |
onConference(connection1: Connection!, connection2: Connection!)Conference two specified connections. |
| open Unit |
Called when the |
| open Unit |
Called when the |
| open Conference? |
onCreateIncomingConference(connectionManagerPhoneAccount: PhoneAccountHandle, request: ConnectionRequest)Create a |
| open Unit |
onCreateIncomingConferenceFailed(connectionManagerPhoneAccount: PhoneAccountHandle?, request: ConnectionRequest?)Called by Telecom to inform the |
| open Connection! |
onCreateIncomingConnection(connectionManagerPhoneAccount: PhoneAccountHandle!, request: ConnectionRequest!)Create a |
| open Unit |
onCreateIncomingConnectionFailed(connectionManagerPhoneAccount: PhoneAccountHandle!, request: ConnectionRequest!)Called by Telecom to inform the |
| open Connection! |
onCreateIncomingHandoverConnection(fromPhoneAccountHandle: PhoneAccountHandle!, request: ConnectionRequest!)Called by Telecom to request that a |
| open Conference? |
onCreateOutgoingConference(connectionManagerPhoneAccount: PhoneAccountHandle, request: ConnectionRequest)Create a |
| open Unit |
onCreateOutgoingConferenceFailed(connectionManagerPhoneAccount: PhoneAccountHandle, request: ConnectionRequest)Called by Telecom to inform the |
| open Connection! |
onCreateOutgoingConnection(connectionManagerPhoneAccount: PhoneAccountHandle!, request: ConnectionRequest!)Create a |
| open Unit |
onCreateOutgoingConnectionFailed(connectionManagerPhoneAccount: PhoneAccountHandle!, request: ConnectionRequest!)Called by Telecom to inform the |
| open Connection! |
onCreateOutgoingHandoverConnection(fromPhoneAccountHandle: PhoneAccountHandle!, request: ConnectionRequest!)Called by Telecom to request that a |
| open Unit |
onHandoverFailed(request: ConnectionRequest!, error: Int)Called by Telecom in response to a |
| open Unit |
onRemoteConferenceAdded(conference: RemoteConference!)Indicates that a remote conference has been created for existing |
| open Unit |
onRemoteExistingConnectionAdded(connection: RemoteConnection!)Called when an existing connection is added remotely. |
| open Boolean |
Called when all clients have disconnected from a particular interface published by the service. |
| Inherited functions | |
|---|---|
Constants
SERVICE_INTERFACE
static val SERVICE_INTERFACE: String
The Intent that must be declared as handled by the service.
Value: "android.telecom.ConnectionService"
Public constructors
ConnectionService
ConnectionService()
Public methods
addConference
fun addConference(conference: Conference!): Unit
Adds a new conference call. When a conference call is created either as a result of an explicit request via onConference or otherwise, the connection service should supply an instance of Conference by invoking this method. A conference call provided by this method will persist until Conference#destroy is invoked on the conference instance.
| Parameters | |
|---|---|
conference |
Conference!: The new conference object. |
addExistingConnection
fun addExistingConnection(
phoneAccountHandle: PhoneAccountHandle!,
connection: Connection!
): Unit
Adds a connection created by the ConnectionService and informs telecom of the new connection.
| Parameters | |
|---|---|
phoneAccountHandle |
PhoneAccountHandle!: The phone account handle for the connection. |
connection |
Connection!: The connection to add. |
conferenceRemoteConnections
fun conferenceRemoteConnections(
remoteConnection1: RemoteConnection!,
remoteConnection2: RemoteConnection!
): Unit
Indicates to the relevant RemoteConnectionService that the specified RemoteConnections should be merged into a conference call.
If the conference request is successful, the method onRemoteConferenceAdded will be invoked.
| Parameters | |
|---|---|
remoteConnection1 |
RemoteConnection!: The first of the remote connections to conference. |
remoteConnection2 |
RemoteConnection!: The second of the remote connections to conference. |
connectionServiceFocusReleased
fun connectionServiceFocusReleased(): Unit
Call to inform Telecom that your ConnectionService has released call resources (e.g microphone, camera).
The ConnectionService will be disconnected when it failed to call this method within 5 seconds after onConnectionServiceFocusLost() is called.
createRemoteIncomingConference
fun createRemoteIncomingConference(
connectionManagerPhoneAccount: PhoneAccountHandle?,
request: ConnectionRequest?
): RemoteConference?
Ask some other ConnectionService to create a RemoteConference given an incoming request. This is used by ConnectionServices that are registered with PhoneAccount#CAPABILITY_ADHOC_CONFERENCE_CALLING.
| Parameters | |
|---|---|
connectionManagerPhoneAccount |
PhoneAccountHandle?: See description at onCreateOutgoingConnection(android.telecom.PhoneAccountHandle,android.telecom.ConnectionRequest). This value may be null. |
request |
ConnectionRequest?: Details about the incoming conference call. This value may be null. |
| Return | |
|---|---|
RemoteConference? |
The RemoteConference object to satisfy this call, or null to not handle the call. |
createRemoteIncomingConnection
fun createRemoteIncomingConnection(
connectionManagerPhoneAccount: PhoneAccountHandle,
request: ConnectionRequest
): RemoteConnection?
Ask some other ConnectionService to create a RemoteConnection given an incoming request. This is used by ConnectionServices that are registered with PhoneAccount#CAPABILITY_CONNECTION_MANAGER and want to be able to manage SIM-based incoming calls.
| Parameters | |
|---|---|
connectionManagerPhoneAccount |
PhoneAccountHandle: See description at onCreateOutgoingConnection(android.telecom.PhoneAccountHandle,android.telecom.ConnectionRequest). This value cannot be null. |
request |
ConnectionRequest: Details about the incoming call. This value cannot be null. |
| Return | |
|---|---|
RemoteConnection? |
The Connection object to satisfy this call, or null to not handle the call. |
createRemoteOutgoingConference
fun createRemoteOutgoingConference(
connectionManagerPhoneAccount: PhoneAccountHandle?,
request: ConnectionRequest?
): RemoteConference?
Ask some other ConnectionService to create a RemoteConference given an outgoing request. This is used by ConnectionServices that are registered with PhoneAccount#CAPABILITY_ADHOC_CONFERENCE_CALLING.
| Parameters | |
|---|---|
connectionManagerPhoneAccount |
PhoneAccountHandle?: See description at onCreateOutgoingConnection(android.telecom.PhoneAccountHandle,android.telecom.ConnectionRequest). This value may be null. |
request |
ConnectionRequest?: Details about the outgoing conference call. This value may be null. |
| Return | |
|---|---|
RemoteConference? |
The RemoteConference object to satisfy this call, or null to not handle the call. |
createRemoteOutgoingConnection
fun createRemoteOutgoingConnection(
connectionManagerPhoneAccount: PhoneAccountHandle,
request: ConnectionRequest
): RemoteConnection?
Ask some other ConnectionService to create a RemoteConnection given an outgoing request. This is used by ConnectionServices that are registered with PhoneAccount#CAPABILITY_CONNECTION_MANAGER and want to be able to use the SIM-based ConnectionService to place its outgoing calls.
| Parameters | |
|---|---|
connectionManagerPhoneAccount |
PhoneAccountHandle: See description at onCreateOutgoingConnection(android.telecom.PhoneAccountHandle,android.telecom.ConnectionRequest). This value cannot be null. |
request |
ConnectionRequest: Details about the outgoing call. This value cannot be null. |
| Return | |
|---|---|
RemoteConnection? |
The Connection object to satisfy this call, or null to not handle the call. |
getAllConferences
fun getAllConferences(): MutableCollection<Conference!>!
Returns all the active Conferences for which this ConnectionService has taken responsibility.
| Return | |
|---|---|
MutableCollection<Conference!>! |
A collection of Conferences created by this ConnectionService. |
getAllConnections
fun getAllConnections(): MutableCollection<Connection!>!
Returns all the active Connections for which this ConnectionService has taken responsibility.
| Return | |
|---|---|
MutableCollection<Connection!>! |
A collection of Connections created by this ConnectionService. |
onBind
fun onBind(intent: Intent!): IBinder?
Return the communication channel to the service. May return null if clients can not bind to the service. The returned android.os.IBinder is usually for a complex interface that has been described using aidl.
Note that unlike other application components, calls on to the IBinder interface returned here may not happen on the main thread of the process. More information about the main thread can be found in Processes and Threads.
| Parameters | |
|---|---|
intent |
Intent!: The Intent that was used to bind to this service, as given to android.content.Context#bindService. Note that any extras that were included with the Intent at that point will not be seen here. |
| Return | |
|---|---|
IBinder? |
Return an IBinder through which clients can call on to the service. |
onConference
open fun onConference(
connection1: Connection!,
connection2: Connection!
): Unit
Conference two specified connections. Invoked when the user has made a request to merge the specified connections into a conference call. In response, the connection service should create an instance of Conference and pass it into addConference.
| Parameters | |
|---|---|
connection1 |
Connection!: A connection to merge into a conference call. |
connection2 |
Connection!: A connection to merge into a conference call. |
onConnectionServiceFocusGained
open fun onConnectionServiceFocusGained(): Unit
Called when the ConnectionService has gained the call focus. The ConnectionService can acquire the call resources at this time.
onConnectionServiceFocusLost
open fun onConnectionServiceFocusLost(): Unit
Called when the ConnectionService has lost the call focus. The ConnectionService should release the call resources and invokes ConnectionService#connectionServiceFocusReleased() to inform telecom that it has released the call resources.
onCreateIncomingConference
open fun onCreateIncomingConference(
connectionManagerPhoneAccount: PhoneAccountHandle,
request: ConnectionRequest
): Conference?
Create a Conference given an incoming request. This is used to attach to an incoming conference call initiated via TelecomManager#addNewIncomingConference(PhoneAccountHandle, Bundle).
| Parameters | |
|---|---|
connectionManagerPhoneAccount |
PhoneAccountHandle: See description at onCreateOutgoingConnection(android.telecom.PhoneAccountHandle,android.telecom.ConnectionRequest). This value cannot be null. |
request |
ConnectionRequest: Details about the incoming conference call. This value cannot be null. |
| Return | |
|---|---|
Conference? |
The Conference object to satisfy this call. If the conference attempt is failed, the return value will be a result of an invocation of Connection#createFailedConnection(DisconnectCause). Return null if the ConnectionService cannot handle the call. |
onCreateIncomingConferenceFailed
open fun onCreateIncomingConferenceFailed(
connectionManagerPhoneAccount: PhoneAccountHandle?,
request: ConnectionRequest?
): Unit
Called by Telecom to inform the ConnectionService that its request to create a new incoming Conference was denied.
Used when a self-managed ConnectionService attempts to create a new incoming Conference, but Telecom has determined that the call cannot be allowed at this time. The ConnectionService is responsible for silently rejecting the new incoming Conference.
See TelecomManager#isIncomingCallPermitted(PhoneAccountHandle) for more information.
| Parameters | |
|---|---|
connectionManagerPhoneAccount |
PhoneAccountHandle?: See description at onCreateOutgoingConnection(android.telecom.PhoneAccountHandle,android.telecom.ConnectionRequest). This value may be null. |
request |
ConnectionRequest?: The incoming connection request. This value may be null. |
onCreateIncomingConnection
open fun onCreateIncomingConnection(
connectionManagerPhoneAccount: PhoneAccountHandle!,
request: ConnectionRequest!
): Connection!
Create a Connection given an incoming request. This is used to attach to existing incoming calls.
| Parameters | |
|---|---|
connectionManagerPhoneAccount |
PhoneAccountHandle!: See description at onCreateOutgoingConnection(android.telecom.PhoneAccountHandle,android.telecom.ConnectionRequest). |
request |
ConnectionRequest!: Details about the incoming call. |
| Return | |
|---|---|
Connection! |
The Connection object to satisfy this call, or null to not handle the call. |
onCreateIncomingConnectionFailed
open fun onCreateIncomingConnectionFailed(
connectionManagerPhoneAccount: PhoneAccountHandle!,
request: ConnectionRequest!
): Unit
Called by Telecom to inform the ConnectionService that its request to create a new incoming Connection was denied.
Used when a self-managed ConnectionService attempts to create a new incoming Connection, but Telecom has determined that the call cannot be allowed at this time. The ConnectionService is responsible for silently rejecting the new incoming Connection.
See TelecomManager#isIncomingCallPermitted(PhoneAccountHandle) for more information.
| Parameters | |
|---|---|
connectionManagerPhoneAccount |
PhoneAccountHandle!: See description at onCreateOutgoingConnection(android.telecom.PhoneAccountHandle,android.telecom.ConnectionRequest). |
request |
ConnectionRequest!: The incoming connection request. |
onCreateIncomingHandoverConnection
open fun onCreateIncomingHandoverConnection(
fromPhoneAccountHandle: PhoneAccountHandle!,
request: ConnectionRequest!
): Connection!
Called by Telecom to request that a ConnectionService creates an instance of an incoming handover Connection.
A call handover is the process where an ongoing call is transferred from one app (i.e. ConnectionService to another app. The user could, for example, choose to continue a mobile network call in a video calling app. The mobile network call via the Telephony stack is referred to as the source of the handover, and the video calling app is referred to as the destination.
When considering a handover scenario the initiating device is where a user initiated the handover process (e.g. by calling android.telecom.Call#handoverTo( * PhoneAccountHandle, int, Bundle), and the other device is considered the receiving device.
This method is called on the destination app on the receiving device when the destination app calls TelecomManager#acceptHandover(Uri, int, PhoneAccountHandle) to accept an incoming handover from the initiating device.
For a full discussion of the handover process and the APIs involved, see android.telecom.Call#handoverTo(PhoneAccountHandle, int, Bundle).
Implementations of this method should return an instance of Connection which represents the handover. The code below shows an example of how this is done.
<code>public Connection onCreateIncomingHandoverConnection(PhoneAccountHandle
fromPhoneAccountHandle, ConnectionRequest request) {
// Given that your app requested to accept the handover, you should not return null here.
MyConnection connection = new MyConnection();
connection.setAddress(request.getAddress(), TelecomManager.PRESENTATION_ALLOWED);
connection.setVideoState(request.getVideoState());
return connection;
}
</code>
| Parameters | |
|---|---|
fromPhoneAccountHandle |
PhoneAccountHandle!: PhoneAccountHandle associated with the ConnectionService which needs to handover the call. |
request |
ConnectionRequest!: Details about the call which needs to be handover. |
| Return | |
|---|---|
Connection! |
Connection instance corresponding to the handover call. |
onCreateOutgoingConference
open fun onCreateOutgoingConference(
connectionManagerPhoneAccount: PhoneAccountHandle,
request: ConnectionRequest
): Conference?
Create a Conference given an outgoing request. This is used to initiate new outgoing conference call requested via TelecomManager#startConference(List, Bundle).
| Parameters | |
|---|---|
connectionManagerPhoneAccount |
PhoneAccountHandle: The connection manager account to use for managing this call.
If this parameter is not If this parameter is |
request |
ConnectionRequest: Details about the outgoing call. This value cannot be null. |
| Return | |
|---|---|
Conference? |
The Conference object to satisfy this call. If the conference attempt is failed, the return value will be a result of an invocation of Connection#createFailedConnection(DisconnectCause). Return null if the ConnectionService cannot handle the call. |
onCreateOutgoingConferenceFailed
open fun onCreateOutgoingConferenceFailed(
connectionManagerPhoneAccount: PhoneAccountHandle,
request: ConnectionRequest
): Unit
Called by Telecom to inform the ConnectionService that its request to create a new outgoing Conference was denied.
Used when a self-managed ConnectionService attempts to create a new outgoing Conference, but Telecom has determined that the call cannot be placed at this time. The ConnectionService is responisible for informing the user that the Conference cannot be made at this time.
See TelecomManager#isOutgoingCallPermitted(PhoneAccountHandle) for more information.
| Parameters | |
|---|---|
connectionManagerPhoneAccount |
PhoneAccountHandle: See description at onCreateOutgoingConnection(android.telecom.PhoneAccountHandle,android.telecom.ConnectionRequest). This value cannot be null. |
request |
ConnectionRequest: The outgoing connection request. This value cannot be null. |
onCreateOutgoingConnection
open fun onCreateOutgoingConnection(
connectionManagerPhoneAccount: PhoneAccountHandle!,
request: ConnectionRequest!
): Connection!
Create a Connection given an outgoing request. This is used to initiate new outgoing calls.
| Parameters | |
|---|---|
connectionManagerPhoneAccount |
PhoneAccountHandle!: The connection manager account to use for managing this call.
If this parameter is not If this parameter is |
request |
ConnectionRequest!: Details about the outgoing call. |
| Return | |
|---|---|
Connection! |
The Connection object to satisfy this call, or the result of an invocation of Connection#createFailedConnection(DisconnectCause) to not handle the call. |
onCreateOutgoingConnectionFailed
open fun onCreateOutgoingConnectionFailed(
connectionManagerPhoneAccount: PhoneAccountHandle!,
request: ConnectionRequest!
): Unit
Called by Telecom to inform the ConnectionService that its request to create a new outgoing Connection was denied.
Used when a self-managed ConnectionService attempts to create a new outgoing Connection, but Telecom has determined that the call cannot be placed at this time. The ConnectionService is responisible for informing the user that the Connection cannot be made at this time.
See TelecomManager#isOutgoingCallPermitted(PhoneAccountHandle) for more information.
| Parameters | |
|---|---|
connectionManagerPhoneAccount |
PhoneAccountHandle!: See description at onCreateOutgoingConnection(android.telecom.PhoneAccountHandle,android.telecom.ConnectionRequest). |
request |
ConnectionRequest!: The outgoing connection request. |
onCreateOutgoingHandoverConnection
open fun onCreateOutgoingHandoverConnection(
fromPhoneAccountHandle: PhoneAccountHandle!,
request: ConnectionRequest!
): Connection!
Called by Telecom to request that a ConnectionService creates an instance of an outgoing handover Connection.
A call handover is the process where an ongoing call is transferred from one app (i.e. ConnectionService to another app. The user could, for example, choose to continue a mobile network call in a video calling app. The mobile network call via the Telephony stack is referred to as the source of the handover, and the video calling app is referred to as the destination.
When considering a handover scenario the initiating device is where a user initiated the handover process (e.g. by calling android.telecom.Call#handoverTo( * PhoneAccountHandle, int, Bundle), and the other device is considered the receiving device.
This method is called on the destination ConnectionService on initiating device when the user initiates a handover request from one app to another. The user request originates in the InCallService via android.telecom.Call#handoverTo(PhoneAccountHandle, int, Bundle).
For a full discussion of the handover process and the APIs involved, see android.telecom.Call#handoverTo(PhoneAccountHandle, int, Bundle).
Implementations of this method should return an instance of Connection which represents the handover. If your app does not wish to accept a handover to it at this time, you can return null. The code below shows an example of how this is done.
<code>public Connection onCreateIncomingHandoverConnection(PhoneAccountHandle
fromPhoneAccountHandle, ConnectionRequest request) {
if (!isHandoverAvailable()) {
return null;
}
MyConnection connection = new MyConnection();
connection.setAddress(request.getAddress(), TelecomManager.PRESENTATION_ALLOWED);
connection.setVideoState(request.getVideoState());
return connection;
}
</code>
| Parameters | |
|---|---|
fromPhoneAccountHandle |
PhoneAccountHandle!: PhoneAccountHandle associated with the ConnectionService which needs to handover the call. |
request |
ConnectionRequest!: Details about the call to handover. |
| Return | |
|---|---|
Connection! |
Connection instance corresponding to the handover call. |
onHandoverFailed
open fun onHandoverFailed(
request: ConnectionRequest!,
error: Int
): Unit
Called by Telecom in response to a TelecomManager#acceptHandover() invocation which failed.
For a full discussion of the handover process and the APIs involved, see android.telecom.Call#handoverTo(PhoneAccountHandle, int, Bundle)
| Parameters | |
|---|---|
request |
ConnectionRequest!: Details about the call which failed to handover. |
error |
Int: Reason for handover failure. Will be one of the Value is android.telecom.Call.Callback#HANDOVER_FAILURE_DEST_APP_REJECTED, android.telecom.Call.Callback#HANDOVER_FAILURE_NOT_SUPPORTED, android.telecom.Call.Callback#HANDOVER_FAILURE_USER_REJECTED, android.telecom.Call.Callback#HANDOVER_FAILURE_ONGOING_EMERGENCY_CALL, or android.telecom.Call.Callback#HANDOVER_FAILURE_UNKNOWN |
onRemoteConferenceAdded
open fun onRemoteConferenceAdded(conference: RemoteConference!): Unit
Indicates that a remote conference has been created for existing RemoteConnections. When this method is invoked, this ConnectionService should create its own representation of the conference call and send it to telecom using addConference.
This is only relevant to ConnectionServices which are registered with PhoneAccount#CAPABILITY_CONNECTION_MANAGER.
| Parameters | |
|---|---|
conference |
RemoteConference!: The remote conference call. |
onRemoteExistingConnectionAdded
open fun onRemoteExistingConnectionAdded(connection: RemoteConnection!): Unit
Called when an existing connection is added remotely.
| Parameters | |
|---|---|
connection |
RemoteConnection!: The existing connection which was added. |
onUnbind
open fun onUnbind(intent: Intent!): Boolean
Called when all clients have disconnected from a particular interface published by the service. The default implementation does nothing and returns false.
| Parameters | |
|---|---|
intent |
Intent!: The Intent that was used to bind to this service, as given to android.content.Context#bindService. Note that any extras that were included with the Intent at that point will not be seen here. |
| Return | |
|---|---|
Boolean |
Return true if you would like to have the service's onRebind method later called when new clients bind to it. |