Skip to content

FastBle操作说明

Lijian edited this page Jan 1, 2019 · 3 revisions

订阅通知notify

`void notify(BleDevice bleDevice,
                   String uuid_service,
                   String uuid_notify,
                   BleNotifyCallback callback)`
`void notify(BleDevice bleDevice,
                   String uuid_service,
                   String uuid_notify,
                   boolean useCharacteristicDescriptor,
                   BleNotifyCallback callback)`

                    
    BleManager.getInstance().notify(
            bleDevice,
            uuid_service,
            uuid_characteristic_notify,
            new BleNotifyCallback() {
                @Override
                public void onNotifySuccess() {
                    // 打开通知操作成功
                }

                @Override
                public void onNotifyFailure(BleException exception) {
                    // 打开通知操作失败
                }

                @Override
                public void onCharacteristicChanged(byte[] data) {
                    // 打开通知后,设备发过来的数据将在这里出现
                }
            });

取消订阅通知notify,并移除数据接收的回调监听

`boolean stopNotify(BleDevice bleDevice,
                          String uuid_service,
                          String uuid_notify)`
`boolean stopNotify(BleDevice bleDevice,
                          String uuid_service,
                          String uuid_notify,
                          boolean useCharacteristicDescriptor)`

	BleManager.getInstance().stopNotify(uuid_service, uuid_characteristic_notify);

订阅通知indicate

`void indicate(BleDevice bleDevice,
                     String uuid_service,
                     String uuid_indicate,
                     BleIndicateCallback callback)`
`void indicate(BleDevice bleDevice,
                     String uuid_service,
                     String uuid_indicate,
                     boolean useCharacteristicDescriptor,
                     BleIndicateCallback callback)`

    BleManager.getInstance().indicate(
            bleDevice,
            uuid_service,
            uuid_characteristic_indicate,
            new BleIndicateCallback() {
                @Override
                public void onIndicateSuccess() {
                    // 打开通知操作成功
                }

                @Override
                public void onIndicateFailure(BleException exception) {
                    // 打开通知操作失败
                }

                @Override
                public void onCharacteristicChanged(byte[] data) {
                    // 打开通知后,设备发过来的数据将在这里出现
                }
            });

取消订阅通知indicate,并移除数据接收的回调监听

`boolean stopIndicate(BleDevice bleDevice,
                            String uuid_service,
                            String uuid_indicate)`
`boolean stopIndicate(BleDevice bleDevice,
                            String uuid_service,
                            String uuid_indicate,
                            boolean useCharacteristicDescriptor)`

	BleManager.getInstance().stopIndicate(uuid_service, uuid_characteristic_indicate);

`void write(BleDevice bleDevice,
                  String uuid_service,
                  String uuid_write,
                  byte[] data,
                  BleWriteCallback callback)`
`void write(BleDevice bleDevice,
                  String uuid_service,
                  String uuid_write,
                  byte[] data,
                  boolean split,
                  BleWriteCallback callback)`
`void write(BleDevice bleDevice,
                  String uuid_service,
                  String uuid_write,
                  byte[] data,
                  boolean split,
                  boolean sendNextWhenLastSuccess,
                  long intervalBetweenTwoPackage,
                  BleWriteCallback callback)`

    BleManager.getInstance().write(
            bleDevice,
            uuid_service,
            uuid_characteristic_write,
            data,
            new BleWriteCallback() {
                @Override
                public void onWriteSuccess(int current, int total, byte[] justWrite) {
                    // 发送数据到设备成功
                }

                @Override
                public void onWriteFailure(BleException exception) {
                    // 发送数据到设备失败
                }
            });

Tips:
- 在没有扩大MTU及扩大MTU无效的情况下,当遇到超过20字节的长数据需要发送的时候,需要进行分包。参数`boolean split`表示是否使用分包发送;无`boolean split`参数的`write`方法默认对超过20字节的数据进行分包发送。
- 关于`onWriteSuccess`回调方法: `current`表示当前发送第几包数据,`total`表示本次总共多少包数据,`justWrite`表示刚刚发送成功的数据包。
- 对于分包发送的辅助策略,可以选择发送上一包数据成功之后发送下一包,或直接发送下一包,参数`sendNextWhenLastSuccess`表示是否待收到`onWriteSuccess`之后再进行下一包的发送。默认true。
- 参数`intervalBetweenTwoPackage`表示延时多长时间发送下一包,单位ms,默认0。

`void read(BleDevice bleDevice,
                 String uuid_service,
                 String uuid_read,
                 BleReadCallback callback)`

    BleManager.getInstance().read(
            bleDevice,
            uuid_service,
            uuid_characteristic_read,
            new BleReadCallback() {
                @Override
                public void onReadSuccess(byte[] data) {
                    // 读特征值数据成功
                }

                @Override
                public void onReadFailure(BleException exception) {
                    // 读特征值数据失败
                }
            });
  • 获取设备的信号强度Rssi

    void readRssi(BleDevice bleDevice, BleRssiCallback callback)

      BleManager.getInstance().readRssi(
              bleDevice,
              new BleRssiCallback() {
    
                  @Override
                  public void onRssiFailure(BleException exception) {
                      // 读取设备的信号强度失败
                  }
    
                  @Override
                  public void onRssiSuccess(int rssi) {
                      // 读取设备的信号强度成功
                  }
              });
    

    Tips:

    • 获取设备的信号强度,需要在设备连接之后进行。
    • 某些设备可能无法读取Rssi,不会回调onRssiSuccess(),而会因为超时而回调onRssiFailure()。
  • 设置最大传输单元MTU

    void setMtu(BleDevice bleDevice, int mtu, BleMtuChangedCallback callback)

      BleManager.getInstance().setMtu(bleDevice, mtu, new BleMtuChangedCallback() {
          @Override
          public void onSetMTUFailure(BleException exception) {
              // 设置MTU失败
          }
    
          @Override
          public void onMtuChanged(int mtu) {
              // 设置MTU成功,并获得当前设备传输支持的MTU值
          }
      });
    

    Tips:

    • 设置MTU,需要在设备连接之后进行操作。
    • 默认每一个BLE设备都必须支持的MTU为23。
    • MTU为23,表示最多可以发送20个字节的数据。
    • 在Android 低版本(API-17 到 API-20)上,没有这个限制。所以只有在API21以上的设备,才会有拓展MTU这个需求。
    • 该方法的参数mtu,最小设置为23,最大设置为512。
    • 并不是每台设备都支持拓展MTU,需要通讯双方都支持才行,也就是说,需要设备硬件也支持拓展MTU该方法才会起效果。调用该方法后,可以通过onMtuChanged(int mtu)查看最终设置完后,设备的最大传输单元被拓展到多少。如果设备不支持,可能无论设置多少,最终的mtu还是23。
  • requestConnectionPriority

    boolean requestConnectionPriority(BleDevice bleDevice,int connectionPriority)

    Tips:

    • 设置连接的优先级,一般用于高速传输大量数据的时候可以进行设置。 Must be one of{@link BluetoothGatt#CONNECTION_PRIORITY_BALANCED}, {@link BluetoothGatt#CONNECTION_PRIORITY_HIGH} or {@link BluetoothGatt#CONNECTION_PRIORITY_LOW_POWER}.
  • 断开某个设备

    void disconnect(BleDevice bleDevice)

      BleManager.getInstance().disconnect(bleDevice);
    
  • 断开所有设备

    void disconnectAllDevice()

      BleManager.getInstance().disconnectAllDevice();
    
  • 退出使用,清理资源

    void destroy()

      BleManager.getInstance().destroy();