CompanionDeviceManager


public final class CompanionDeviceManager
extends Object

java.lang.Object
   ↳ android.companion.CompanionDeviceManager


Public interfaces for managing companion devices.

The interfaces in this class allow companion apps to associate(AssociationRequest,Executor,Callback) discover and request device profiles} for companion devices, listen to device presence events, transfer system level data via the reported channel and more.

Developer Guides

For more information about managing companion devices, read the Companion Device Pairing developer guide.

.
Requires the PackageManager#FEATURE_COMPANION_DEVICE_SETUP feature which can be detected using PackageManager.hasSystemFeature(String).

Summary

Nested classes

class CompanionDeviceManager.Callback

Callback for applications to receive updates about and the outcome of AssociationRequest issued via associate() call. 

class CompanionDeviceManager.TrustPairingCallback

Callback for applications to receive updates about and the outcome of CompanionDeviceManager.requestDeviceTrustPairing(int, OutOfBandPairingRequest, int, Executor, TrustPairingCallback) 

Constants

int ERROR_TRUST_OUT_OF_BAND_PAIRING_FAILED

The out of band pairing failed.

int ERROR_TRUST_PAIRING_ASSOCIATION_DOES_NOT_EXIST

The association does not exist.

int ERROR_TRUST_PAIRING_CANCELED

The trust pairing dialog was cancelled by the user or implicitly.

int ERROR_TRUST_PAIRING_FAILED_TO_CREATE_PAIRING_DIALOG

Failed to create or send pairing dialog for trust pairing.

int ERROR_TRUST_PAIRING_PIN_CODE_NOT_MATCHING

The PIN code confirmed by the user did not match.

int ERROR_TRUST_PAIRING_TRANSPORT_NOT_ATTACHED

The transport was not attached for trust pairing.

int ERROR_TRUST_RESUMPTION_FAILED

The trust resumption failed.

int ERROR_TRUST_UNKNOWN

Unknown error for trust pairing.

String EXTRA_ASSOCIATION

Extra field name for the AssociationInfo object, included into Intent which application receive in Activity.onActivityResult(int,int,Intent) after the application's AssociationRequest was successfully processed and an association was created.

String EXTRA_DEVICE

This constant was deprecated in API level 33. use AssociationInfo.getAssociatedDevice() instead.

int FLAG_AIRPLANE_MODE

Used by enableSystemDataSyncForTypes(int, int)}.

int FLAG_CALL_METADATA

Used by enableSystemDataSyncForTypes(int, int)}.

int FLAG_TASK_CONTINUITY

Used by enableSystemDataSyncForTypes(int, int)}.

int FLAG_UNIVERSAL_MODES

Used by enableSystemDataSyncForTypes(int, int)}.

int RESULT_CANCELED

The result code to propagate back to the user activity, indicates if the association dialog is implicitly cancelled.

int RESULT_DISCOVERY_TIMEOUT

The result code to propagate back to the user activity, indicates the association dialog is dismissed if there's no device found after 20 seconds.

int RESULT_INTERNAL_ERROR

The result code to propagate back to the user activity, indicates the internal error in CompanionDeviceManager.

int RESULT_OK

The result code to propagate back to the user activity, indicates the association is created successfully.

int RESULT_SECURITY_ERROR

The result code to propagate back to the user activity and Callback.onFailure(int,CharSequence), indicates app is not allow to create the association due to the security issue.

int RESULT_USER_REJECTED

The result code to propagate back to the user activity, indicates the association dialog is explicitly declined by the users.

int TRUST_TYPE_CROSS_DEVICE_AUTHENTICATION

Trust type for platform-level cross-device authentication.

int TRUST_TYPE_PROACTIVE_ASSISTANCE

Trust type for proactive assistance.

int TRUST_TYPE_SCREEN_AUTOMATION

Trust type for screen automation.

Public methods

void associate(AssociationRequest request, Executor executor, CompanionDeviceManager.Callback callback)

Request to associate this app with a companion device.

void associate(AssociationRequest request, CompanionDeviceManager.Callback callback, Handler handler)

Request to associate this app with a companion device.

void attachSystemDataTransport(int associationId, InputStream in, OutputStream out)

Attach a bidirectional communication stream to be used as a transport channel for transporting system data between associated devices.

