BLE蓝牙开发快速流程

#BLE蓝牙开发思路

BLE(即低功耗蓝牙)使用的是GATT协议,协议主要是由特征值characterister提供数据传输的。GATT由很多服务service组成,每个service又包含多个特征值characteristic,比如你读取手环中的心率就是从特定服务service中的特定characteristic中读取的,相应的向手环发送信息也是在相应的特征值中写入数据。所以只要能获取到各个数据类型的characteristic的唯一UUID,就可以获取到外围设备的各类数据

接下来基于android5.0系统进行开发流程的介绍:

下面基于5.0系统的API开发
1.声明需要的权限
<uses-permission android:name="android.permission.BLUETOOTH"/> 使用蓝牙所需要的权限
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/> 使用扫描和设置蓝牙的权限(申明这一个权限必须申明上面一个权限)
<uses-featurandroid:name="android.hardware.location.gps/> 5.0以后系统使用蓝牙必须开启GPS定位权限

2. 初始化蓝牙设备
2.1 获取BluetoothAdapter
 private BluetoothAdapter mBluetoothAdapter;
 final BluetoothManager bluetoothManager = (BluetoothManager);                             getSystemService(Context.BLUETOOTH_SERVICE);
 mBluetoothAdapter = bluetoothManager.getAdapter();
 2.2 开启蓝牙
     if (mBluetoothAdapter == null || !mBluetoothAdapter.isEnabled()) {
        Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
        startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
       }

3. 扫描蓝牙设备
     final BluetoothAdapter.LeScanCallback callback = new BluetoothAdapter.LeScanCallback() { 
      @Override public void onLeScan(final BluetoothDevice device, int rssi, byte[] scanRecord) {
              bluetoothDeviceArrayList.add(device); 
              Log.d(TAG, "run: scanning..."); 
            } 
       };
mBluetoothAdapter.startLeScan(callback);//开启蓝牙代码
   开启蓝牙,扫描到设备后会返回设备的BluetoothDevice,在扫描之后的回调函数中要进行处理。
   停止扫描:
     void stopLeScan(BluetoothAdapter.LeScanCallback callback)
传入的回调必须是开启蓝牙扫描时传入的回调。

4. 连接蓝牙设备
4.1 首先获取BluetoothDevice
final BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address);
通过BluetoothDevice类的ConnectGatt连接
mBluetoothGatt = device.connectGatt(this, false, Callback);#mBluetoothGatt为BluetoothGatt类型
然后:
mBluetoothGatt.connect();
蓝牙会异步执行蓝牙连接的操作,连接成功回调BluetoothGattCalback类的onConnectionStateChange方法。


5.发现设备
   需要等成功连接到蓝牙设备后
   调用BluetoothGatt#discoverService方法,系统异步执行发现服务的过程。

6.读取与写入数据   
    发现服务后BluetoothGatt#getService获取BluetoothGattService,
    再BluetoothGattService#getCharactristic得到BluetoothGattCharactristic.
6.1 读取数据    
     BluetoothGattCharactristic#readCharacteristic读取特定的数据。
     系统读取数据后回调,在BluetoothGattCallback#onCharacteristicRead()方法中调用BluetoothGattCharacteristic#getValue方法读取数据。
6.2 写入数据
     BluetoothGattCharactristic#setValue传入写入的数据。
     BluetoothGattCharactristic#writeCharacteristic方法异步往设备写入数据
     在回调函数BluetoothGattCallback#onCharacteristicWrite中可以执行getValue检查写入的数据
6.3 注册监听实现实时读取蓝牙设备的数据
     mBluetoothGatt.setCharacteristicNotification(characteristic, enabled); 
      BluetoothGattDescriptor descriptor = characteristic.getDescriptor(
       UUID.fromString(SampleGattAttributes.CLIENT_CHARACTERISTIC_CONFIG));       
       descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
       mBluetoothGatt.writeDescriptor(descriptor);

断开连接
  BluetoothGatt#disconnect断开正在连接的设备
   BluetoothGatt#close方法释放资源


猜你喜欢

转载自blog.csdn.net/qq_27150893/article/details/79231377