【蓝牙】BluetoothAdapter详解

裴理
2023-12-01

BluetoothAdapter简介

  • BluetoothAdapter代表本地蓝牙设备适配器。BluetoothAdapter可以让我们执行基本的蓝牙任务,如发现蓝牙,查询蓝牙已配对列表,通过已知的MAC地址初始化一个BluetoothDevice实例,并且创建一个BluetoothServerSocket来监听其它设备的请求,启动蓝牙低功耗设备扫描等。
  • 要获取代表本地蓝牙适配器BluetoothAdapter,可以调用BluetoothManager上的BluetoothManager#getAdapter函数。在api17(JELLY_BEAN_MR1)及更低版本上,可以通过静态方法getDefaultAdapter()来获取BluetoothAdapter对象。
  • 从根本上来说,它是所有蓝牙活动的起点。一旦你获得了本地适配器对象,你就可以通过getBondedDevices()方法获取一系列已配对的蓝牙设备对象;通过startDiscovery()方法发现蓝牙设备;或者创建一个BluetoothServerSocket来监听通过 listenUsingRfcommWithServiceRecord(java.lang.String, java.util.UUID)进入的射频通信连接请求;或者通过startLeScan(android.bluetooth.BluetoothAdapter.LeScanCallback)来扫描低功耗蓝牙设备。
  • 这个类是线程安全的

摘要