IntentSender buildAssociationCancellationIntent()

Cancel the current association activity.

IntentSender buildPermissionTransferUserConsentIntent(int associationId)

Build a permission sync user consent dialog.

DeviceId createAndSetDeviceId(int associationId, DeviceId deviceId)

Returns a new DeviceId which can be passed to device manufacturers' apps, allowing them to fetch AssociationInfo or observe device presence for this associated device.

void detachSystemDataTransport(int associationId)

Detach the transport channel that's previously attached for the associated device.

void disableSystemDataSyncForTypes(int associationId, int flags)

Disable system data sync for an associated device.

void disassociate(int associationId)

Remove an association.

void disassociate(String deviceMacAddress)

This method was deprecated in API level 33. use disassociate(int)

void enableSystemDataSyncForTypes(int associationId, int flags)

Enable system data sync for an associated device.

List<String> getAssociations()

This method was deprecated in API level 33. use getMyAssociations()

List<AssociationInfo> getMyAssociations()

Calling this API requires a uses-feature PackageManager.FEATURE_COMPANION_DEVICE_SETUP declaration in the manifest

boolean hasNotificationAccess(ComponentName component)

This method was deprecated in API level 33. Use NotificationManager.isNotificationListenerAccessGranted(ComponentName) instead.

boolean isPermissionTransferUserConsented(int associationId)

Return the current state of consent for permission transfer for the association.

boolean isSystemDataTransportAttached(int associationId)

Checks if a transport is currently attached for a given association id.

void notifyActionResult(int associationId, ActionResult result)

Allows a companion app to report the result of an action that was requested by the system.

boolean removeBond(int associationId)

Remove bonding between this device and an associated companion device.

void requestDeviceTrustPairing(int associationId, OutOfBandPairingRequest requestOobPairing, int[] trustTypes, Executor executor, CompanionDeviceManager.TrustPairingCallback callback)

Request the system to initiate a trusted pairing process for the given association.

void requestNotificationAccess(ComponentName component)

Request notification access for the given component.

void setDeviceId(int associationId, DeviceId deviceId)

This method was deprecated in API level 36.1. use createAndSetDeviceId(int,DeviceId) instead.

void startObservingDevicePresence(ObservingDevicePresenceRequest request)

Register to receive callbacks whenever the associated device's presence changes.

void startObservingDevicePresence(String deviceAddress)

This method was deprecated in API level 36. use startObservingDevicePresence(ObservingDevicePresenceRequest) instead.

void startSystemDataTransfer(int associationId, Executor executor, OutcomeReceiver<VoidCompanionException> result)

Start system data transfer which has been previously approved by the user.

void stopObservingDevicePresence(String deviceAddress)

This method was deprecated in API level 36. use stopObservingDevicePresence(ObservingDevicePresenceRequest) instead.

void stopObservingDevicePresence(ObservingDevicePresenceRequest request)

Unregister for receiving callbacks whenever the associated device comes in and out of range.

Inherited methods

Constants

ERROR_TRUST_OUT_OF_BAND_PAIRING_FAILED

Added in version 37.2
public static final int ERROR_TRUST_OUT_OF_BAND_PAIRING_FAILED

The out of band pairing failed.

Constant Value: 7 (0x00000007)

ERROR_TRUST_PAIRING_ASSOCIATION_DOES_NOT_EXIST

Added in version 37.2
public static final int ERROR_TRUST_PAIRING_ASSOCIATION_DOES_NOT_EXIST

The association does not exist.

Constant Value: 5 (0x00000005)

ERROR_TRUST_PAIRING_CANCELED

Added in version 37.2
public static final int ERROR_TRUST_PAIRING_CANCELED

The trust pairing dialog was cancelled by the user or implicitly.

Constant Value: 2 (0x00000002)

ERROR_TRUST_PAIRING_FAILED_TO_CREATE_PAIRING_DIALOG

Added in version 37.2
public static final int ERROR_TRUST_PAIRING_FAILED_TO_CREATE_PAIRING_DIALOG

Failed to create or send pairing dialog for trust pairing.

Constant Value: 3 (0x00000003)

ERROR_TRUST_PAIRING_PIN_CODE_NOT_MATCHING

Added in version 37.2
public static final int ERROR_TRUST_PAIRING_PIN_CODE_NOT_MATCHING

