Android MideaSDK局域网扫描详解
2017年9月13日
准备工作
模式说明
SDK具备三种扫描模式:
- 低频扫描模式,每个广播发送周期在40s以上。
2.高频模式,每个广播发送周期为2s。
3.关闭模式,SDK不发送广播。
关联接口
- void startScanLanDevice(int time, MSmartDataCallback
- > callback);
启动广播扫描,注意正常情况下广播是一直在低频率的进行局域网设备发现,这个接口主要根据time参数的不同含义不同:
- time>0 SDK执行高频扫描time指定的时间,扫描完成后,返回这段时间内所有发现的设备(去重)并且恢复到低频模式(如果没有其它高频任务),SDK会做缓存。
- time=0 SDK立即启动扫描,但是不会回调任何数据,也就是callback无效。
3.time=-1 SDK一直保持高频扫描,直到再次调用这个接口且time不是-1,不会回调任何数据,callback无效。
4.time=-2 SDK完全关闭广播扫描,直到再次调用这个接口且tiem不是-2,不会回调任何数据,callback无效。
- time=0 SDK立即启动扫描,但是不会回调任何数据,也就是callback无效。
注意: 启动配网或者添加局域网都会打破上述第4条规则,配网结束后,SDK会恢复低频模式。
- void registerDeviceScanListener(MSmartDeviceScanListener listener);
监听设备扫描结果。这个接口实时监听设备扫描结果,一点有设备发现立刻上报,SDK不做任何缓存处理。可以配合startScanLanDevice使用,快速发现UI需要的具体某个设备。
- void removeDeviceScanListener(MSmartDeviceScanListener listener);
移除设备扫描结果监听。
接口具体定义及参数定义请参照API文档 MSmartUserDeviceManager中的定义
场景
对于上层UI用户来讲,扫描局域网设备可能有三种可能性:
- 返回一段时间内扫描的所有设备,例如:让SDK扫描20s后返回所有扫描到的设备列表。
- 有设备发现立刻上报。
- 完全停止扫描。
特殊场景
- 用户希望快速扫描并自己缓存设备列表:
用户自己做定时扫描,通过每次调用startScanLanDevice并将time参数设定为0,然后通过registerDeviceScanListener监听设备扫描上报,从而实现用户定制需求。也可以将time设定为-1,任务完成后再调用一次startScanLanDevice并将time参数设定为0。
广播影响
目前设备的局域网上线需要依靠广播,如果关注局域网上线速度,就不能关不局域网广播。
SDK优化
目前AndroidSDK 已经做了一些优化包括:
- APP退到后台SDK会自动关闭广播。
- APP进入前台SDK会立即高频执行4s设备扫描,随后进入低频模式。