笔记:Android 蓝牙 Bluetooth

BluetoothAdapter(这个类是线程安全的):

一个Android系统只有一个BluetoothAdapter

执行基本的蓝牙任务,例如启动设备发现、查询绑定(配对)设备的列表、使用已知MAC地址实例化BluetoothDevice、创建BluetoothServerSocket以侦听其他设备的连接请求,以及启动对Bluetooth LE设备的扫描。

要获取本地蓝牙适配器的BluetoothAdapter,请调用BluetoothManager上的BluetoothManager.getAdapter()函数,在JELLY_BEAN_MR1及以下版本上,需要使用静态getDefaultAdapter()方法
第一种方法:(注此方法只支持在Android 4.3(18)及以上版本)

BluetoothManager bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
BluetoothAdapter btAdapter = bluetoothManager.getAdapter();

第二种方法:

BluetoothAdapter btAdapter = BluetoothAdapter.getDefaultAdapter();

一旦有了本地适配器,就可以得到一组BluetoothDevice对象,用getBondedDevices()表示所有配对的设备;使用startDiscovery()启动设备发现;或者创建一个BluetoothServerSocket,用listenUsingRfcommWithServiceRecord(java.lang.String,java.util.UUID)第一个参数为服务器名称,第二个参数一个UUID;监听传入的RFComm连接请求;使用listenUsingL2capChannel()侦听传入的L2CAP面向连接的通道(CoC)连接请求;或者用StarteScan(android.Bluetooth.BluetoothAdapter.LeScanCallback)开始扫描蓝牙LE设备。

interface(接口):

BluetoothAdapter.LeScanCallback用于传递LE扫描结果的回调接口。

Constants(常数):

ACTION_CONNECTION_STATE_CHANGEDString用于将本地蓝牙适配器连接状态的更改广播到远程设备的配置文件
ACTION_DISCOVERY_FINISHEDString广播操作:本地蓝牙适配器已完成设备发现过程。
ACTION_DISCOVERY_STARTEDString广播操作:本地蓝牙适配器已启动远程设备发现过程。
ACTION_LOCAL_NAME_CHANGEDString广播操作:本地蓝牙适配器已更改其蓝牙名称。
ACTION_REQUEST_DISCOVERABLEString活动操作:显示请求可发现模式的系统活动。
ACTION_REQUEST_ENABLEString活动操作:显示允许用户打开蓝牙的系统活动。
ACTION_SCAN_MODE_CHANGEDString广播操作:表示本地适配器的蓝牙扫描模式已更改。
ACTION_STATE_CHANGEDString广播操作:本地蓝牙适配器的状态已更改。
ERRORint该类的Sentinel错误值。
EXTRA_CONNECTION_STATEStringACTION_CONNECTION_STATE_CHANGED使用的额外值此额外值表示当前连接状态。
EXTRA_DISCOVERABLE_DURATIONString在ACTION_REQUEST_DISCOVERABLE意图中用作可选的int额外字段,以秒为单位请求特定的可发现时间。
EXTRA_LOCAL_NAMEString用作ACTION_LOCAL_NAME_更改了请求本地蓝牙名称的意图中的字符串额外字段。
EXTRA_PREVIOUS_CONNECTION_STATEStringACTION_CONNECTION_STATE_CHANGED使用的额外值此额外值表示以前的连接状态。
EXTRA_PREVIOUS_SCAN_MODEString在ACTION_SCAN_MODE_CHANGED中用作int额外字段,更改了请求上一个扫描模式的意图。
EXTRA_PREVIOUS_STATEString在ACTION_STATE_CHANGED中用作int额外字段,更改意图以请求以前的电源状态。
EXTRA_SCAN_MODEString在ACTION\u SCAN\u MODE\u更改意图以请求当前扫描模式中用作int额外字段。
EXTRA_STATEString用作ACTION_STATE_CHANGED中的int额外字段。意图以请求当前电源状态。
SCAN_MODE_CONNECTABLEint指示禁用了查询扫描,但在本地蓝牙适配器上启用了页面扫描。
SCAN_MODE_CONNECTABLE_DISCOVERABLEint指示在本地蓝牙适配器上同时启用了查询扫描和页面扫描。
SCAN_MODE_NONEint指示在本地蓝牙适配器上禁用了查询扫描和页面扫描。
STATE_CONNECTEDint配置文件处于连接状态
STATE_CONNECTINGint配置文件处于正在连接状态
STATE_DISCONNECTEDint配置文件处于断开连接状态
STATE_DISCONNECTINGint配置文件处于正在断开连接状态
STATE_OFFint表示本地蓝牙适配器已关闭
STATE_ONint表示本地蓝牙适配器已打开,可以使用
STATE_TURNING_OFFint表示本地蓝牙适配器正在关闭
STATE_TURNING_ONint表示本地蓝牙正在打开