The PIN code confirmed by the user did not match.

Constant Value: 4 (0x00000004)

ERROR_TRUST_PAIRING_TRANSPORT_NOT_ATTACHED

Added in version 37.2
public static final int ERROR_TRUST_PAIRING_TRANSPORT_NOT_ATTACHED

The transport was not attached for trust pairing.

Constant Value: 1 (0x00000001)

ERROR_TRUST_RESUMPTION_FAILED

Added in version 37.2
public static final int ERROR_TRUST_RESUMPTION_FAILED

The trust resumption failed.

Constant Value: 6 (0x00000006)

ERROR_TRUST_UNKNOWN

Added in version 37.2
public static final int ERROR_TRUST_UNKNOWN

Unknown error for trust pairing.

Constant Value: 0 (0x00000000)

EXTRA_ASSOCIATION

Added in API level 33
public static final String EXTRA_ASSOCIATION

Extra field name for the AssociationInfo object, included into Intent which application receive in Activity.onActivityResult(int,int,Intent) after the application's AssociationRequest was successfully processed and an association was created.

Constant Value: "android.companion.extra.ASSOCIATION"

EXTRA_DEVICE

Added in API level 26
Deprecated in API level 33
public static final String EXTRA_DEVICE

This constant was deprecated in API level 33.
use AssociationInfo.getAssociatedDevice() instead.

A device, returned in the activity result of the IntentSender received in Callback.onDeviceFound Type is:

Constant Value: "android.companion.extra.DEVICE"

FLAG_AIRPLANE_MODE

Added in API level 37
public static final int FLAG_AIRPLANE_MODE

Used by enableSystemDataSyncForTypes(int, int)}. Synchronize airplane mode state across devices. Disabled by default.

Constant Value: 16 (0x00000010)

FLAG_CALL_METADATA

Added in API level 34
public static final int FLAG_CALL_METADATA

Used by enableSystemDataSyncForTypes(int, int)}. Sync call metadata like muting, ending and silencing a call. Enabled by default.

Constant Value: 1 (0x00000001)

FLAG_TASK_CONTINUITY

Added in API level 37
public static final int FLAG_TASK_CONTINUITY

Used by enableSystemDataSyncForTypes(int, int)}. Synchronize task continuity data like open tasks, and enable this transport for Handoff. Disabled by default.

Constant Value: 2 (0x00000002)

FLAG_UNIVERSAL_MODES

Added in API level 37
public static final int FLAG_UNIVERSAL_MODES

Used by enableSystemDataSyncForTypes(int, int)}. Synchronize user settings like contextual modes across devices. Disabled by default.

Constant Value: 4 (0x00000004)

RESULT_CANCELED

Added in API level 34
public static final int RESULT_CANCELED

The result code to propagate back to the user activity, indicates if the association dialog is implicitly cancelled. E.g. phone is locked, switch to another app or press outside the dialog.

Constant Value: 0 (0x00000000)

RESULT_DISCOVERY_TIMEOUT

Added in API level 34
public static final int RESULT_DISCOVERY_TIMEOUT

The result code to propagate back to the user activity, indicates the association dialog is dismissed if there's no device found after 20 seconds.

Constant Value: 2 (0x00000002)

RESULT_INTERNAL_ERROR

Added in API level 34
public static final int RESULT_INTERNAL_ERROR

The result code to propagate back to the user activity, indicates the internal error in CompanionDeviceManager.

Constant Value: 3 (0x00000003)

RESULT_OK

Added in API level 34
public static final int RESULT_OK

The result code to propagate back to the user activity, indicates the association is created successfully.

Constant Value: -1 (0xffffffff)

RESULT_SECURITY_ERROR

Added in API level 36
public static final int RESULT_SECURITY_ERROR

The result code to propagate back to the user activity and Callback.onFailure(int,CharSequence), indicates app is not allow to create the association due to the security issue. E.g. There are missing necessary permissions when creating association.

Constant Value: 4 (0x00000004)

RESULT_USER_REJECTED

Added in API level 34
public static final int RESULT_USER_REJECTED

The result code to propagate back to the user activity, indicates the association dialog is explicitly declined by the users.

Constant Value: 1 (0x00000001)

