Android 低功耗蓝牙(BLE)开发(3)-- BluetoothDevice详解

来源:互联网 发布:小甲鱼c语言视频怎么样 编辑:程序博客网 时间:2024/05/16 07:12
一. 概述

代表一个远程蓝牙设备。通过此类可以查询其名称、地址、连接状态等信息。这个类的操作会执行在远程蓝牙硬件上,

BluetoothDevice获取方法:
1.使用BluetoothAdapter.getRemoteDevice(String)方法去创建一个已知MAC地址的设备
2.通过 BluetoothAdapter.getBondedDevices()得到已经配对的设备集合

二. 常量

1.广播常量 
主要广播常量如下图:


String ACTION_ACL_CONNECTED :与远程设备建立连接(低级别)发送的广播,总是包含EXTRA_DEVICE附加域.常量值: "android.bluetooth.device.action.ACL_CONNECTED"

String ACTION_ACL_DISCONNECTED与远程设备断开连接(低级别)发送的广播,总是包含EXTRA_DEVICE附加域.常量值"android.bluetooth.device.action.ACL_DISCONNECTED"

String ACTION_ACL_DISCONNECT_REQUESTED远程设备提出断开连接的请求,即将断开连接 总是包含EXTRA_DEVICE附加域,友好的断开连接,一般会发送此广播。常量值"android.bluetooth.device.action.ACL_DISCONNECT_REQUESTED"

String ACTION_BOND_STATE_CHANGED:远程设备连接状态改变,如一个设备已经被匹配,总是包含EXTRA_DEVICE, EXTRA_BOND_STATE EXTRA_PREVIOUS_BOND_STATE.这些附加域。常量值: "android.bluetooth.device.action.BOND_STATE_CHANGED"

String ACTION_CLASS_CHANGED一个已经改变的远程设备的蓝牙类,总是包含EXTRA_DEVICEEXTRA_BOND_STATE这些附加域。常量值:"android.bluetooth.device.action.CLASS_CHANGED"

String ACTION_FOUND发现远程设备,当远程设备在查找过程中被发现时会发送该广播, 总是包含EXTRA_DEVICE, EXTRA_CLASS附加域, 如果这个蓝牙可用的话, 还会包含EXTRA_NAME, EXTRA_RSSI附加域,常量值:"android.bluetooth.device.action.FOUND"

String ACTION_NAME_CHANGED远程设备的名称改变或第一次发现远程蓝牙设备的名称时发出该广播, 总是包含附加域EXTRA_DEVICE , EXTRA_NAME附加域,常量值:"android.bluetooth.device.action.NAME_CHANGED"

String ACTION_PAIRING_REQUEST:用于广播配对请求常量值:"android.bluetooth.device.action.PAIRING_REQUEST"

String ACTION_UUID远程设备取回ParcelUuid封装的UUID的广播,只有当请求使用服务发现协议提取远程设备的UUID时,才会发送此意图,总是包含附加域EXTRA_DEVICE , EXTRA_UUID附加域 常量值: "android.bluetooth.device.action.UUID"


2.绑定状态常量



int BOND_BONDED :已绑定常量值:12
int BOND_BONDING:绑定中 常量值:11
int BOND_NONE:未匹配 常量值:10


3.蓝牙类型常量



int DEVICE_TYPE_CLASSIC:传统蓝牙 常量值:1
int DEVICE_TYPE_DUAL:双模蓝牙 常量值:3
int DEVICE_TYPE_LE:低功耗蓝牙 常量值:2
int DEVICE_TYPE_UNKNOWN:未知 常量值:0


4.附加域常量



String EXTRA_BOND_STATE: 绑定状态ACTION_BOND_STATE_CHANGED 的int附加域,  可能的值为 BOND_BONDED, BOND_BONDING, BOND_NONE,常量值:android.bluetooth.device.extra.BOND_STATE

String EXTRA_CLASS: Parcelable BluetoothClass附加域,ACTION_FOUND,ACTION_CLASS_CHANGED 广播的附加域,常量值:android.bluetooth.device.extra.CLASS

String EXTRA_DEVICE:Parcelable BluetoothDevice附加域,常量值: "android.bluetooth.device.extra.DEVICE"

String EXTRA_NAME:蓝牙名称,作为ACTION_NAME_CHANGEDACTION_FOUND的字符串附加域,常量值: "android.bluetooth.device.extra.NAME"

String EXTRA_PAIRING_KEY:用作ACTION_PAIRING_REQUEST意图中的int extra字段作为passkey的值。常量值:“android.bluetooth.device.extra.PAIRING_KEY”

