如何使用android原生BLE蓝牙进行操作?

一.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的使用

你可能感兴趣的:(如何使用android原生BLE蓝牙进行操作?)