一.BLE蓝牙简介
之前的涉及的物联网项目中使用的: BLE 低功耗蓝牙(蓝牙4.0), 支持android 4.3以上的手机
主从关系: BLE低功耗蓝牙只能做从端设备 ,一个蓝牙主端设备,可同时与7个蓝牙从端设备进行通讯
二.好处: 为什么用低功耗蓝牙 ?
1)低功耗
低功耗的原理:
1\低功耗蓝牙仅使用了3个广播通道,传统蓝牙技术采用 16~32 个频道
2\每次广播开启时间也由传统的 22.5ms 减少到 0.6~1.2ms(毫秒)
2)传输距离极大提高
传统蓝牙传输距离为 2~10m,而蓝牙4.0的有效传输距离可达到 60~100m
3)安全性
使用AES-128 CCM加密算法进行数据包加密和认证。
更多BLE蓝牙的解析参考博客 : BLE4.0教程一 蓝牙协议连接过程与广播分析
三.原生蓝牙的使用流程
1)准备工作
添加权限
打开蓝牙
1.先拿到BluetoothManager bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
2.再拿到BluetoothAdapter bluetoothAdapter = bluetoothManager.getAdapter();
判断是否打开蓝牙
未打开弹出 系统弹框 ,除了 魅族手机 是打开系统设置
if (mBluetoothAdapter == null || !mBluetoothAdapter.isEnabled()) {
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
}
2)扫描
设备/手机都是蓝牙信号
bluetoothAdapter .startLeScan( BluetoothAdapter.LeScanCallback);
在回调方法中:
public void onLeScan(BluetoothDevice device广播里的设备信息, int rssi信号量, byte[] scanRecord 广播里面的信息) {…..}
一般在扫描的过程中,我们还会设置 设备过滤原则(因为我只想要搜索到我们想要的设备,忽略无关设备)
如:从 scanRecord -- beacon -- beacon.type == 0xFF代表Manufacture,通过与嵌入式软件定义 自己的 Manufacture值即可
2)连接
用BluetoothDevice得到BluetoothGatt:
BluetoothGatt gatt = device.connectGatt(this, true, gattCallback);
断连:
gatt.disconnect();(断开连接后务必记得gatt.close();)
关键问题:连接后一般要做什么事?
1.认证 设备双方都清楚对方的身份
( 必须在刚连接成功后2秒内app写一个值给设备,否则会被设备断开连接)
2.启动各种必要的通知 writeDescriptor +Notify
四.主要操作
1.Write 写
主要是读写 characteristic
gatt.wirteCharacteristic(mCurrentcharacteristic);
2.Read 读
gatt.readCharacteristic(characteristic);
3.Notify 打开通知,设备上报给我
bluetoothGatt.setCharacteristicNotification(data, true);
真实工作中使用的蓝牙库BlueToothKit请参考我的另一篇博客:
android蓝牙入门知识和优秀蓝牙第三方库BluetoothKit的使用
网友评论