类型方法或接口说明
interfaceBluetoothAdapter.LeScanCallback用于传递低功耗蓝牙扫描结果的回调接口
StringACTION_CONNECTION_STATE_CHANGED用于广播本地蓝牙适配器与远端同种配置文件的蓝牙设备之间的连接状态改变
StringACTION_DISCOVERY_FINISHED广播Action:发现结束的广播
StringACTION_DISCOVERY_STARTED广播Action:发现开始的广播
StringACTION_LOCAL_NAME_CHANGED广播Action:本地蓝牙适配器更改与其配对的蓝牙设备名称
StringACTION_REQUEST_DISCOVERABLEActivity Action:显示一个activity来请求发现模式
StringACTION_REQUEST_ENABLEActivity Action:显示一个activity来允许用户打开蓝牙
StringACTION_SCAN_MODE_CHANGED广播Action:表示本地适配器蓝牙扫描模式已经改变
StringACTION_STATE_CHANGED广播Action:本地蓝牙适配器已经改变的状态
intERROR这个类的哨兵错误值
StringEXTRA_CONNECTION_STATE被ACTION_CONNECTION_STATE_CHANGED使用的额外内容,此额外内容表示当前的连接状态。
StringEXTRA_DISCOVERABLE_DURATION在ACTION_REQUEST_DISCOVERABLE的intent中用作可选的int额外字段,以请求特定的持续时间以秒为单位。
StringEXTRA_LOCAL_NAME在ACTION_LOCAL_NAME_CHANGED的intent中用作字符串额外字段以请求本地蓝牙名称。
StringEXTRA_PREVIOUS_CONNECTION_STATEACTION_CONNECTION_STATE_CHANGED使用的额外内容,此额外内容表示以前的连接状态。
StringEXTRA_PREVIOUS_SCAN_MODE在ACTION_SCAN_MODE_CHANGED的intent中用作int extra字段,以请求先前的扫描模式。
StringEXTRA_PREVIOUS_STATE在ACTION_STATE_CHANGED的intent中用作int额外字段,以请求先前的电源状态。
StringEXTRA_SCAN_MODE在ACTION_SCAN_MODE_CHANGED的intent中用作int额外字段,以请求当前的扫描模式。
StringEXTRA_STATE在ACTION_STATE_CHANGED的intent中用作int额外字段,以请求当前电源状态。
intSCAN_MODE_CONNECTABLE表示已禁用查询扫描,但是在本地Bluetooth适配器上启用了页面扫描。
intSCAN_MODE_CONNECTABLE_DISCOVERABLE表示在本地蓝牙适配器上启用了查询扫描和页面扫描。
intSCAN_MODE_NONE表示在本地蓝牙适配器上禁用了查询扫描和页面扫描。
intSTATE_CONNECTED配置文件处于连接状态
intSTATE_CONNECTING配置文件处于正在连接状态
intSTATE_DISCONNECTED配置文件处于断开连接状态
intSTATE_DISCONNECTING配置文件处于正在断开连接状态
intSTATE_OFF表示本地蓝牙适配器处于关闭状态
intSTATE_ON表示本地蓝牙适配器处于开启状态,准备使用
intSTATE_TURNING_OFF表示本地蓝牙适配器正在关闭
intSTATE_TURNING_ON表示本地蓝牙适配器正在开启
booleancancelDiscovery()取消当前设备蓝牙扫描进程
static booleancheckBluetoothAddress(String address)验证蓝牙字符串地址,如: “00:43:A8:23:10:F0”,字符字母必须大写才有效
voidcloseProfileProxy(int profile, BluetoothProfile proxy)关闭配置文件代理与服务的连接
booleandisable()关闭本地蓝牙适配器-请勿在没有明确的用户操作的情况下关闭蓝牙。
booleanenable()打开本地蓝牙适配器-未经明确的用户操作请勿使用以打开蓝牙。
StringgetAddress()获取本地蓝牙适配器的硬件地址
BluetoothLeAdvertisergetBluetoothLeAdvertiser()获取低功耗蓝牙的BluetoothAdvertiser对象
BluetoothLeScannergetBluetoothLeScanner()获取低功耗蓝牙的BluetoothLeScanner对象
SetgetBondedDevices()获取已配对的蓝牙设备集合
static BluetoothAdaptergetDefaultAdapter()获取BluetoothAdapter对象
intgetLeMaximumAdvertisingDataLength()获取低功耗最大公告数据长度,以字节位单位
StringgetName()获取本地蓝牙适配器的蓝牙名称
intgetProfileConnectionState(int profile)根据配置文件获取当前连接状态
booleangetProfileProxy(Context context, BluetoothProfile.ServiceListener listener, int profile)获取与配置文件关联的配置文件代理对象
BluetoothDevicegetRemoteDevice(byte[] address)根据给定的蓝牙字节地址获取BluetoothDevice对象
BluetoothDevicegetRemoteDevice(String address)根据给定的字符串地址获取BluetoothDevice对象
intgetScanMode()获取扫描模式
intgetState()获取本地蓝牙适配器当前状态
booleanisDiscovering()如果本地蓝牙适配器当前正在进行扫描,则返回true
booleanisEnabled()如果当前蓝牙已打开且准备使用则返回true
booleanisLe2MPhySupported()判断是否支持LE 2M PHY特性
booleanisLeCodedPhySupported()判断是否支持LE Coded PHY特性
booleanisLeExtendedAdvertisingSupported()判断是否支持LE Extended Advertising特性
booleanisLePeriodicAdvertisingSupported()判断是否支持LE Periodic Advertising特性
booleanisMultipleAdvertisementSupported()判断芯片组是否支持多个advertisement
booleanisOffloadedFilteringSupported()判断是否支持分载过滤器
booleanisOffloadedScanBatchingSupported()判断是否支持分载扫描批处理
BluetoothServerSocketlistenUsingInsecureL2capChannel()创建一个不安全的面向L2CAP的连接信道BluetoothServerSocket对象
BluetoothServerSocketlistenUsingL2capChannel()创建一个安全的面向L2CAP的连接信道BluetoothServerSocket对象
BluetoothServerSocketlistenUsingRfcommWithServiceRecord(String name, UUID uuid)创建一个监听器和一个携带服务数据的安全的RFCOMM蓝牙Socket
booleansetName(String name)设置蓝牙适配器名称(可能调用这个方法后,你手机的蓝牙名称并没改变,可能是缓存问题)
booleanstartDiscovery()开始蓝牙扫描
booleanstartLeScan(UUID[] serviceUuids, BluetoothAdapter.LeScanCallback callback)这个方法将在api21中被遗弃,之后会用BluetoothLeScanner#startScan(List, ScanSettings, ScanCallback)来代替
booleanstartLeScan(BluetoothAdapter.LeScanCallback callback)这个方法将在api21中遗弃,将使用BluetoothLeScanner#startScan(List, ScanSettings, ScanCallback)来代替
voidstopLeScan(BluetoothAdapter.LeScanCallback callback)这个方法将在api21中遗弃,将会使用BluetoothLeScanner#stopScan(ScanCallback)来代替

常量

  • ACTION_CONNECTION_STATE_CHANGED
@SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) 
public static final String ACTION_CONNECTION_STATE_CHANGED = "android.bluetooth.adapter.action.CONNECTION_STATE_CHANGED";

未完待续

 类似资料: