安卓配网开发
更新时间:2019-04-03 10:07:26
依赖关系
配网SDK依赖以下SDK,在使用配网SDK前务必对相关SDK进行初始化。
依赖SDK | 概述 |
---|---|
API 通道 | 提供云端 API 通道能力 |
身份认证 | 提供云端 API 通道身份认证 |
Breeze SDK | 提供蓝牙辅助配网支持 |
设备发现
在前面的章节中讲解了指定待配网设备的几种方案,本节讲解如何通过SDK的接口发现待配网设备。
注:只有某些配网方案可以让手机APP发现待配网设备。
// 开始发现设备
// 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发现的设备是已经连接到WiFi热点的WiFI设备、或者以太网设备,手机APP需要从云端获取产品网络类型进行确认,然后决定是否将发现的设备显示给用户选择
已经连接到WiFI热点的WiFi设备不需要再次发起配网,直接调用绑定过程即可
停止发现设备
停止发现本地已配和线上待配设备,调用该接口会清除已发现设备列表,确保与 startDiscovery 成对调用。
// 停止设备发现
LocalDeviceMgr.getInstance().stopDiscovery();
设备配网
关于设备配置添加相关 API 说明: AddDeviceBiz。
设置待配网设备信息
当确定对某个型号的设备或者某个具体设备进行配网后,需要设置相关信息,如下示例所示:
DeviceInfo deviceInfo = new DeviceInfo();
deviceInfo.productKey = "xx"; // 商家后台注册的 productKey,不可为空
deviceInfo.deviceName = "xxx";// 设备名, 可为空
deviceInfo.productId = "xxx";// 产品 ID, 蓝牙辅助配网必须
deviceInfo.id= "xxx";// 设备热点的id,在发现热点设备返回到APP的时候会带这个字段,设备热点必须
// 设备热点配网 ForceAliLinkTypeSoftAP 蓝牙辅助配网 ForceAliLinkTypeBLE
deviceInfo.linkType = "ForceAliLinkTypeNone"; // 默认一键配网
//设置待添加设备的基本信息
AddDeviceBiz.getInstance().setDevice(DeviceInfo deviceinfo);
配网时,开发者还可以指定配网方案,配网方案类型的定义请参见 LinkType。
String linkType = "ForceAliLinkTypeBroadcast";
// 设置配网模式
AddDeviceBiz.getInstance().setAliProvisionMode(linkType);
设备信息相关实体类,请参见 DeviceInfo。
开始设备配网
设置好待添加设备信息后,进入配网。调用 startAddDevice 接口进入配网流程。如使用手机热点方式配网, linkType= "ForceAliLinkTypePhoneAP", 需要用户确保应用已具备了 WRITE_SETTINGS 权限,该权限需要 APP 动态申请。设备热点方式,需要申请位置权限。如果出现获取在某些高版本手机无法获取 WiFi SSID,需要申请位置权限,并打开 GPS。
// 开始添加设备
AddDeviceBiz.getInstance().startAddDevice(context, new IAddDeviceListener(){
@Override
public void onPreCheck(boolean b, DCErrorCode dcErrorCode) {
// 参数检测回调
}
@Override
public void onProvisionPrepare(int prepareType) {
// 热点配网、一键配网、蓝牙辅助配网会走到该流程,零配和智能路由器配网不会走到该流程
// prepareType = 1提示用户输入账号密码
// prepareType = 2提示用户手动开启指定热点 aha 12345678
// 执行完上述操作之后,调用toggleProvision接口继续执行配网流程
}
@Override
public void onProvisioning() {
// 配网中
}
@Override
@Deprecated
public void onProvisionStatus(ProvisionStatus provisionStatus) {
}
@Override
public void onProvisionedResult(boolean b, DeviceInfo deviceInfo, DCErrorCode dcErrorCode) {
// 配网结果
}
});
在配网的过程中,在不同的状态下会调用相关的回调通知开发者状态的变化,配网回调接口的说明请参见IAddDeviceListener。
onProvisionPrepare 回调
在收到 onProvisionPrepare 回调后,引导用户输入 ssid 和 password ,并调用此方法传入 ssid、password、timeout 信息启动配网。 只有热点配网、一键配网、蓝牙辅助配网场景下,才会触发 onProvisionPrepare 回调。如果出现部分手机一直无法获取到 SSID,可以打开 GPS 再获取 SSID(部分手机需要开启 GPS 才能获取到)。
String ssid = "ssid";// 热点配网的时候注意 要先获取ssid,然后再开启热点,否则无法正确获取到SSID
String ssid = "xxxxxxxx";
int timeout = 60;//单位秒 目前最短只能设置60S
AddDeviceBiz.getInstance().toggleProvision(ssid, password, timeout);
恢复手机 WiFi 连接
收到设备端返回的切换 WiFi 的成功回调之后调用恢复 WiFi 的接口,适用于于手机热点方案。
// 关闭热点 恢复 WiFi 连接
HotspotHelper.getInstance().recoverWiFiConnect(context);
恢复手机 WiFi 连接之后,直接调用 startAddDevice 接口进入设备配网监听,并在 onProvisionedResult 回调结果中接收是否配网成功的回调。
停止配网
如果配网过程中需要停止配网,可以调用stopAddDevice():
// 停止配网
AddDeviceBiz.getInstance().stopAddDevice();