Genius 发表于 2016-7-7 16:24:19

Android SDK 2.0文档 6-SDK流程之设备发现和订阅部分

3.4.        设备发现和订阅部分3.4.1.        设备发现和订阅流程图https://gizwits.kf5.com/attachments/download/754814/00157626627dc8b1124ba2ff546138f/
3.4.2.        设备发现APP设置好监听,启动SDK后,就可以收到SDK的设备列表推送。每次局域网设备或者用户绑定设备发生变化时,SDK都会主动上报最新的设备列表。设备断电再上电、有新设备上线等都会触发设备列表发生变化。用户登录后,SDK会主动把用户已绑定的设备列表上报给APP,绑定设备在不同的手机上登录帐号都可获取到。
如果APP想要刷新绑定设备列表,可以调用绑定设备列表接口,同时可以指定自己关心的产品类型标识,SDK会把筛选后的设备列表返回给APP。
SDK提供设备列表缓存,设备列表中的设备对象在整个APP生命周期中一直有效。缓存的设备列表会与当前最新的已发现设备同步更新。
【示例代码】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// 使用缓存的设备列表刷新UI
List<GizWifiDevice> devices = GizWifiSDK.sharedInstance().getDeviceList();

// 接收设备列表变化上报,刷新UI
GizWifiSDKListener mListener = new GizWifiSDKListener() {
@Override
publicvoid didDiscovered(GizWifiErrorCode result, List<GizWifiDevice> deviceList) {
    // 提示错误原因
    if(result != GizWifiErrorCode.GIZ_SDK_SUCCESS) {
      Log.d("", "result: " + result.name());
    }
      // 显示变化后的设备列表
      Log.d("", "discovered deviceList: " + deviceList);
      devices = deviceList;
    }
};

// 主动刷新绑定设备列表、指定筛选的设备productKey
List<String> pks = new ArrayList<String> ();
pks.add("your_productKey");
GizWifiSDK.sharedInstance().getBoundDevices("your_uid", "your_token", pks);


3.4.3.        设置设备的**在设备列表中得到设备对象,为其设置设备**,以便于刷新设备UI。APP根据自己的需要实现相应的回调。
3.4.4.        设备订阅和绑定APP得到设备列表后,给设备设置监听后,可以订阅设备。已订阅的设备将被自动绑定和自动登录,设备登录成功后会主动上报最新状态。
自动绑定仅限于局域网设备。对于无法在局域网内发现的设备,APP可以通过手动绑定的方式完成绑定。绑定成功的设备,需要订阅后才能使用。
无论是手动绑定还是自动绑定,设备的remark和alias信息,都需要在设备绑定成功后再设置。 解除订阅的设备,连接会被断开,不能再继续下发控制指令了。
3.4.4.1.        设备订阅所有通过SDK得到的设备,都可以订阅,订阅结果通过回调返回。订阅成功的设备,要在其网络状态变为可控时才能查询状态和下发控制指令。
【示例代码】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// 以设备列表中的第一个设备实例为例,为其设置监听
GizWifiDevice mDevice = null;
for (int i = 0; i < deviceList.size(); i++) {
    mDevice = deviceList;
    mDevice.setListener(mListener);
    mDevice.setSubscribe(true);
    break;
}

GizWifiDeviceListener mListener = new GizWifiDeviceListener() {
    @Override
    publicvoid didSetSubscribe(GizWifiErrorCode result, GizWifiDevice device, boolean isSubscribed) {
      if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {
            // 订阅或解除订阅成功
      } else {
            // 失败
      }
    }
};


3.4.4.2.        非局域网设备绑定APP可以通过设备的mac、productKey、productSecret完成非局域网设备的绑定,可以用上述信息生成二维码,APP通过扫码方式绑定。GPRS设备、蓝牙设备等都是无法通过Wifi局域网发现的设备,都属于非局域网设备。
【示例代码】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
GizWifiSDK.sharedInstance().setListener(mListener);
GizWifiSDK.sharedInstance().bindRemoteDevice ("your_uid", "your_token", "your_device_mac", "your_device_product_key", "your_product_secret");