Public methods(方法):绿色为比较常用的方法

booleanstartDiscovery()启动远程设备发现过程
booleancancelDiscovery()取消当前的设备发现过程
static booleancheckBluetoothAddress(String address)验证字符串蓝牙地址,例如“00:43:A8:23:10:F0” 字母字符必须为大写才能有效。
booleanisEnabled() 如果蓝牙当前已启用并准备好使用,则返回true
booleandisable() 关闭蓝牙,在Android 13 中被弃用,Android 13不允许应用程序启用或禁用蓝牙,此API始终返回false,android12及以下可正常使用
booleanenable()打开蓝牙,同上在Android 13 中被弃用
StringgetAddress()返回本地蓝牙适配器的硬件地址
BluetoothLeAdvertisergetBluetoothLeAdvertiser()返回Bluetooth LeadVertiser对象,用于Bluetooth LE广告操作
BluetoothLeScannergetBluetoothLeScanner()返回蓝牙LE扫描操作的BluetoothLeScanner对象
Set<BluetoothDevice>getBondedDevices()返回绑定(配对)到本地适配器的BluetoothDevice对象集
static BluetoothAdaptergetDefaultAdapter()Android 12 (API 31)中被弃用。这种方法任继续有效,但强烈鼓励开发人员迁移到新方法,因为新方法支持上下文CreateAttributeContext,新方法上述有讲
DurationgetDiscoverableTimeout()获取 SCAN_MODE_CONNECTABLE_DISCOVERABLE 的超时持续时间
intgetMaxConnectedAudioDevices()获取此设备的每个音频配置文件的最大连接设备数
StringgetName()获取本地蓝牙适配器的友好蓝牙名称
intgetProfileConnectionState(int profile)获得配置文件当前的连接状态
booleangetProfileProxy(Context context, BluetoothProfile.ServiceListener listener, int profile)获取与配置文件关联的配置文件代理对象,通过BluetoothProfile.ServiceListener回调接口返回对象
voidcloseProfileProxy(int profile, BluetoothProfile proxy)关闭配置文件代理与服务的连接
BluetoothDevicegetRemoteDevice(byte[] address)获取给定蓝牙硬件地址的BluetoothDevice对象
BluetoothDevicegetRemoteDevice(String address)重载方法同上
BluetoothDevicegetRemoteLeDevice(String address, int addressType)获取给定蓝牙硬件地址和地址类型的BluetoothDevice对象
intgetScanMode()获取本地蓝牙适配器的当前蓝牙扫描模式
intgetState()获取本地蓝牙适配器的当前状态
booleanisDiscovering()如果本地蓝牙适配器当前处于设备发现过程中,则返回true
booleanisLe2MPhySupported()如果支持LE 2M PHY功能,则返回true
booleanisLeCodedPhySupported()如果支持LE编码的PHY功能,则返回true
booleanisLeExtendedAdvertisingSupported()如果支持LE扩展广告功能,则返回true
booleanisLePeriodicAdvertisingSupported()如果支持定期广告功能,则返回true
intgetLeMaximumAdvertisingDataLength()如果支持LE扩展广告功能,则返回最大LE广告数据长度(字节),否则返回0
booleanisMultipleAdvertisementSupported()如果芯片组支持多重播发,则返回true,Android 11 及以下需要申请权限
booleanisOffloadedFilteringSupported()如果支持卸载过滤器,则返回true,Android 11 及以下需要申请权限
booleanisOffloadedScanBatchingSupported()如果支持卸载扫描批处理,则返回true Android 11 及以下需要申请权限
BluetoothServerSocketlistenUsingInsecureL2capChannel()创建一个不安全的L2CAP面向连接的通道(CoC)BluetoothServerSocket,并分配一个动态PSM值
BluetoothServerSocketlistenUsingInsecureRfcommWithServiceRecord(String name, UUID uuid)创建一个带有服务记录的监听、不安全的RFCOMM蓝牙套接字。
BluetoothServerSocketlistenUsingL2capChannel()创建一个安全的L2CAP面向连接的通道(CoC)BluetoothServerSocket,并分配一个动态协议/服务多路复用器(PSM)值
BluetoothServerSocketlistenUsingRfcommWithServiceRecord(String name, UUID uuid)创建一个具有服务记录的监听、安全的RFCOMM蓝牙套接字
booleansetName(String name)设置本地蓝牙适配器的蓝牙名称
booleanstartLeScan(UUID[] serviceUuids, BluetoothAdapter.LeScanCallback callback)Android 5中不推荐使用此方法。改用BluetoothLeScanner.startScan(List, ScanSettings, ScanCallback)
booleanstartLeScan(BluetoothAdapter.LeScanCallback callback)重载方法 同上Android 5中不推荐使用
voidstopLeScan(BluetoothAdapter.LeScanCallback callback)Android 5中不推荐使用此方法 BluetoothLeScanner#stopScan(ScanCallback) 代替