TRUST_TYPE_CROSS_DEVICE_AUTHENTICATION

Added in version 37.2
public static final int TRUST_TYPE_CROSS_DEVICE_AUTHENTICATION

Trust type for platform-level cross-device authentication.

This trust type is used for features where one device can authenticate another, typically based on proximity. For example, allowing a trusted watch to unlock a companion phone.

When this trust type is requested and granted during Companion Device Manager (CDM) trust pairing, the platform utilizes the established secure channel to facilitate these authentication flows.

Constant Value: 2 (0x00000002)

TRUST_TYPE_PROACTIVE_ASSISTANCE

Added in version 37.2
public static final int TRUST_TYPE_PROACTIVE_ASSISTANCE

Trust type for proactive assistance. E.g. agents can use your app's screen content to provide proactive assistance.

Constant Value: 1 (0x00000001)

TRUST_TYPE_SCREEN_AUTOMATION

Added in version 37.2
public static final int TRUST_TYPE_SCREEN_AUTOMATION

Trust type for screen automation. E.g. allowing agents to see and interact with the screen to help you complete tasks even if the screen is off.

Constant Value: 0 (0x00000000)

Public methods

associate

Added in API level 33
public void associate (AssociationRequest request, 
                Executor executor, 
                CompanionDeviceManager.Callback callback)

Request to associate this app with a companion device.

Note that before creating establishing association the system may need to show UI to collect user confirmation.

If the app needs to be excluded from battery optimizations (run in the background) or to have unrestricted data access (use data in the background) it should declare use of Manifest.permission.REQUEST_COMPANION_RUN_IN_BACKGROUND and Manifest.permission.REQUEST_COMPANION_USE_DATA_IN_BACKGROUND in its AndroidManifest.xml respectively. Note that these special capabilities have a negative effect on the device's battery and user's data usage, therefore you should request them when absolutely necessary.

Application can use getMyAssociations() for retrieving the list of currently AssociationInfo objects, that represent their existing associations. Applications can also use disassociate(int) to remove an association, and are recommended to do when an association is no longer relevant to avoid unnecessary battery and/or data drain resulting from special privileges that the association provides

Note that if you use this api to associate with a Bluetooth device, please make sure to cancel your own Bluetooth discovery before calling this api, otherwise the callback may fail to return the desired device.

Calling this API requires a uses-feature PackageManager.FEATURE_COMPANION_DEVICE_SETUP declaration in the manifest

Parameters
request AssociationRequest: A request object that describes details of the request.
This value cannot be null.

executor Executor: The executor which will be used to invoke the callback.
This value cannot be null.

callback CompanionDeviceManager.Callback: The callback used to notify application when the association is created.
This value cannot be null.

associate

Added in API level 26
public void associate (AssociationRequest request, 
                CompanionDeviceManager.Callback callback, 
                Handler handler)

Request to associate this app with a companion device.

Note that before creating establishing association the system may need to show UI to collect user confirmation.

If the app needs to be excluded from battery optimizations (run in the background) or to have unrestricted data access (use data in the background) it should declare use of Manifest.permission.REQUEST_COMPANION_RUN_IN_BACKGROUND and Manifest.permission.REQUEST_COMPANION_USE_DATA_IN_BACKGROUND in its AndroidManifest.xml respectively. Note that these special capabilities have a negative effect on the device's battery and user's data usage, therefore you should request them when absolutely necessary.

Application can use getMyAssociations() for retrieving the list of currently AssociationInfo objects, that represent their existing associations. Applications can also use disassociate(int) to remove an association, and are recommended to do when an association is no longer relevant to avoid unnecessary battery and/or data drain resulting from special privileges that the association provides

Calling this API requires a uses-feature PackageManager.FEATURE_COMPANION_DEVICE_SETUP declaration in the manifest

Parameters
request AssociationRequest: A request object that describes details of the request.
This value cannot be null.

callback CompanionDeviceManager.Callback: The callback used to notify application when the association is created.
This value cannot be null.

handler Handler: The handler which will be used to invoke the callback.
This value may be null.

attachSystemDataTransport

Added in API level 34
public void attachSystemDataTransport (int associationId, 
                InputStream in, 
                OutputStream out)

