如何为Android系统使用配网SDK
科技产品更新教程:如何在线升级Android系统 #生活技巧# #数码产品使用技巧# #科技资讯学习#
本章节提供了把WiFi设备配置上家庭路由器以及局域网内已联网设备的发现能力,具体方案包括一键广播配网(P2P)、手机热点配网、蓝牙辅助配网、智能路由器配网、设备间相互配网以及蓝牙Mesh配网等。
依赖SDK概述依赖SDK概述API 通道提供云端API通道能力,需要完成该SDK的初始化。身份认证提供云端API通道身份认证(需要零配发现能力的时候需要该依赖)。Breeze-biz SDK提供蓝牙辅助配网支持,依赖breeze-biz SDK。SDK依赖
Maven仓库地址// 阿里云仓库地址,包括了IOT事业部开发的SDK maven { url "http://maven.aliyun.com/nexus/content/repositories/releases/" } Gradle依赖
compile ('com.aliyun.alink.linksdk:ilop-devicecenter:1.6.7.1'){ transitive = true } // 如果需要蓝牙辅助配网能力,请加上如下依赖;不需要蓝牙辅助配网能力,则不需要加下面这个依赖; // compile ('com.aliyun.alink.linksdk:breeze-biz:1.1.4')
设备发现
配网SDK提供了局域网内发现已配网的设备,包括 WiFi 设备以及以太网设备,以及局域网内已上电的待配设备(前提是当前局域网内已经有一个已配好网的智能设备,且该设备具有发现待配网设备的能力)的能力。
设备发现相关API,请参见LocalDeviceMgr。
启动设备发现。发现本地的已配网设备、零配、路由器发现的待配设备,或者符合adh_{pk}_{mac}格式的设备热点设备。发现的待配设备信息可以作为后续设备配网的入参信息。如果您需要对已发现且已配网设备做过滤(如过滤已绑定的设备,不支持的设备等),请参见本地发现设备列表信息过滤。
// 开始发现设备 // 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 发现的是蓝牙Wi-Fi双模设备(蓝牙模块广播的subType=2即为双模设备) // SOFT_AP_DEVICE 发现的设备热点 // BEACON_DEVICE 一键配网发现的待配设备 // APP_FOUND_BLE_MESH_DEVICE 本地蓝牙Mesh发现的待配网设备 // 注意:发现蓝牙设备需添加 breeze-biz SDK依赖 } }); 停止发现设备。
停止发现本地已配和线上待配设备,调用该接口会清除已发现设备列表,确保与startDiscovery成对调用。
// 停止设备发现 LocalDeviceMgr.getInstance().stopDiscovery();
设备配网
配网设备可以是本地发现的待配设备,也可以是通过扫码等其他途径获取的待配设备。更多配网方式请参见Android App Native开发配网。设备配置添加相关API说明,请参见AddDeviceBiz。
设置待配网设备信息DeviceInfo deviceInfo = new DeviceInfo(); deviceInfo.productKey = "xx"; // 商家后台注册的 productKey,不可为空 deviceInfo.deviceName = "xxx";// 设备名, 可为空 deviceInfo.productId = "xxx";// 产品 ID, 蓝牙辅助配网必须 deviceInfo.id= "xxx";// 设备热点的id,在发现热点设备返回到APP的时候会带这个字段 // 设备热点配网 ForceAliLinkTypeSoftAP 蓝牙辅助配网 ForceAliLinkTypeBLE // 二维码配网 ForceAliLinkTypeQR 手机热点配网 ForceAliLinkTypePhoneAP // 一键配网 ForceAliLinkTypeBroadcast 零配 ForceAliLinkTypeZeroAP deviceInfo.linkType = "ForceAliLinkTypeNone"; // 默认一键配网 //设置待添加设备的基本信息 AddDeviceBiz.getInstance().setDevice(DeviceInfo deviceinfo);
配网时,指定的配网方式 linkType,请参见LinkType。
设备信息相关实体类,请参见DeviceInfo。
开始设备配网上述设置好待添加设备信息,进入配网。调用startAddDevice接口进入配网流程。如果出现获取在某些高版本手机无法获取WiFi SSID,需要申请位置权限,并打开GPS。
如使用手机热点方式配网,linkType= "ForceAliLinkTypePhoneAP",需要用户确保应用已具备了WRITE_SETTINGS权限,该权限需要APP动态申请。设备热点配网必须要位置权限和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 public void onProvisionStatus(ProvisionStatus provisionStatus) { // 二维码配网会走到这里 provisionStatus=ProvisionStatus.QR_PROVISION_READY表示二维码ready了 // ProvisionStatus.QR_PROVISION_READY.message() 获取二维码内容 // 注意:返回二维码时已开启监听设备是否已配网成功的通告,并开始计时,UI端应提示用户尽快扫码; // 如果在指定时间配网超时了,重新调用开始配网流程并刷新二维码; } @Override public void onProvisionedResult(boolean b, DeviceInfo deviceInfo, DCErrorCode errorCode) { // 配网结果 如果配网成功之后包含token,请使用配网成功带的token做绑定 } });
配网回调接口,请参见IAddDeviceListener。
输入账号密码在收到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); 停止配网
// 停止配网 AddDeviceBiz.getInstance().stopAddDevice(); 设置配网模式
String linkType = "ForceAliLinkTypeBroadcast"; // 设置配网模式 AddDeviceBiz.getInstance().setAliProvisionMode(linkType);
混淆配置
-keep public class com.aliyun.alink.business.devicecenter.** {*;} -keep public class com.aliyun.alink.linksdk.alcs.coap.**{*;}
获取设备绑定Token
设备绑定的时候除了需要productKey、deviceName,还需要一个设备端的 token,该接口提供从设备端获取绑定 token 的功能。WiFi 设备或者以太网设备均可以使用该接口获取绑定需要的 Token。以太网设备需要先获取到设备的 productKey、deviceName,可以参考使用startDiscovery接口去获取。
// 获取设备绑定 token LocalDeviceMgr.getInstance().getDeviceToken(context, productKey, deviceName, 60*1000, 5*1000, new IOnDeviceTokenGetListener() { @Override public void onSuccess(String token) { // TODO bind } @Override public void onFail(String reason) { } });
在插件中使用配网能力
如果需要在插件中使用配网能力,需要向BoneMobile容器中注册配网API,请在插件加载前,调用如下注册代码:
BonePluginRegistry.register("BoneAddDeviceBiz",BoneAddDeviceBiz.class); BonePluginRegistry.register("BoneLocalDeviceMgr",BoneLocalDeviceMgr.class); BonePluginRegistry.register("BoneHotspotHelper",BoneHotspotHelper.class);
网址:如何为Android系统使用配网SDK https://www.yuejiaxmz.com/news/view/378639
相关内容
如何自建Android账号体系和使用用户SDK如何使用Android的API通道SDK
如何使用Android的移动应用推送SDK
如何下载并集成SDK
cordova报错:ANDROID
如何开发批量配网功能
如何获取生活物联网平台SDK
如何使用蓝牙设备端SDK用户编程接口
(开题报告)基于Android的日程表管理系统设计与实现
如何使用已适配IoT SDK的芯片开发智能灯