设备发现
更新时间:2019-04-03 13:43:17
在WiFi进行配网的时候需要进行设备发现,同样在对WiFi或者以太网设备进行绑定的时候,也需要发现设备的ProductKey和DeviceName。SDK提供了接口用于发现待配网设备或者待绑定设备:
安卓系统
启动设备发现
通过调用LocalDeviceMgr的startDiscovery可以发现局域网内的设备,代码如下所示:
// 开始发现设备
// enumSet 是需要使用的方显方式 EnumSet<DiscoveryType> 
// 第三个参数是获取 零配或智能路由器发现的待配设备 请求时需要携带的参数
LocalDeviceMgr.getInstance().startDiscovery(context, enumSet, null, new IDeviceDiscoveryListener() {
    @Override
    public void onDeviceFound(DiscoveryType discoveryType, List<DeviceInfo> list) {
        // 发现的设备
        // LOCAL_ONLINE_DEVICE 当前和手机在同一局域网已配网在线的设备
        // CLOUD_ENROLLEE_DEVICE 零配或智能路由器发现的待配设备
        // BLE_ENROLLEE_DEVICE 发现的是蓝牙设备,需要根据设备的productId查询设备是否是wifi+蓝牙双模设备
        // SOFT_AP_DEVICE 发现的设备热点
    }
});
注:
- 只需要关心发现的LOCAL_ONLINE_DEVICE类型的设备
停止设备发现
停止发现本地已配和线上待配设备,调用该接口会清除已发现设备列表,确保与 startDiscovery 成对调用。
// 停止设备发现
LocalDeviceMgr.getInstance().stopDiscovery();
iOS系统
启动设备发现
// 引入头文件
#import <IMSDeviceCenter/IMLDeviceCenter.h>
// 本地发现入口
[[IMLLocalDeviceMgr sharedMgr] startDiscovery:^(NSArray *devices, NSError *err) {
        if (devices && [devices count] > 0) {
            IMSLifeLogVerbose(@"发现本地设备: %@", devices);
            // 将与用户没有绑定关系的设备显示在本地发现设备中
            for (IMLCandDeviceModel *device in devices) {
                if (![self checkBindWithLocalDevice:device]) {
                    [wSelf.localDeviceList addObject:device];
                }
            }
            [wSelf.tableView reloadData];
        } else if (err) {
            IMSLifeLogError(@"本地发现设备出错: %@", err);
        }
    }];
停止设备发现
停止发现本地已配和线上待配设备,调用该接口会清除已发现设备列表,确保和startDiscovery成对调用。
// 引入头文件
#import <IMSDeviceCenter/IMLDeviceCenter.h>
// 停止发现设备
[kLKLocalDeviceMgr stopDiscovery];