// 实现回调
GizWifiSDKListener mListener = new GizWifiSDKListener() {
    @Override
    public void didBindDevice(GizWifiErrorCode result, String did) {
      if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {
            // 绑定成功
      } else {
            // 绑定失败
      }
    }
};


3.4.4.3.        设置设备的绑定信息不订阅设备也可以设置设备的绑定信息。在设备列表中找到要修改的设备,如果是已绑定的,可以修改remark和alias信息。
【示例代码】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// mDevice是从设备列表中获取到的设备实体对象,设置监听
mDevice.setCustomInfo("your_remark", "your_alias");

// 实现回调
GizWifiDeviceListener mListener = new GizWifiDeviceListener() {
    @Override
    public void didSetCustomInfo(GizWifiErrorCode result, GizWifiDevice device) {
      if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {
            // 修改成功
      } else {
            // 修改失败
      }
    }
};


3.4.5.        设备解绑已绑定的设备可以解绑,解绑需要APP调用接口完成操作,SDK不支持自动解绑。对于已订阅的设备,解绑成功时会被解除订阅,同时断开设备连接,设备状态也不会再主动上报了。设备解绑后,APP刷新绑定设备列表时就得不到该设备了。
【示例代码】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
GizWifiSDK.sharedInstance().setListener(mListener);
GizWifiSDK.sharedInstance().unbindDevice("your_uid", "your_token", "your_device_did");

// 实现回调
GizWifiSDKListener mListener = new GizWifiSDKListener() {
    @Override
    public void didUnbindDevice(GizWifiErrorCode result, String did) {
      if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {
            // 解绑成功
      } else {
            // 解绑失败
      }
    }
};


3.4.6.        获取设备硬件信息不订阅设备也可以获取到硬件信息。APP可以获取模块协议版本号,mcu固件版本号等硬件信息,但是只能在小循环下才能获取。
【示例代码】


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// mDevice是从设备列表中获取到的设备实体对象,设置监听
mDevice.setListener(mListener);
mDevice.getHardwareInfo();

// 实现回调
GizWifiDeviceListener mListener = new GizWifiDeviceListener() {
    @Override
    publicvoid didGetHardwareInfo(GizWifiErrorCode result, GizWifiDevice device, ConcurrentHashMap<String, String> hardwareInfo) {
      StringBuilder sb = new StringBuilder();
      if(result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {
            sb.append("Wifi Hardware Version:" + hardwareInfo.get("wifiHardVersion")
                                    + "\r\n");
            sb.append("Wifi Software Version:" + hardwareInfo.get("wifiSoftVersion")
                                    + "\r\n");
            sb.append("MCU Hardware Version:" + hardwareInfo.get("mcuHardVersion")
                                    + "\r\n");
            sb.append("MCU Software Version:" + hardwareInfo.get("mcuSoftVersion")
                                    + "\r\n");
            sb.append("Firmware Id:" + hardwareInfo.get("wifiFirmwareId") + "\r\n");
            sb.append("Firmware Version:" + hardwareInfo.get("wifiFirmwareVer")
                                    + "\r\n");
            sb.append("Product Key:" + hardwareInfo.get("productKey") + "\r\n");
            sb.append("Device ID:" + device.getDid() + "\r\n");
            sb.append("Device IP:" + device.getIPAddress() + "\r\n");
            sb.append("Device MAC:" + device.getMacAddress() + "\r\n");

      }else{
            sb.append("获取失败,错误号:" + result);
      }

      Message msg = new Message();
      msg.what = HARDWARE;
      msg.obj = sb.toString();
      handler.sendMessage(msg);
    }
};



页: [1]
查看完整版本: Android SDK 2.0文档 6-SDK流程之设备发现和订阅部分