/**@class android.bluetooth.BluetoothHeadset implements android.bluetooth.BluetoothProfile @extends java.lang.Object Public API for controlling the Bluetooth Headset Service. This includes both Bluetooth Headset and Handsfree (v1.5) profiles. <p>BluetoothHeadset is a proxy object for controlling the Bluetooth Headset Service via IPC. <p> Use {@link android.bluetooth.BluetoothAdapter#getProfileProxy} to get the BluetoothHeadset proxy object. Use {@link android.bluetooth.BluetoothAdapter#closeProfileProxy} to close the service connection. <p> Android only supports one connected Bluetooth Headset at a time. Each method is protected with its appropriate permission. */ var BluetoothHeadset = { /** Intent used to broadcast the change in connection state of the Headset profile. <p>This intent will have 3 extras: <ul> <li> {@link #EXTRA_STATE} - The current state of the profile. </li> <li> {@link #EXTRA_PREVIOUS_STATE}- The previous state of the profile. </li> <li> {@link android.bluetooth.BluetoothDevice#EXTRA_DEVICE} - The remote device. </li> </ul> <p>{@link #EXTRA_STATE} or {@link #EXTRA_PREVIOUS_STATE} can be any of {@link #STATE_DISCONNECTED}, {@link #STATE_CONNECTING}, {@link #STATE_CONNECTED}, {@link #STATE_DISCONNECTING}. <p>Requires {@link android.Manifest.permission#BLUETOOTH} permission to receive. */ ACTION_CONNECTION_STATE_CHANGED : "android.bluetooth.headset.profile.action.CONNECTION_STATE_CHANGED", /** Intent used to broadcast the change in the Audio Connection state of the A2DP profile. <p>This intent will have 3 extras: <ul> <li> {@link #EXTRA_STATE} - The current state of the profile. </li> <li> {@link #EXTRA_PREVIOUS_STATE}- The previous state of the profile. </li> <li> {@link android.bluetooth.BluetoothDevice#EXTRA_DEVICE} - The remote device. </li> </ul> <p>{@link #EXTRA_STATE} or {@link #EXTRA_PREVIOUS_STATE} can be any of {@link #STATE_AUDIO_CONNECTED}, {@link #STATE_AUDIO_DISCONNECTED}, <p>Requires {@link android.Manifest.permission#BLUETOOTH} permission to receive. */ ACTION_AUDIO_STATE_CHANGED : "android.bluetooth.headset.profile.action.AUDIO_STATE_CHANGED", /** Intent used to broadcast the selection of a connected device as active. <p>This intent will have one extra: <ul> <li> {@link android.bluetooth.BluetoothDevice#EXTRA_DEVICE} - The remote device. It can be null if no device is active. </li> </ul> <p>Requires {@link android.Manifest.permission#BLUETOOTH} permission to receive. @hide */ ACTION_ACTIVE_DEVICE_CHANGED : "android.bluetooth.headset.profile.action.ACTIVE_DEVICE_CHANGED", /** Intent used to broadcast that the headset has posted a vendor-specific event. <p>This intent will have 4 extras and 1 category. <ul> <li> {@link android.bluetooth.BluetoothDevice#EXTRA_DEVICE} - The remote Bluetooth Device </li> <li> {@link #EXTRA_VENDOR_SPECIFIC_HEADSET_EVENT_CMD} - The vendor specific command </li> <li> {@link #EXTRA_VENDOR_SPECIFIC_HEADSET_EVENT_CMD_TYPE} - The AT command type which can be one of {@link #AT_CMD_TYPE_READ}, {@link #AT_CMD_TYPE_TEST}, or {@link #AT_CMD_TYPE_SET}, {@link #AT_CMD_TYPE_BASIC},{@link #AT_CMD_TYPE_ACTION}. </li> <li> {@link #EXTRA_VENDOR_SPECIFIC_HEADSET_EVENT_ARGS} - Command arguments. </li> </ul> <p> The category is the Company ID of the vendor defining the vendor-specific command. {@link android.bluetooth.BluetoothAssignedNumbers} For example, for Plantronics specific events Category will be {@link #VENDOR_SPECIFIC_HEADSET_EVENT_COMPANY_ID_CATEGORY}.55 <p> For example, an AT+XEVENT=foo,3 will get translated into <ul> <li> EXTRA_VENDOR_SPECIFIC_HEADSET_EVENT_CMD = +XEVENT </li> <li> EXTRA_VENDOR_SPECIFIC_HEADSET_EVENT_CMD_TYPE = AT_CMD_TYPE_SET </li> <li> EXTRA_VENDOR_SPECIFIC_HEADSET_EVENT_ARGS = foo, 3 </li> </ul> <p>Requires {@link android.Manifest.permission#BLUETOOTH} permission to receive. */ ACTION_VENDOR_SPECIFIC_HEADSET_EVENT : "android.bluetooth.headset.action.VENDOR_SPECIFIC_HEADSET_EVENT", /** A String extra field in {@link #ACTION_VENDOR_SPECIFIC_HEADSET_EVENT} intents that contains the name of the vendor-specific command. */ EXTRA_VENDOR_SPECIFIC_HEADSET_EVENT_CMD : "android.bluetooth.headset.extra.VENDOR_SPECIFIC_HEADSET_EVENT_CMD", /** An int extra field in {@link #ACTION_VENDOR_SPECIFIC_HEADSET_EVENT} intents that contains the AT command type of the vendor-specific command. */ EXTRA_VENDOR_SPECIFIC_HEADSET_EVENT_CMD_TYPE : "android.bluetooth.headset.extra.VENDOR_SPECIFIC_HEADSET_EVENT_CMD_TYPE", /** AT command type READ used with {@link #EXTRA_VENDOR_SPECIFIC_HEADSET_EVENT_CMD_TYPE} For example, AT+VGM?. There are no arguments for this command type. */ AT_CMD_TYPE_READ : "0", /** AT command type TEST used with {@link #EXTRA_VENDOR_SPECIFIC_HEADSET_EVENT_CMD_TYPE} For example, AT+VGM=?. There are no arguments for this command type. */ AT_CMD_TYPE_TEST : "1", /** AT command type SET used with {@link #EXTRA_VENDOR_SPECIFIC_HEADSET_EVENT_CMD_TYPE} For example, AT+VGM=<args>. */ AT_CMD_TYPE_SET : "2", /** AT command type BASIC used with {@link #EXTRA_VENDOR_SPECIFIC_HEADSET_EVENT_CMD_TYPE} For example, ATD. Single character commands and everything following the character are arguments. */ AT_CMD_TYPE_BASIC : "3", /** AT command type ACTION used with {@link #EXTRA_VENDOR_SPECIFIC_HEADSET_EVENT_CMD_TYPE} For example, AT+CHUP. There are no arguments for action commands. */ AT_CMD_TYPE_ACTION : "4", /** A Parcelable String array extra field in {@link #ACTION_VENDOR_SPECIFIC_HEADSET_EVENT} intents that contains the arguments to the vendor-specific command. */ EXTRA_VENDOR_SPECIFIC_HEADSET_EVENT_ARGS : "android.bluetooth.headset.extra.VENDOR_SPECIFIC_HEADSET_EVENT_ARGS", /** The intent category to be used with {@link #ACTION_VENDOR_SPECIFIC_HEADSET_EVENT} for the companyId */ VENDOR_SPECIFIC_HEADSET_EVENT_COMPANY_ID_CATEGORY : "android.bluetooth.headset.intent.category.companyid", /** A vendor-specific command for unsolicited result code. */ VENDOR_RESULT_CODE_COMMAND_ANDROID : "+ANDROID", /** A vendor-specific AT command @hide */ VENDOR_SPECIFIC_HEADSET_EVENT_XAPL : "+XAPL", /** A vendor-specific AT command @hide */ VENDOR_SPECIFIC_HEADSET_EVENT_IPHONEACCEV : "+IPHONEACCEV", /** Battery level indicator associated with {@link #VENDOR_SPECIFIC_HEADSET_EVENT_IPHONEACCEV} @hide */ VENDOR_SPECIFIC_HEADSET_EVENT_IPHONEACCEV_BATTERY_LEVEL : "1", /** A vendor-specific AT command @hide */ VENDOR_SPECIFIC_HEADSET_EVENT_XEVENT : "+XEVENT", /** Battery level indicator associated with {@link #VENDOR_SPECIFIC_HEADSET_EVENT_XEVENT} @hide */ VENDOR_SPECIFIC_HEADSET_EVENT_XEVENT_BATTERY_LEVEL : "BATTERY", /** Headset state when SCO audio is not connected. This state can be one of {@link #EXTRA_STATE} or {@link #EXTRA_PREVIOUS_STATE} of {@link #ACTION_AUDIO_STATE_CHANGED} intent. */ STATE_AUDIO_DISCONNECTED : "10", /** Headset state when SCO audio is connecting. This state can be one of {@link #EXTRA_STATE} or {@link #EXTRA_PREVIOUS_STATE} of {@link #ACTION_AUDIO_STATE_CHANGED} intent. */ STATE_AUDIO_CONNECTING : "11", /** Intent used to broadcast the headset's indicator status <p>This intent will have 3 extras: <ul> <li> {@link #EXTRA_HF_INDICATORS_IND_ID} - The Assigned number of headset Indicator which is supported by the headset ( as indicated by AT+BIND command in the SLC sequence) or whose value is changed (indicated by AT+BIEV command) </li> <li> {@link #EXTRA_HF_INDICATORS_IND_VALUE} - Updated value of headset indicator. </li> <li> {@link android.bluetooth.BluetoothDevice#EXTRA_DEVICE} - Remote device. </li> </ul> <p>{@link #EXTRA_HF_INDICATORS_IND_ID} is defined by Bluetooth SIG and each of the indicators are given an assigned number. Below shows the assigned number of Indicator added so far - Enhanced Safety - 1, Valid Values: 0 - Disabled, 1 - Enabled - Battery Level - 2, Valid Values: 0~100 - Remaining level of Battery <p>Requires {@link android.Manifest.permission#BLUETOOTH} permission to receive. @hide */ ACTION_HF_INDICATORS_VALUE_CHANGED : "android.bluetooth.headset.action.HF_INDICATORS_VALUE_CHANGED", /** A int extra field in {@link #ACTION_HF_INDICATORS_VALUE_CHANGED} intents that contains the assigned number of the headset indicator as defined by Bluetooth SIG that is being sent. Value range is 0-65535 as defined in HFP 1.7 @hide */ EXTRA_HF_INDICATORS_IND_ID : "android.bluetooth.headset.extra.HF_INDICATORS_IND_ID", /** A int extra field in {@link #ACTION_HF_INDICATORS_VALUE_CHANGED} intents that contains the value of the Headset indicator that is being sent. @hide */ EXTRA_HF_INDICATORS_IND_VALUE : "android.bluetooth.headset.extra.HF_INDICATORS_IND_VALUE", /***/ STATE_AUDIO_CONNECTED : "12", /**Initiate connection to a profile of the remote bluetooth device. <p> Currently, the system supports only 1 connection to the headset/handsfree profile. The API will automatically disconnect connected devices before connecting. <p> This API returns false in scenarios like the profile on the device is already connected or Bluetooth is not turned on. When this API returns true, it is guaranteed that connection state intent for the profile will be broadcasted with the state. Users can get the connection state of the profile from this intent. <p>Requires {@link android.Manifest.permission#BLUETOOTH_ADMIN} permission. @param {Object {BluetoothDevice}} device Remote Bluetooth Device @return {Boolean} false on immediate error, true otherwise @hide */ connect : function( ) {}, /**Initiate disconnection from a profile <p> This API will return false in scenarios like the profile on the Bluetooth device is not in connected state etc. When this API returns, true, it is guaranteed that the connection state change intent will be broadcasted with the state. Users can get the disconnection state of the profile from this intent. <p> If the disconnection is initiated by a remote device, the state will transition from {@link #STATE_CONNECTED} to {@link #STATE_DISCONNECTED}. If the disconnect is initiated by the host (local) device the state will transition from {@link #STATE_CONNECTED} to state {@link #STATE_DISCONNECTING} to state {@link #STATE_DISCONNECTED}. The transition to {@link #STATE_DISCONNECTING} can be used to distinguish between the two scenarios. <p>Requires {@link android.Manifest.permission#BLUETOOTH_ADMIN} permission. @param {Object {BluetoothDevice}} device Remote Bluetooth Device @return {Boolean} false on immediate error, true otherwise @hide */ disconnect : function( ) {}, /**{@inheritDoc} */ getConnectedDevices : function( ) {}, /**{@inheritDoc} */ getDevicesMatchingConnectionStates : function( ) {}, /**{@inheritDoc} */ getConnectionState : function( ) {}, /**Set priority of the profile <p> The device should already be paired. Priority can be one of {@link android.bluetooth.BluetoothProfile#PRIORITY_ON} or {@link android.bluetooth.BluetoothProfile#PRIORITY_OFF}, <p>Requires {@link android.Manifest.permission#BLUETOOTH_ADMIN} permission. @param {Object {BluetoothDevice}} device Paired bluetooth device @param {Number} priority @return {Boolean} true if priority is set, false on error @hide */ setPriority : function( ) {}, /**Get the priority of the profile. <p> The priority can be any of: {@link #PRIORITY_AUTO_CONNECT}, {@link #PRIORITY_OFF}, {@link #PRIORITY_ON}, {@link #PRIORITY_UNDEFINED} <p>Requires {@link android.Manifest.permission#BLUETOOTH} permission. @param {Object {BluetoothDevice}} device Bluetooth device @return {Number} priority of the device @hide */ getPriority : function( ) {}, /**Start Bluetooth voice recognition. This methods sends the voice recognition AT command to the headset and establishes the audio connection. <p> Users can listen to {@link #ACTION_AUDIO_STATE_CHANGED}. If this function returns true, this intent will be broadcasted with {@link #EXTRA_STATE} set to {@link #STATE_AUDIO_CONNECTING}. <p> {@link #EXTRA_STATE} will transition from {@link #STATE_AUDIO_CONNECTING} to {@link #STATE_AUDIO_CONNECTED} when audio connection is established and to {@link #STATE_AUDIO_DISCONNECTED} in case of failure to establish the audio connection. <p>Requires {@link android.Manifest.permission#BLUETOOTH} permission. @param {Object {BluetoothDevice}} device Bluetooth headset @return {Boolean} false if there is no headset connected, or the connected headset doesn't support voice recognition, or voice recognition is already started, or audio channel is occupied, or on error, true otherwise */ startVoiceRecognition : function( ) {}, /**Stop Bluetooth Voice Recognition mode, and shut down the Bluetooth audio path. <p> Users can listen to {@link #ACTION_AUDIO_STATE_CHANGED}. If this function returns true, this intent will be broadcasted with {@link #EXTRA_STATE} set to {@link #STATE_AUDIO_DISCONNECTED}. <p>Requires {@link android.Manifest.permission#BLUETOOTH} permission. @param {Object {BluetoothDevice}} device Bluetooth headset @return {Boolean} false if there is no headset connected, or voice recognition has not started, or voice recognition has ended on this headset, or on error, true otherwise */ stopVoiceRecognition : function( ) {}, /**Check if Bluetooth SCO audio is connected. <p>Requires {@link android.Manifest.permission#BLUETOOTH} permission. @param {Object {BluetoothDevice}} device Bluetooth headset @return {Boolean} true if SCO is connected, false otherwise or on error */ isAudioConnected : function( ) {}, /**Indicates if current platform supports voice dialing over bluetooth SCO. @return {Boolean} true if voice dialing over bluetooth is supported, false otherwise. @hide */ isBluetoothVoiceDialingEnabled : function( ) {}, /**Get the current audio state of the Headset. Note: This is an internal function and shouldn't be exposed @hide */ getAudioState : function( ) {}, /**Sets whether audio routing is allowed. When set to {@code false}, the AG will not route any audio to the HF unless explicitly told to. This method should be used in cases where the SCO channel is shared between multiple profiles and must be delegated by a source knowledgeable Note: This is an internal function and shouldn't be exposed @param {Boolean} allowed {@code true} if the profile can reroute audio, {@code false} otherwise. @hide */ setAudioRouteAllowed : function( ) {}, /**Returns whether audio routing is allowed. see {@link #setAudioRouteAllowed}(boolean). Note: This is an internal function and shouldn't be exposed @hide */ getAudioRouteAllowed : function( ) {}, /**Force SCO audio to be opened regardless any other restrictions @param {Boolean} forced Whether or not SCO audio connection should be forced: True to force SCO audio False to use SCO audio in normal manner @hide */ setForceScoAudio : function( ) {}, /**Check if at least one headset's SCO audio is connected or connecting <p>Requires {@link android.Manifest.permission#BLUETOOTH} permission. @return {Boolean} true if at least one device's SCO audio is connected or connecting, false otherwise or on error @hide */ isAudioOn : function( ) {}, /**Initiates a connection of headset audio to the current active device <p> Users can listen to {@link #ACTION_AUDIO_STATE_CHANGED}. If this function returns true, this intent will be broadcasted with {@link #EXTRA_STATE} set to {@link #STATE_AUDIO_CONNECTING}. <p> {@link #EXTRA_STATE} will transition from {@link #STATE_AUDIO_CONNECTING} to {@link #STATE_AUDIO_CONNECTED} when audio connection is established and to {@link #STATE_AUDIO_DISCONNECTED} in case of failure to establish the audio connection. Note that this intent will not be sent if {@link android.bluetooth.BluetoothHeadset#isAudioOn()} is true before calling this method @return {Boolean} false if there was some error such as there is no active headset @hide */ connectAudio : function( ) {}, /**Initiates a disconnection of HFP SCO audio. Tear down voice recognition or virtual voice call if any. <p> Users can listen to {@link #ACTION_AUDIO_STATE_CHANGED}. If this function returns true, this intent will be broadcasted with {@link #EXTRA_STATE} set to {@link #STATE_AUDIO_DISCONNECTED}. @return {Boolean} false if audio is not connected, or on error, true otherwise @hide */ disconnectAudio : function( ) {}, /**Initiates a SCO channel connection as a virtual voice call to the current active device Active handsfree device will be notified of incoming call and connected call. <p> Users can listen to {@link #ACTION_AUDIO_STATE_CHANGED}. If this function returns true, this intent will be broadcasted with {@link #EXTRA_STATE} set to {@link #STATE_AUDIO_CONNECTING}. <p> {@link #EXTRA_STATE} will transition from {@link #STATE_AUDIO_CONNECTING} to {@link #STATE_AUDIO_CONNECTED} when audio connection is established and to {@link #STATE_AUDIO_DISCONNECTED} in case of failure to establish the audio connection. @return {Boolean} true if successful, false if one of the following case applies - SCO audio is not idle (connecting or connected) - virtual call has already started - there is no active device - a Telecom managed call is going on - binder is dead or Bluetooth is disabled or other error @hide */ startScoUsingVirtualVoiceCall : function( ) {}, /**Terminates an ongoing SCO connection and the associated virtual call. <p> Users can listen to {@link #ACTION_AUDIO_STATE_CHANGED}. If this function returns true, this intent will be broadcasted with {@link #EXTRA_STATE} set to {@link #STATE_AUDIO_DISCONNECTED}. @return {Boolean} true if successful, false if one of the following case applies - virtual voice call is not started or has ended - binder is dead or Bluetooth is disabled or other error @hide */ stopScoUsingVirtualVoiceCall : function( ) {}, /**Notify Headset of phone state change. This is a backdoor for phone app to call BluetoothHeadset since there is currently not a good way to get precise call state change outside of phone app. @hide */ phoneStateChanged : function( ) {}, /**Send Headset of CLCC response @hide */ clccResponse : function( ) {}, /**Sends a vendor-specific unsolicited result code to the headset. <p>The actual string to be sent is <code>command + ": " + arg</code>. For example, if {@code command} is {@link #VENDOR_RESULT_CODE_COMMAND_ANDROID} and {@code arg} is {@code "0"}, the string <code>"+ANDROID: 0"</code> will be sent. <p>Currently only {@link #VENDOR_RESULT_CODE_COMMAND_ANDROID} is allowed as {@code command}. <p>Requires {@link android.Manifest.permission#BLUETOOTH} permission. @param {Object {BluetoothDevice}} device Bluetooth headset. @param {String} command A vendor-specific command. @param {String} arg The argument that will be attached to the command. @return {Boolean} {@code false} if there is no headset connected, or if the command is not an allowed vendor-specific unsolicited result code, or on error. {@code true} otherwise. @throws IllegalArgumentException if {@code command} is {@code null}. */ sendVendorSpecificResultCode : function( ) {}, /**Select a connected device as active. The active device selection is per profile. An active device's purpose is profile-specific. For example, in HFP and HSP profiles, it is the device used for phone call audio. If a remote device is not connected, it cannot be selected as active. <p> This API returns false in scenarios like the profile on the device is not connected or Bluetooth is not turned on. When this API returns true, it is guaranteed that the {@link #ACTION_ACTIVE_DEVICE_CHANGED} intent will be broadcasted with the active device. <p>Requires {@link android.Manifest.permission#BLUETOOTH_ADMIN} permission. @param {Object {BluetoothDevice}} device Remote Bluetooth Device, could be null if phone call audio should not be streamed to a headset @return {Boolean} false on immediate error, true otherwise @hide */ setActiveDevice : function( ) {}, /**Get the connected device that is active. <p>Requires {@link android.Manifest.permission#BLUETOOTH} permission. @return {Object {android.bluetooth.BluetoothDevice}} the connected device that is active or null if no device is active. @hide */ getActiveDevice : function( ) {}, /**Check if in-band ringing is currently enabled. In-band ringing could be disabled during an active connection. @return {Boolean} true if in-band ringing is enabled, false if in-band ringing is disabled @hide */ isInbandRingingEnabled : function( ) {}, /**Check if in-band ringing is supported for this platform. @return {Boolean} true if in-band ringing is supported, false if in-band ringing is not supported @hide */ isInbandRingingSupported : function( ) {}, };