String  EXTRA_PAIRING_VARIANT:ACTION_PAIRING_REQUEST意图中的int extra字段,以指示使用的配对方法。 可能的值有:PAIRING_VARIANT_PIN,PAIRING_VARIANT_PASSKEY_CONFIRMATION,常量值:“android.bluetooth.device.extra.PAIRING_VARIANT”

String  EXTRA_PREVIOUS_BOND_STATE:之前的绑定状态ACTION_BOND_STATE_CHANGED的整型附加域,可能值有: BOND_NONE, BOND_BONDING, BOND_BONDED.常量值: "android.bluetooth.device.extra.PREVIOUS_BOND_STATE"

String  EXTRA_RSSI:信号强度,作为ACTION_FOUND的可选短整型附加域。常量值: "android.bluetooth.device.extra.RSSI"

String EXTRA_UUID:作为ACTION_UUID意图中的一个附加域,包含远程设备的ParcelUuid。常量值:“android.bluetooth.device.extra.UUID”


5.其他常量
以下常量是在API19及之后添加的



int PAIRING_VARIANT_PASSKEY_CONFIRMATION:将提示用户确认屏幕上显示的密钥,或app将确认用户的密钥。常量值:2

int PAIRING_VARIANT_PIN:提示用户输入一个PIN或应用程序为用户输入一个PIN。 常量值:0

int TRANSPORT_AUTO:对于GATT连接到远程双模设备无物理传输优先,常量值:0

int TRANSPORT_BREDR:GATT连接到远程双模设备优先BR/EDR 常量值:1

int TRANSPORT_LE:GATT连接到远程双模设备优先BLE 常量值:2



三    公共方法


  • BluetoothGatt connectGatt (Context context, boolean autoConnect,BluetoothGattCallback callback)
作用:连接到当前设备GATT的服务端,调用者相当于客户端,通过回调将结果返回给调用者,该方法返回一个BluetoothGatt实例,通过该实例来进行客户端的操作。
如果回调为null,会抛出IllegalArgumentException异常

  • BluetoothGatt connectGatt (Context context,boolean autoConnect,BluetoothGattCallback callback,int transport)
作用:相比上面的方法多了一个transport参数,这个参数的主要作用是:用于GATT连接到远程双模设备选择:TRANSPORT_AUTO或TRANSPORT_BREDR或TRANSPORT_LE

  • boolean createBond ()
作用:开始与远程设备的绑定(配对)过程。这是一个异步调用,它会立即返回。 注册ACTION_BOND_STATE_CHANGED意图,以便在绑定完成得到通知及结果。
返回:如果绑定即将开始返回true

  • BluetoothSocket createInsecureRfcommSocketToServiceRecord (UUID uuid)
作用:创建BluetoothSocket连接对象,调用BluetoothSocket对象的connect()方法创建一个连接, 通过UUID执行对应信道的SDP查找动作,从而确定连接到哪一个通道上(不安全)

  • BluetoothSocket createRfcommSocketToServiceRecord (UUID uuid)
作用:创建BluetoothSocket连接对象,调用BluetoothSocket对象的connect()方法创建一个连接, 通过UUID执行对应信道的SDP查找动作,从而确定连接到哪一个通道上(安全)

  • boolean fetchUuidsWithSdp ()
作用:在远程设备上执行服务以获取支持的UUID。

  • String getAddress ()
作用:获取设备的蓝牙地址,地址为17位,都为大写字母

  • BluetoothClass getBluetoothClass ()
作用:获取远程设备的蓝牙类

  • int getBondState ()
 作用:获取远程设备的状态, 可能会是BOND_BONDED, BOND_BONDING, BOND_NONE

  • String getName ()
作用:获取远程设备的蓝牙名称

  • ParcelUuid[] getUuids ()
作用:返回远程设备支持的UUID。此方法从远程设备检索UUID不启动服务。 而是返回服务UUID的本地缓存。如果需要刷新UUID,使用fetchUuidsWithSdp()方法。

  • int getType ()
作用:获取远程设备的蓝牙设备类型。
返回值:DEVICE_TYPE_CLASSICDEVICE_TYPE_LE DEVICE_TYPE_DUALDEVICE_TYPE_UNKNOWN

  • boolean setPin (byte[] pin)
作用:当配对方法为PAIRING_VARIANT_PIN时,在配对期间设置PIN

  • boolean setPairingConfirmation (boolean confirm)
作用:确认PAIRING_VARIANT_PASSKEY_CONFIRMATION配对的密钥
2 0
原创粉丝点击