1.开发前准备

1.1 引入ZGLedSdk-release.aar

将提供的ZGLedSdk-release.aar拖入工程根目录的libs文件夹即可(若没有请自行创建)

1.1.1

并在项目module模块(该实例则是ZGSdkDemo module)下的build.gradle文件的dependencies代码块里,添加如下代码

 implementation fileTree(dir: 'libs',includes: ['*.aar','*.jar'])

并引入如下库

  implementation 'org.fusesource.mqtt-client:mqtt-client:1.16'
  implementation 'com.google.code.gson:gson:2.8.6'
  implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.0'
  api 'io.reactivex.rxjava3:rxandroid:3.0.0'
  api 'io.reactivex.rxjava3:rxjava:3.0.1'

1.2 申请权限

在项目AndroidManifest.xml文件加入相关权限

  <uses-permission android:name="android.permission.BLUETOOTH" />
  <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
  <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  <uses-permission android:name="android.permission.INTERNET" />

2.设备配网

2.1 动态权限申请

在Android6.0上使用蓝牙扫描功能需先动态申请android.permission.ACCESS_FINE_LOCATION,android.permission.ACCESS_COARSE_LOCATION权限,请上网查阅或参考demo代码

2.2 搜索所有可配网设备

2.2.1 声明ZGHBDeviceProvisionHandler和ZGHBDeviceHadler类,并添加到DisBroad类(注:需准备一个唯一全局类存放DisBroad类以供后续调用)

DisBoard disBoard;
disBoard=new DisBoard();
List<String> macList=new ArrayList<>();
ZGHBDeviceHandler zghbDeviceHandler=new ZGHBDeviceHandler(macList,this);
ZGHBDeviceProvisionHandler zghbDeviceProvisionHandler=new ZGHBDeviceProvisionHandler(macList);
disBoard.addHandler(zghbDeviceHandler,zghbDeviceProvisionHandler);

2.2.2 启动配网

ZGHBDeviceProvisionHandler provisionHandler=disBoard.summon(ZGHBDeviceProvisionHandler.class)
provisionHandler.addEvent(this)//添加搜索设备回调
provisionHandler.addLifecycleEvent(this,this);
provisionHandler.start(5000, unused -> {
     Toast.makeText(BleMainActivity.this, "scan Time out", Toast.LENGTH_SHORT).show();
});
disBoard.start(this,Throwable::printStackTrace);

2.2.3 搜索设备回调

List<String> deviceMacList=new ArrayList<>();

@Subscribe(threadMode = ThreadMode.MAIN)
public void onDeviceUpdate(BaseDevice device) {
  if (device==null||device.getMacAddress().isEmpty())
    return;
  Log.i(TAG, "onDeviceUpdate: "+device.toString());
  if (!deviceMacList.contains(device)){
    deviceMacList.add(device.getMacAddress());
    DisBoard disBoard=disBoardWeakReference.get();
    if (disBoard!=null){
      executor.execute(new Runnable() {
        @Override
        public void run() {
          ZGHBDeviceHandler deviceHandler=disBoard.summon(ZGHBDeviceHandler.class);
          if (deviceHandler!=null){
            deviceHandler.updateMacList(deviceMacList);//配网成功添加到ZGHBDebviceHandler,则ZGHBDebviceHandler才会把搜到的设备传递给上层处理
          }
          ZGHBDeviceProvisionHandler provisionHandler=disBoard.summon(ZGHBDeviceProvisionHandler.class);
          if (provisionHandler!=null){
            provisionHandler.updateMacList(deviceMacList);//配网成功添加到ZGHBDeviceProvisionHandler,则ZGHBDeviceProvisionHandler跳过对已配网设备处理
          }
        }
      });

    }
  }       
}

3.设备控制

3.1 搜索所有可控制设备

3.1.1 ZGHBDeviceHadler添加监听回调

ZGHBDeviceHandler zghbDeviceHandler=App.getCurrent().disBoard.summon(ZGHBDeviceHandler.class);
zghbDeviceHandler.addEvent(this);

3.1.2 监听回调

@Subscribe(threadMode = ThreadMode.MAIN)
public void onDeviceUpdate(BaseDevice device) {
  if (device==null)
    return;
  Log.i(TAG, "onDeviceUpdate: "+device.toString());
  //Do what you want to do
}

3.2 发送控制指令

3.2.1 发送写命令(不需要返回结果)

disBoard.summon(ZGHBDeviceHandler.class).write(zghbDevice.getMacAddress(), (byte) 0x0b,commandData)
  .subscribe(new Observer<Boolean>() {
    @Override
    public void onSubscribe(@io.reactivex.rxjava3.annotations.NonNull Disposable d) {

    }

    @Override
    public void onNext(@io.reactivex.rxjava3.annotations.NonNull Boolean aBoolean) {
      if (!aBoolean){
        Toast.makeText(BleMainActivity.this, "send failed.", Toast.LENGTH_SHORT).show();
      }else{
        //write success
      }
    }

    @Override
    public void onError(@io.reactivex.rxjava3.annotations.NonNull Throwable e) {
      Toast.makeText(BleMainActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onComplete() {

    }
  });

3.2.2 发送请求命令(需要返回结果)

disBoard.summon(ZGHBDeviceHandler.class)
  .request(zghbDevice.getMacAddress(),(byte) 0x07,(byte) 0x07,new byte[]{})
  .subscribe(new Observer<byte[]>() {
    @Override
    public void onSubscribe(@io.reactivex.rxjava3.annotations.NonNull Disposable d) {

    }

    @Override
    public void onNext(byte @io.reactivex.rxjava3.annotations.NonNull [] bytes) {
      if (bytes.length == 0) {
        Toast.makeText(BleMainActivity.this, "byte:null", Toast.LENGTH_SHORT).show();
      } else {
        //Do what you want to do
      }
    }

    @Override
    public void onError(@io.reactivex.rxjava3.annotations.NonNull Throwable e) {

    }

    @Override
    public void onComplete() {

    }
  });

4.相关协议

results matching ""

    No results matching ""