Attach a bidirectional communication stream to be used as a transport channel for transporting system data between associated devices.
Requires Manifest.permission.DELIVER_COMPANION_MESSAGES

Parameters
associationId int: id of the associated device.

in InputStream: Already connected stream of data incoming from remote associated device.
This value cannot be null.

out OutputStream: Already connected stream of data outgoing to remote associated device.
This value cannot be null.

Throws
DeviceNotAssociatedException Thrown if the associationId was not previously associated with this app.

buildAssociationCancellationIntent

Added in API level 34
public IntentSender buildAssociationCancellationIntent ()

Cancel the current association activity.

The app should launch the returned intentSender by calling Activity.startIntentSenderForResult(IntentSender,int,Intent,int,int,int) to cancel the current association activity

Calling this API requires a uses-feature PackageManager.FEATURE_COMPANION_DEVICE_SETUP declaration in the manifest

Returns
IntentSender An IntentSender that the app should use to launch in order to cancel the current association activity.
This value may be null.

buildPermissionTransferUserConsentIntent

Added in API level 34
public IntentSender buildPermissionTransferUserConsentIntent (int associationId)

Build a permission sync user consent dialog.

Only the companion app which owns the association can call this method. Otherwise a null IntentSender will be returned from this method and an error will be logged. The app should launch the Activity in the returned intentSender IntentSender by calling Activity.startIntentSenderForResult(IntentSender,int,Intent,int,int,int).

The permission transfer doesn't happen immediately after the call or when the user consents. The app needs to call attachSystemDataTransport(int,InputStream,OutputStream) to attach a transport channel and startSystemDataTransfer(int,Executor,OutcomeReceiver) to trigger the system data transfer}.

Parameters
associationId int: The unique ID assigned to the association of the companion device recorded by CompanionDeviceManager

Returns
IntentSender An IntentSender that the app should use to launch the UI for the user to confirm the system data transfer request.

Throws
DeviceNotAssociatedException

createAndSetDeviceId

Added in version 36.1
public DeviceId createAndSetDeviceId (int associationId, 
                DeviceId deviceId)

Returns a new DeviceId which can be passed to device manufacturers' apps, allowing them to fetch AssociationInfo or observe device presence for this associated device. This method creates a new object and does not mutate any existing DeviceId.

The system will generate and assign a new, random 128-bit key to this returned DeviceId. Each call to this method generates a new key, any previously associated key will be obsoleted. Therefore, the returned DeviceId is the one that contains the newly assigned key and should be used for subsequent operations.

Calling this method also refreshes the association's AssociationInfo.getAssociationToken().

This device id also helps the system uniquely identify your device for efficient device management and prevents duplicate entries.

WARNING: Do not pass the returned DeviceId to apps you do not trust.

Parameters
associationId int: The unique AssociationInfo.getId assigned to the Association of the companion device recorded by CompanionDeviceManager.

deviceId DeviceId: to be used as device identifier to represent the associated device.
This value may be null.

Returns
DeviceId This value may be null.

detachSystemDataTransport

Added in API level 34
public void detachSystemDataTransport (int associationId)

Detach the transport channel that's previously attached for the associated device. The system will stop transferring any system data when this method is called.
Requires Manifest.permission.DELIVER_COMPANION_MESSAGES

Parameters
associationId int: id of the associated device.

Throws
DeviceNotAssociatedException Thrown if the associationId was not previously associated with this app.

disableSystemDataSyncForTypes

Added in API level 34
public void disableSystemDataSyncForTypes (int associationId, 
                int flags)

Disable system data sync for an associated device.

For Android versions prior to Build.VERSION_CODES.CINNAMON_BUN, only the following flags are supported:

Android versions above Build.VERSION_CODES.CINNAMON_BUN supports the following additional flags, each of which has its own default toggle state and may require specific permissions:

Calling this API requires a uses-feature PackageManager.FEATURE_COMPANION_DEVICE_SETUP declaration in the manifest

Parameters
associationId int: id of the device association.

flags int: system data types to be disabled.
Value is either 0 or a combination of the following:

disassociate

Added in API level 33
public void disassociate (int associationId)

Remove an association.

Any privileges provided via being associated with a given device will be revoked

Calling this API requires a uses-feature PackageManager.FEATURE_COMPANION_DEVICE_SETUP declaration in the manifest