BluetoothDevice

此类的对象是不可变的,通过BluetoothAdapter和在远程Bluetooth硬件地址创建

BluetoothAdapter btAdapter = BluetoothAdapter.getDefaultAdapter();
//根据mac地址获得远程蓝牙设备
BluetoothDevice btDevice = btAdapter.getRemoteDevice(String MAC);

//获取所有已配对蓝牙设备
Set<BluetoothDevice> devices = btAdapter .getBondedDevices();

表示远程蓝牙设备。BluetoothDevice允许您创建与相应设备的连接或查询有关该设备的信息,例如名称、地址、类和绑定状态

Constants(常数):

StringACTION_ACL_CONNECTED广播操作:表示已与远程设备建立低级别(ACL)连接
StringACTION_ACL_DISCONNECTED广播操作:表示与远程设备的低级别(ACL)断开连接
StringACTION_ACL_DISCONNECT_REQUESTED广播操作:表示远程设备已请求低级别(ACL)断开连接,并且很快将断开连接(正在断开连接)
StringACTION_ALIAS_CHANGED广播操作:表示远程设备的别名已更改。
StringACTION_BOND_STATE_CHANGED广播操作:表示远程设备的绑定状态发生变化
StringACTION_CLASS_CHANGED广播操作:远程设备的蓝牙类别已更改
StringACTION_FOUND广播操作:发现远程设备
StringACTION_NAME_CHANGED广播操作:表示第一次检索到远程设备的友好名称,或自上次检索以来更改了远程设备的友好名称
StringACTION_PAIRING_REQUEST广播操作:此意图用于广播配对请求,在Android 12或以下需要申请权限
StringACTION_UUID在获取UUID后,将其包装为远程设备的ParcelUuid进行广播
intADDRESS_TYPE_PUBLIC设备的硬件MAC地址
intADDRESS_TYPE_RANDOM地址可以是可解析的、不可解析的或静态的
intADDRESS_TYPE_UNKNOWN地址类型未知或不可用
intBOND_BONDED表示远程设备已绑定(配对)
intBOND_BONDING表示正在与远程设备进行连接(配对)
intBOND_NONE表示远程设备未绑定(配对)。
intDEVICE_TYPE_CLASSIC蓝牙设备类型,经典型-BR/EDR设备
intDEVICE_TYPE_DUAL蓝牙设备类型,双模式-BR/EDR/LE
intDEVICE_TYPE_LE蓝牙设备类型,低能耗-仅限LE
intDEVICE_TYPE_UNKNOWN蓝牙设备类型,未知
intERROR错误
StringEXTRA_BOND_STATEACTION_BOND_STATE_CHANGED 的额外字段
StringEXTRA_CLASSACTION_FOUND 和 ACTION_CLASS_CHANGED 的额外字段
StringEXTRA_DEVICEBluetoothDevice 的额外字段
StringEXTRA_IS_COORDINATED_SET_MEMBERACTION_FOUND 的额外字段
StringEXTRA_NAMEACTION_NAME_CHANGED 和 ACTION_FOUND 的额外字段
StringEXTRA_PAIRING_KEYACTION_PAIRING_REQUEST 的额外字段
StringEXTRA_PAIRING_VARIANTACTION_PAIRING_REQUEST 的额外字段
StringEXTRA_PREVIOUS_BOND_STATEACTION_BOND_STATE_CHANGED 的额外字段
StringEXTRA_RSSIACTION_FOUND 的额外字段
StringEXTRA_TRANSPORTACTION_ACL_CONNECTED 和 ACTION_ACL_DISCONNECTED 的额外字段,用于指示连接了哪个传输
StringEXTRA_UUIDACTION_UUID 的额外字段,该设备是UUID的可打包版本
intPAIRING_VARIANT_PASSKEY_CONFIRMATION系统将提示用户确认屏幕上显示的密钥,或者应用程序将为用户确认密钥
intPAIRING_VARIANT_PIN系统将提示用户输入pin或应用程序为用户输入pin
intPHY_LE_1M蓝牙LE 1M物理层
intPHY_LE_1M_MASK蓝牙LE 1M PHY掩码
intPHY_LE_2M蓝牙LE 2M物理层
intPHY_LE_2M_MASK蓝牙LE 2M PHY掩码
intPHY_LE_CODED蓝牙LE编码PHY
intPHY_LE_CODED_MASK蓝牙LE编码PHY掩码
intPHY_OPTION_NO_PREFERRED在LE编码的PHY上传输时,没有首选编码
intPHY_OPTION_S2在LE编码PHY上传输时,首选使用S=2编码
intPHY_OPTION_S8在LE编码PHY上传输时,首选使用S=8编码
intTRANSPORT_AUTOGATT连接到远程双模设备的物理传输无偏好
intTRANSPORT_BREDR表示BR/EDR传输的常量
intTRANSPORT_LE表示蓝牙低能量(BLE)传输的常数

