Class ShadowBluetoothAdapter
- java.lang.Object
-
- org.robolectric.shadows.ShadowBluetoothAdapter
-
@Implements(value=android.bluetooth.BluetoothAdapter.class, looseSignatures=true) public class ShadowBluetoothAdapter extends Object
-
-
Field Summary
Fields Modifier and Type Field Description static intRFCOMM_LISTENER_FAILED_TO_CLOSE_SERVER_SOCKETEquivalent value to internal SystemApiBluetoothStatusCodes.RFCOMM_LISTENER_FAILED_TO_CLOSE_SERVER_SOCKET.static intRFCOMM_LISTENER_OPERATION_FAILED_NO_MATCHING_SERVICE_RECORDEquivalent value to internal SystemApiBluetoothStatusCodes.RFCOMM_LISTENER_OPERATION_FAILED_NO_MATCHING_SERVICE_RECORD.static intRFCOMM_LISTENER_START_FAILED_UUID_IN_USEEquivalent value to internal SystemApiBluetoothStatusCodes.RFCOMM_LISTENER_START_FAILED_UUID_IN_USE.
-
Constructor Summary
Constructors Constructor Description ShadowBluetoothAdapter()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description BluetoothSocketaddIncomingRfcommConnection(BluetoothDevice remoteDevice, UUID uuid)Creates an incoming socket connection from the givenBluetoothDeviceto a background Bluetooth server created withBluetoothAdapter.startRfcommServer(String, UUID, PendingIntent)on the given uuid.protected booleancancelDiscovery()protected static booleancheckBluetoothAddress(String address)Validate a Bluetooth address, such as "00:43:A8:23:10:F0" Alphabetic characters must be uppercase to be valid.protected voidcloseProfileProxy(int profile, BluetoothProfile proxy)Overrides behavior ofcloseProfileProxy(int,android.bluetooth.BluetoothProfile)ifsetProfileProxy(int, android.bluetooth.BluetoothProfile)has been previously called.protected static ObjectcreateAdapter(Object attributionSource)Requires LooseSignatures because ofAttributionSourceparameterprotected booleandisable()protected booleanenable()protected StringgetAddress()protected Set<BluetoothDevice>getBondedDevices()protected static BluetoothAdaptergetDefaultAdapter()protected ObjectgetDiscoverableTimeout()Needs looseSignatures because the return value changed frominttoDurationstarting in T.protected intgetLeMaximumAdvertisingDataLength()Set<BluetoothAdapter.LeScanCallback>getLeScanCallbacks()intgetLeState()Decides the correct LE state.protected StringgetName()protected intgetProfileConnectionState(int profile)Returns the connection state for the given Bluetoothprofile, defaulting toBluetoothProfile.STATE_DISCONNECTEDif the profile's connection state was never set.protected booleangetProfileProxy(Context context, BluetoothProfile.ServiceListener listener, int profile)Overrides behavior ofgetProfileProxy(android.content.Context,android.bluetooth.BluetoothProfile.ServiceListener,int)ifsetProfileProxy(int, android.bluetooth.BluetoothProfile)has been previously called.Set<UUID>getRegisteredRfcommServerUuids()Returns an immutable set ofUUIDs representing the currently registered RFCOMM servers.protected BluetoothDevicegetRemoteDevice(String address)protected intgetScanMode()BluetoothAdapter.LeScanCallbackgetSingleLeScanCallback()protected intgetState()booleanhasActiveProfileProxy(int profile)protected booleanisBleScanAlwaysAvailable()When true, overrides the value ofgetLeState().protected booleanisDiscovering()protected booleanisEnabled()protected booleanisLeExtendedAdvertisingSupported()Returns the last value ofsetIsLeExtendedAdvertisingSupported(boolean), defaulting to true.protected booleanisMultipleAdvertisementSupported()protected BluetoothServerSocketlistenUsingInsecureL2capChannel()protected BluetoothServerSocketlistenUsingInsecureRfcommWithServiceRecord(String serviceName, UUID uuid)protected BluetoothServerSocketlistenUsingL2capChannel()protected BluetoothServerSocketlistenUsingRfcommWithServiceRecord(String serviceName, UUID uuid)static voidreset()protected BluetoothSocketretrieveConnectedRfcommSocket(UUID uuid)voidsetAddress(String address)voidsetBleScanAlwaysAvailable(boolean alwaysAvailable)Sets the value forisBleScanAlwaysAvailable.voidsetBluetoothLeAdvertiser(BluetoothLeAdvertiser advertiser)Deprecated.use real BluetoothLeAdvertiser insteadvoidsetBondedDevices(Set<BluetoothDevice> bluetoothDevices)protected voidsetDiscoverableTimeout(int timeout)protected intsetDiscoverableTimeout(Duration timeout)voidsetEnabled(boolean enabled)Deprecated.static voidsetIsBluetoothSupported(boolean supported)Determines if getDefaultAdapter() returns the default local adapter (true) or null (false).voidsetIsLeExtendedAdvertisingSupported(boolean supported)Sets the isLeExtendedAdvertisingSupported to enable/disable LE extended advertisements featurevoidsetIsMultipleAdvertisementSupported(boolean supported)Sets the value forisMultipleAdvertisementSupported.protected booleansetName(String name)voidsetProfileConnectionState(int profile, int state)Sets the connection statestatefor the given BluetoothProfileprofilevoidsetProfileProxy(int profile, BluetoothProfile proxy)Sets the active BluetoothProfileproxyfor the givenprofile.protected ObjectsetScanMode(int scanMode)Needs looseSignatures because in Android T the return value of this method was changed from bool to int.protected booleansetScanMode(int scanMode, int discoverableTimeout)protected booleansetScanMode(int scanMode, long durationMillis)voidsetState(int state)protected booleanstartDiscovery()protected booleanstartLeScan(BluetoothAdapter.LeScanCallback callback)protected booleanstartLeScan(UUID[] serviceUuids, BluetoothAdapter.LeScanCallback callback)protected intstartRfcommServer(String name, UUID uuid, PendingIntent pendingIntent)protected voidstopLeScan(BluetoothAdapter.LeScanCallback callback)protected intstopRfcommServer(UUID uuid)
-
-
-
Field Detail
-
RFCOMM_LISTENER_START_FAILED_UUID_IN_USE
public static final int RFCOMM_LISTENER_START_FAILED_UUID_IN_USE
Equivalent value to internal SystemApiBluetoothStatusCodes.RFCOMM_LISTENER_START_FAILED_UUID_IN_USE.- See Also:
- Constant Field Values
-
RFCOMM_LISTENER_OPERATION_FAILED_NO_MATCHING_SERVICE_RECORD
public static final int RFCOMM_LISTENER_OPERATION_FAILED_NO_MATCHING_SERVICE_RECORD
Equivalent value to internal SystemApiBluetoothStatusCodes.RFCOMM_LISTENER_OPERATION_FAILED_NO_MATCHING_SERVICE_RECORD.- See Also:
- Constant Field Values
-
RFCOMM_LISTENER_FAILED_TO_CLOSE_SERVER_SOCKET
public static final int RFCOMM_LISTENER_FAILED_TO_CLOSE_SERVER_SOCKET
Equivalent value to internal SystemApiBluetoothStatusCodes.RFCOMM_LISTENER_FAILED_TO_CLOSE_SERVER_SOCKET.- See Also:
- Constant Field Values
-
-
Method Detail
-
reset
@Resetter public static void reset()
-
getDefaultAdapter
@Implementation protected static BluetoothAdapter getDefaultAdapter()
-
createAdapter
@Implementation(minSdk=33) protected static Object createAdapter(Object attributionSource)
Requires LooseSignatures because ofAttributionSourceparameter
-
setIsBluetoothSupported
public static void setIsBluetoothSupported(boolean supported)
Determines if getDefaultAdapter() returns the default local adapter (true) or null (false).
-
setBluetoothLeAdvertiser
@Deprecated public void setBluetoothLeAdvertiser(BluetoothLeAdvertiser advertiser)
Deprecated.use real BluetoothLeAdvertiser instead
-
getRemoteDevice
@Implementation protected BluetoothDevice getRemoteDevice(String address)
-
getBondedDevices
@Implementation protected Set<BluetoothDevice> getBondedDevices()
-
setBondedDevices
public void setBondedDevices(Set<BluetoothDevice> bluetoothDevices)
-
listenUsingInsecureRfcommWithServiceRecord
@Implementation protected BluetoothServerSocket listenUsingInsecureRfcommWithServiceRecord(String serviceName, UUID uuid)
-
listenUsingRfcommWithServiceRecord
@Implementation protected BluetoothServerSocket listenUsingRfcommWithServiceRecord(String serviceName, UUID uuid) throws IOException
- Throws:
IOException
-
listenUsingInsecureL2capChannel
@Implementation(minSdk=29) protected BluetoothServerSocket listenUsingInsecureL2capChannel() throws IOException
- Throws:
IOException
-
listenUsingL2capChannel
@Implementation(minSdk=29) protected BluetoothServerSocket listenUsingL2capChannel() throws IOException
- Throws:
IOException
-
startDiscovery
@Implementation protected boolean startDiscovery()
-
cancelDiscovery
@Implementation protected boolean cancelDiscovery()
-
isBleScanAlwaysAvailable
@Implementation(minSdk=23) protected boolean isBleScanAlwaysAvailable()
When true, overrides the value ofgetLeState(). By default, this is false.
-
getLeState
@Implementation(minSdk=23) public int getLeState()
Decides the correct LE state. When off, BLE calls will fail or return null.LE is enabled if either Bluetooth or BLE scans are enabled. LE is always off if Airplane Mode is enabled.
-
startLeScan
@Implementation(minSdk=18) protected boolean startLeScan(BluetoothAdapter.LeScanCallback callback)
-
startLeScan
@Implementation(minSdk=18) protected boolean startLeScan(UUID[] serviceUuids, BluetoothAdapter.LeScanCallback callback)
-
stopLeScan
@Implementation(minSdk=18) protected void stopLeScan(BluetoothAdapter.LeScanCallback callback)
-
getLeScanCallbacks
public Set<BluetoothAdapter.LeScanCallback> getLeScanCallbacks()
-
getSingleLeScanCallback
public BluetoothAdapter.LeScanCallback getSingleLeScanCallback()
-
isDiscovering
@Implementation protected boolean isDiscovering()
-
isEnabled
@Implementation protected boolean isEnabled()
-
enable
@Implementation protected boolean enable()
-
disable
@Implementation protected boolean disable()
-
getAddress
@Implementation protected String getAddress()
-
getState
@Implementation protected int getState()
-
getName
@Implementation protected String getName()
-
setName
@Implementation protected boolean setName(String name)
-
setScanMode
@Implementation protected Object setScanMode(int scanMode)
Needs looseSignatures because in Android T the return value of this method was changed from bool to int.
-
setScanMode
@Implementation(maxSdk=29) protected boolean setScanMode(int scanMode, int discoverableTimeout)
-
setScanMode
@Implementation(minSdk=30, maxSdk=32) protected boolean setScanMode(int scanMode, long durationMillis)
-
getScanMode
@Implementation protected int getScanMode()
-
getDiscoverableTimeout
@Implementation protected Object getDiscoverableTimeout()
Needs looseSignatures because the return value changed frominttoDurationstarting in T.
-
setDiscoverableTimeout
@Implementation(maxSdk=32) protected void setDiscoverableTimeout(int timeout)
-
setDiscoverableTimeout
@Implementation(minSdk=33) protected int setDiscoverableTimeout(Duration timeout)
-
isMultipleAdvertisementSupported
@Implementation(minSdk=21) protected boolean isMultipleAdvertisementSupported()
-
checkBluetoothAddress
@Implementation protected static boolean checkBluetoothAddress(String address)
Validate a Bluetooth address, such as "00:43:A8:23:10:F0" Alphabetic characters must be uppercase to be valid.- Parameters:
address- Bluetooth address as string- Returns:
- true if the address is valid, false otherwise
-
getProfileConnectionState
@Implementation protected int getProfileConnectionState(int profile)
Returns the connection state for the given Bluetoothprofile, defaulting toBluetoothProfile.STATE_DISCONNECTEDif the profile's connection state was never set.Set a Bluetooth profile's connection state via
setProfileConnectionState(int, int).
-
setAddress
public void setAddress(String address)
-
setState
public void setState(int state)
-
setEnabled
@Deprecated public void setEnabled(boolean enabled)
Deprecated.
-
setBleScanAlwaysAvailable
public void setBleScanAlwaysAvailable(boolean alwaysAvailable)
Sets the value forisBleScanAlwaysAvailable. If true,getLeState()will always return true.
-
setIsMultipleAdvertisementSupported
public void setIsMultipleAdvertisementSupported(boolean supported)
Sets the value forisMultipleAdvertisementSupported.
-
setProfileConnectionState
public void setProfileConnectionState(int profile, int state)Sets the connection statestatefor the given BluetoothProfileprofile
-
setProfileProxy
public void setProfileProxy(int profile, @Nullable BluetoothProfile proxy)Sets the active BluetoothProfileproxyfor the givenprofile. Will always affect behavior ofBluetoothAdapter.getProfileProxy(android.content.Context, android.bluetooth.BluetoothProfile.ServiceListener, int)andBluetoothAdapter.closeProfileProxy(int, android.bluetooth.BluetoothProfile). Call toBluetoothAdapter.closeProfileProxy(int, android.bluetooth.BluetoothProfile)can remove the set active proxy.- Parameters:
proxy- can be 'null' to simulate the situation whereBluetoothAdapter.getProfileProxy(android.content.Context, android.bluetooth.BluetoothProfile.ServiceListener, int)would return 'false'. This can happen on older Android versions for Bluetooth profiles introduced in later Android versions.
-
hasActiveProfileProxy
public boolean hasActiveProfileProxy(int profile)
- Returns:
- 'true' if active (non-null) proxy has been set by
setProfileProxy(int, android.bluetooth.BluetoothProfile)for the givenprofileAND it has not been "deactivated" by a call toBluetoothAdapter.closeProfileProxy(int, android.bluetooth.BluetoothProfile). Only meaningful ifsetProfileProxy(int, android.bluetooth.BluetoothProfile)has been previously called.
-
getProfileProxy
@Implementation protected boolean getProfileProxy(Context context, BluetoothProfile.ServiceListener listener, int profile)
Overrides behavior ofgetProfileProxy(android.content.Context,android.bluetooth.BluetoothProfile.ServiceListener,int)ifsetProfileProxy(int, android.bluetooth.BluetoothProfile)has been previously called.If active (non-null) proxy has been set by
setProfileProxy(int,android.bluetooth.BluetoothProfile)for the givenprofile,getProfileProxy(android.content.Context,android.bluetooth.BluetoothProfile.ServiceListener,int)will immediately callonServiceConnectedof the given BluetoothProfile.ServiceListenerlistener.- Returns:
- 'true' if a proxy object has been set by
setProfileProxy(int,android.bluetooth.BluetoothProfile)for the given BluetoothProfileprofile
-
closeProfileProxy
@Implementation protected void closeProfileProxy(int profile, BluetoothProfile proxy)Overrides behavior ofcloseProfileProxy(int,android.bluetooth.BluetoothProfile)ifsetProfileProxy(int, android.bluetooth.BluetoothProfile)has been previously called. If the given non-null BluetoothProfileproxywas previously set for the givenprofilebysetProfileProxy(int, android.bluetooth.BluetoothProfile), this proxy will be "deactivated".
-
isLeExtendedAdvertisingSupported
@Implementation(minSdk=26) protected boolean isLeExtendedAdvertisingSupported()
Returns the last value ofsetIsLeExtendedAdvertisingSupported(boolean), defaulting to true.
-
setIsLeExtendedAdvertisingSupported
public void setIsLeExtendedAdvertisingSupported(boolean supported)
Sets the isLeExtendedAdvertisingSupported to enable/disable LE extended advertisements feature
-
getLeMaximumAdvertisingDataLength
@Implementation(minSdk=26) protected int getLeMaximumAdvertisingDataLength()
-
startRfcommServer
@Implementation(minSdk=33) protected int startRfcommServer(String name, UUID uuid, PendingIntent pendingIntent)
-
stopRfcommServer
@Implementation(minSdk=33) protected int stopRfcommServer(UUID uuid)
-
retrieveConnectedRfcommSocket
@Implementation(minSdk=33) @Nullable protected BluetoothSocket retrieveConnectedRfcommSocket(UUID uuid)
-
addIncomingRfcommConnection
public BluetoothSocket addIncomingRfcommConnection(BluetoothDevice remoteDevice, UUID uuid) throws PendingIntent.CanceledException
Creates an incoming socket connection from the givenBluetoothDeviceto a background Bluetooth server created withBluetoothAdapter.startRfcommServer(String, UUID, PendingIntent)on the given uuid.Creating this socket connection will invoke the
PendingIntentprovided inBluetoothAdapter.startRfcommServer(String, UUID, PendingIntent)when the server socket was created for the given UUID. The component provided in the intent can then callBluetoothAdapter.retrieveConnectedRfcommSocket(UUID)to obtain the server side socket.A
ShadowBluetoothSocketobtained from the returnedBluetoothSocketcan be used to send data to and receive data from the server side socket. This returnedBluetoothSocketis the same socket as returned byBluetoothAdapter.retrieveConnectedRfcommSocket(UUID)and should generally not be used directly outside of obtaining the shadow, as this socket is normally not exposed outside of the component started by the pending intent.ShadowBluetoothSocket.getInputStreamFeeder()andShadowBluetoothSocket.getOutputStreamSink()can be used to send data to and from the socket as if it was a remote connection.Warning: The socket returned by this method and the corresponding server side socket retrieved from
BluetoothAdapter.retrieveConnectedRfcommSocket(UUID)do not support reads and writes from different threads. Once reading or writing is started for a given socket on a given thread, that type of operation on that socket must only be done on that thread.- Returns:
- a server side BluetoothSocket or
nullif theUUIDis not registered. This value should generally not be used directly, and is mainly used to obtain a shadow with which a RFCOMM client can be simulated. - Throws:
IllegalArgumentException- if a server is not started for the givenUUID.PendingIntent.CanceledException- if the pending intent for the server socket was cancelled.
-
-