Parameters
associationId int: id of the association to be removed.

disassociate

Added in API level 26
Deprecated in API level 33
public void disassociate (String deviceMacAddress)

This method was deprecated in API level 33.
use disassociate(int)

Remove the association between this app and the device with the given mac address.

Any privileges provided via being associated with a given device will be revoked

Consider doing so when the association is no longer relevant to avoid unnecessary battery and/or data drain resulting from special privileges that the association provides

Calling this API requires a uses-feature PackageManager.FEATURE_COMPANION_DEVICE_SETUP declaration in the manifest

Parameters
deviceMacAddress String: the MAC address of device to disassociate from this app. Device address is case-sensitive in API level < 33.
This value cannot be null.

enableSystemDataSyncForTypes

Added in API level 34
public void enableSystemDataSyncForTypes (int associationId, 
                int flags)

Enable system data sync for an associated device.

For Android versions prior to Build.VERSION_CODES.CINNAMON_BUN, only the following flags are supported:

Android versions above Build.VERSION_CODES.CINNAMON_BUN supports the following additional flags, each of which has its own default toggle state and may require specific permissions:

Calling this API requires a uses-feature PackageManager.FEATURE_COMPANION_DEVICE_SETUP declaration in the manifest

Parameters
associationId int: id of the device association.

flags int: system data types to be enabled.
Value is either 0 or a combination of the following:

getAssociations

Added in API level 26
Deprecated in API level 33
public List<String> getAssociations ()

This method was deprecated in API level 33.
use getMyAssociations()

Calling this API requires a uses-feature PackageManager.FEATURE_COMPANION_DEVICE_SETUP declaration in the manifest

Returns
List<String> a list of MAC addresses of devices that have been previously associated with the current app are managed by CompanionDeviceManager (ie. does not include devices managed by application itself even if they have a MAC address).
This value cannot be null.

getMyAssociations

Added in API level 33
public List<AssociationInfo> getMyAssociations ()

Calling this API requires a uses-feature PackageManager.FEATURE_COMPANION_DEVICE_SETUP declaration in the manifest

Returns
List<AssociationInfo> a list of associations that have been previously associated with the current app.
This value cannot be null.

hasNotificationAccess

Added in API level 26
Deprecated in API level 33
public boolean hasNotificationAccess (ComponentName component)

This method was deprecated in API level 33.
Use NotificationManager.isNotificationListenerAccessGranted(ComponentName) instead.

Check whether the given component can access the notifications via a NotificationListenerService Your app must have an association with a device before calling this API

Calling this API requires a uses-feature PackageManager.FEATURE_COMPANION_DEVICE_SETUP declaration in the manifest

Parameters
component ComponentName: the name of the component

Returns
boolean whether the given component has the notification listener permission

isPermissionTransferUserConsented

Added in API level 35
public boolean isPermissionTransferUserConsented (int associationId)

Return the current state of consent for permission transfer for the association. True if the user has allowed permission transfer for the association, false otherwise.

Note: The initial user consent is collected via a permission transfer user consent dialog. After the user has made their initial selection, they can toggle the permission transfer feature in the settings. This method always returns the state of the toggle setting.

Parameters
associationId int: The unique ID assigned to the association of the companion device recorded by CompanionDeviceManager

Returns
boolean True if the user has consented to the permission transfer, or false otherwise.

Throws
DeviceNotAssociatedException Exception if the companion device is not associated with the user or the calling app.

isSystemDataTransportAttached

Added in API level 37
public boolean isSystemDataTransportAttached (int associationId)

Checks if a transport is currently attached for a given association id.

A transport is considered attached if attachSystemDataTransport(int,InputStream,OutputStream) has been successfully called for the given associationId, and detachSystemDataTransport(int) has not yet been called.

This is useful for determining if the system is ready to handle data transfers before calling startSystemDataTransfer(int,Executor,OutcomeReceiver).

The caller must meet one of the following requirements:

  • It is the package that originally created the association.
  • It holds the android.permission.ACCESS_COMPANION_MESSAGE_PCC permission and the association must be verified as a trusted device

Parameters
associationId int: The unique id of the device association

Returns
boolean true if a system data transport is attached for the given association id, false otherwise.

notifyActionResult

Added in API level 37
public void notifyActionResult (int associationId, 
                ActionResult result)

Allows a companion app to report the result of an action that was requested by the system.

This API should be called after the app has received a request via CompanionDeviceService.onActionRequested(AssociationInfo,ActionRequest). For example:

Parameters
associationId int

result ActionResult: The ActionResult to report to the system.
This value cannot be null.

removeBond

Added in API level 36
public boolean removeBond (int associationId)

Remove bonding between this device and an associated companion device.

This is an asynchronous call, it will return immediately. Register for BluetoothDevice.ACTION_BOND_STATE_CHANGED intents to be notified when the bond removal process completes, and its result.

This API should be used to remove a bluetooth bond that was created either by using BluetoothDevice.createBond() or by a direct user action. The association must already exist with this device before calling this method, but this may be done retroactively to remove a bond that was created outside of the CompanionDeviceManager.
Requires Manifest.permission.BLUETOOTH_CONNECT

Parameters
associationId int: an already-associated companion device to remove bond from

Returns
boolean false on immediate error, true if bond removal process will begin

requestDeviceTrustPairing

Added in version 37.2
public void requestDeviceTrustPairing (int associationId, 
                OutOfBandPairingRequest requestOobPairing, 
                int[] trustTypes, 
                Executor executor, 
                CompanionDeviceManager.TrustPairingCallback callback)

Request the system to initiate a trusted pairing process for the given association. This process is required to enable certain features that demand a higher level of trust between the devices.

The outcome of the pairing process will be delivered via the provided TrustPairingCallback. The callback will first receive TrustPairingCallback.onTrustPairingPending(IntentSender) with an IntentSender to launch a user confirmation dialog. Upon user confirmation and successful pairing, TrustPairingCallback.onDeviceTrusted(AssociationInfo) will be invoked. If the process fails or is canceled, TrustPairingCallback.onFailure(int) or TrustPairingCallback.onTrustPairingCanceledFromRemote(AssociationInfo,IntentSender) will be called.

Parameters
associationId int: the unique ID assigned to the Association recorded by CompanionDeviceManager

requestOobPairing OutOfBandPairingRequest: request for out-of-band pairing.
This value may be null.

trustTypes int: list of trust types to be enabled that require trust pairing (or an empty array if no trust types are requested).
This value cannot be null.
Value is one of the following:
executor Executor: the executor to use for the callback.
This value cannot be null.

callback CompanionDeviceManager.TrustPairingCallback: the callback to be invoked for the pairing process.
This value cannot be null.

requestNotificationAccess

Added in API level 26
public void requestNotificationAccess (ComponentName component)

Request notification access for the given component. The given component must follow the protocol specified in NotificationListenerService Only components from the same package as the calling app are allowed. Your app must have an association with a device before calling this API. Side-loaded apps must allow restricted settings before requesting notification access.

Calling this API requires a uses-feature PackageManager.FEATURE_COMPANION_DEVICE_SETUP declaration in the manifest

Parameters
component ComponentName

setDeviceId

Added in API level 36
Deprecated in API level 36.1
public void setDeviceId (int associationId, 
                DeviceId deviceId)

This method was deprecated in API level 36.1.
use createAndSetDeviceId(int,DeviceId) instead.

Sets the deviceId for this association.

This device id helps the system uniquely identify your device for efficient device management and prevents duplicate entries.

Parameters
associationId int: The unique ID assigned to the Association of the companion device recorded by CompanionDeviceManager.

deviceId DeviceId: to be used as device identifier to represent the associated device.
This value may be null.

startObservingDevicePresence

Added in API level 36
public void startObservingDevicePresence (ObservingDevicePresenceRequest request)

Register to receive callbacks whenever the associated device's presence changes. The presence could be:

  • BLE range changes (in/out)
  • Bluetooth connection status changes (connected/disconnected)

Caller app must implement the CompanionDeviceService to receive callbacks via CompanionDeviceService.onDevicePresenceEvent(DevicePresenceEvent). The system will bind to the implemented CompanionDeviceService to deliver the callbacks.

Calling app must check for feature presence of PackageManager.FEATURE_COMPANION_DEVICE_SETUP before calling this API.

For Bluetooth LE devices, this is based on scanning for device with the given address. The system will scan for the device when Bluetooth is ON or Bluetooth scanning is ON.

For Bluetooth classic devices this is triggered when the device connects/disconnects.

WiFi devices are not supported.

If a Bluetooth LE device wants to use a rotating mac address, it is recommended to use Resolvable Private Address, and ensure the device is bonded to the phone so that android OS is able to resolve the address.

.
Requires Manifest.permission.REQUEST_OBSERVE_COMPANION_DEVICE_PRESENCE

Parameters
request ObservingDevicePresenceRequest: A request for setting the types of device for observing device presence.
This value cannot be null.

startObservingDevicePresence

Added in API level 31
Deprecated in API level 36
public void startObservingDevicePresence (String deviceAddress)

This method was deprecated in API level 36.
use startObservingDevicePresence(ObservingDevicePresenceRequest) instead.

Register to receive callbacks whenever the associated device comes in and out of range.

The provided device must be associated with the calling app before calling this method.

Caller must implement a single CompanionDeviceService which will be bound to and receive callbacks to CompanionDeviceService.onDeviceAppeared and CompanionDeviceService.onDeviceDisappeared. The app doesn't need to remain running in order to receive its callbacks.

Calling app must declare uses-permission Manifest.permission.REQUEST_OBSERVE_COMPANION_DEVICE_PRESENCE.

Calling app must check for feature presence of PackageManager.FEATURE_COMPANION_DEVICE_SETUP before calling this API.

For Bluetooth LE devices, this is based on scanning for device with the given address. The system will scan for the device when Bluetooth is ON or Bluetooth scanning is ON.

For Bluetooth classic devices this is triggered when the device connects/disconnects. WiFi devices are not supported.

If a Bluetooth LE device wants to use a rotating mac address, it is recommended to use Resolvable Private Address, and ensure the device is bonded to the phone so that android OS is able to resolve the address.

.
Requires Manifest.permission.REQUEST_OBSERVE_COMPANION_DEVICE_PRESENCE

Parameters
deviceAddress String: a previously-associated companion device's address.
This value cannot be null.

Throws
DeviceNotAssociatedException if the given device was not previously associated with this app.

startSystemDataTransfer

Added in API level 34
public void startSystemDataTransfer (int associationId, 
                Executor executor, 
                OutcomeReceiver<VoidCompanionException> result)

Start system data transfer which has been previously approved by the user.

Before calling this method, the app needs to make sure the transport channel is attached, and the user consent dialog has prompted to the user. The transfer will fail if the transport channel is disconnected or detached during the transfer.

Parameters
associationId int: The unique ID assigned to the Association of the companion device recorded by CompanionDeviceManager

executor Executor: The executor which will be used to invoke the result callback.
This value cannot be null.

result OutcomeReceiver: The callback to notify the app of the result of the system data transfer.
This value cannot be null.

Throws
DeviceNotAssociatedException Exception if the companion device is not associated

stopObservingDevicePresence

Added in API level 31
Deprecated in API level 36
public void stopObservingDevicePresence (String deviceAddress)

This method was deprecated in API level 36.
use stopObservingDevicePresence(ObservingDevicePresenceRequest) instead.

Unregister for receiving callbacks whenever the associated device comes in and out of range. The provided device must be associated with the calling app before calling this method. Calling app must declare uses-permission Manifest.permission.REQUEST_OBSERVE_COMPANION_DEVICE_PRESENCE. Calling app must check for feature presence of PackageManager.FEATURE_COMPANION_DEVICE_SETUP before calling this API.
Requires Manifest.permission.REQUEST_OBSERVE_COMPANION_DEVICE_PRESENCE

Parameters
deviceAddress String: a previously-associated companion device's address.
This value cannot be null.

Throws
DeviceNotAssociatedException if the given device was not previously associated with this app.

stopObservingDevicePresence

Added in API level 36
public void stopObservingDevicePresence (ObservingDevicePresenceRequest request)

Unregister for receiving callbacks whenever the associated device comes in and out of range. Calling app must check for feature presence of PackageManager.FEATURE_COMPANION_DEVICE_SETUP before calling this API.
Requires Manifest.permission.REQUEST_OBSERVE_COMPANION_DEVICE_PRESENCE

Parameters
request ObservingDevicePresenceRequest: A request for setting the types of device for observing device presence.
This value cannot be null.