Public methods(方法):绿色为比较常用的方法

BluetoothGattconnectGatt(Context context, boolean autoConnect, BluetoothGattCallback callback)连接到此设备托管的GATT服务器(低功耗蓝牙)
BluetoothGattconnectGatt(Context context, boolean autoConnect, BluetoothGattCallback callback, int transport, int phy, Handler handler)重载方法同上
BluetoothGattconnectGatt(Context context, boolean autoConnect, BluetoothGattCallback callback, int transport, int phy)重载方法同上
BluetoothGattconnectGatt(Context context, boolean autoConnect, BluetoothGattCallback callback, int transport)重载方法同上
BluetoothGattcreateBond()启动与远程设备的绑定(配对)过程
BluetoothSocketcreateInsecureL2capChannel(int psm)创建一个蓝牙L2CAP连接导向通道(CoC)BluetoothSocket,用于以相同的动态协议/服务多路复用器(PSM)值启动到远程设备的安全传出连接
BluetoothSocketcreateInsecureRfcommSocketToServiceRecord(UUID uuid)创建RFCOMM BluetoothSocket套接字,以便使用uuid的SDP查找启动到此远程设备的不安全传出连接
BluetoothSocketcreateL2capChannel(int psm)创建一个蓝牙L2CAP连接导向通道(CoC)BluetoothSocket,用于以相同的动态协议/服务多路复用器(PSM)值启动到远程设备的安全传出连接
BluetoothSocketcreateRfcommSocketToServiceRecord(UUID uuid)创建RFCOMM BluetoothSocket,以便使用uuid的SDP查找启动到此远程设备的安全传出连接
intdescribeContents()描述此Parcelable实例的封送表示中包含的特殊对象的类型
booleanequals(Object o)指示其他对象是否“等于”此对象(判断是否是同一个设备)
booleanfetchUuidsWithSdp()在远程设备上执行服务发现,以获得受支持的UUID
StringgetAddress()返回此BluetoothDevice的硬件地址
StringgetAlias()获取远程蓝牙设备的本地可修改名称(别名)
BluetoothClassgetBluetoothClass()获取远程设备的蓝牙类
intgetBondState()获取远程设备的绑定状态
StringgetName()获取远程设备的蓝牙名称
intgetType()获取远程设备的蓝牙设备类型
ParcelUuid[]getUuids()返回远程设备支持的功能(UUID)
inthashCode()返回对象的哈希代码值
intsetAlias(String alias)设置远程蓝牙设备的本地可修改名称(别名)
booleansetPairingConfirmation(boolean confirm)确认配对的密钥PAIRING_VARIANT_PASSKEY_CONFIRMATION
booleansetPin(byte[] pin)在配对过程中设置pin码适用于针对Build的应用程序,android 10 及以下需要申请BLUETOOTH_ADMIN 权限
StringtoString()返回BluetoothDevice的字符串表示形式
voidwriteToParcel(Parcel out, int flags)序列化
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值