# 萤石云开放平台Android SDK使用说明
简介
本文档用于说明萤石开放平台SDK Android版本接口之间的关系以及接口调用顺序,对开放平台SDK Android版本各接口都有详细的说明。
名词解释
名词 | 释义 |
---|---|
accessToken | 访问令牌,由server返回给client用于认证 |
AppKey | 应用程序key,AppKey的申请可以参阅: https://open.ys7.com/view/app/app_edit.html |
deviceSerial | 设备序列号 |
CameraNo | 设备通道号 |
deviceSerial+CameraNo | 摄像头唯一标志 |
OSD | 视频当前时间 |
PTZ | 云台控制,可以通过终端控制操作设备 |
功能介绍
功能 | 说明 |
---|---|
账号对接(授权登录、sdk接口登录) | 授权到萤石云平台,复用萤石云平台能力 |
摄像头列表 | 得到对应账号下设备 |
直播 | 直播,可设置直播分辨率 |
查看回放(SD卡、录像机、云存储) | 回放 |
设备对讲 | 对讲(包含半双工对讲和全双工对讲) |
设备的设置功能 | 设备设置接口api |
设备控制接口(云台、镜头画面) | 云台控制 |
WiFi配置 | 设备wifi配置 |
直播、回放边播边录 | 播放过程中录像 |
直播、回放边播边截屏 | 播放过程中截屏 |
告警消息 | 告警消息获取 |
工程配置
环境准备
支持 Android Studio 1.4 以上
支持 JDK 7.0 以上版本
支持 Android 手机系统 4.0 以上版本
创建应用
首先,你需要在萤石开放平台官网的 “ 开发者服务-我的应用-应用秘钥 ” 查看Appkey。
安装 SDK
SDK 的安装方式
使用 Gradle 获得
如果是之前采用过直接下载方式的需要删除之前拷贝进来的所有so库文件以及jar包
dependencies {
/*萤石SDK核心模块,必须依赖*/
implementation 'com.ezviz.sdk:ezviz-sdk:4.16.1'
/*视频通话模块,按需使用*/
implementation 'com.ezviz.sdk:videotalk:1.2.0'
/*码流获取模块,按需使用*/
implementation 'com.ezviz.sdk:streamctrl:1.2.0'
}
ps:最新版本请查看 https://bintray.com/open-ezviz/mobile-sdk
直接下载
不再支持! 请使用 Gradle 集成
配置工程
配置 Android 权限
在 AndroidMainfest.xml 文件中添加:
<!--基础功能所需权限-->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<!--配网所需权限-->
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
<!--对讲所需权限-->
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<!--视频通话权限所需-->
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
配置build.gradle
defaultConfig {
...
ndk {
abiFilters "armeabi-v7a" //自4.8.8版本开始支持arm64-v8a,按需使用
}
}
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
配置 AndroidManifest.xml
添加如下activity定义,用于sdk中间页显示,包含登录、开通云存储等。
<activity
android:name="com.videogo.main.EzvizWebViewActivity"
android:screenOrientation="portrait"
android:configChanges="orientation|keyboardHidden">
</activity>
添加如下广播接收器,用于接收中间页登录成功消息启动其他界面。将you_BroadcastReceiver替换为自己代码中定义的BroadcastReceiver。(Android8.0及以上系统,由于静态注册广播的限制,很可能会收不到登录成功的广播,因此建议改用在代码中动态注册的方式注册BroadcastReceiver)
<receiver
android:name="you_BroadcastReceiver"
android:exported="false" >
<intent-filter>
<action android:name="com.videogo.action.OAUTH_SUCCESS_ACTION" />
</intent-filter>
</receiver>
SDK初始化
一般建议在application中初始化
/** * sdk日志开关,正式发布需要去掉 */
EZOpenSDK.showSDKLog(true);
/** * 设置是否支持P2P取流,详见api */
EZOpenSDK.enableP2P(false);
/** * APP_KEY请替换成自己申请的 */
EZOpenSDK.initLib(this, APP_KEY);
代码混淆
目前SDK在打包时不能混淆,请添加以下内容
#========SDK对外接口=======#
-keep class com.ezviz.opensdk.** { *;}
#========以下是hik二方库=======#
-dontwarn com.ezviz.**
-keep class com.ezviz.** { *;}
-dontwarn com.ez.**
-keep class com.ez.** { *;}
-dontwarn com.hc.CASClient.**
-keep class com.hc.CASClient.** { *;}
-dontwarn com.videogo.**
-keep class com.videogo.** { *;}
-dontwarn com.hik.TTSClient.**
-keep class com.hik.TTSClient.** { *;}
-dontwarn com.hik.stunclient.**
-keep class com.hik.stunclient.** { *;}
-dontwarn com.hik.streamclient.**
-keep class com.hik.streamclient.** { *;}
-dontwarn com.hikvision.sadp.**
-keep class com.hikvision.sadp.** { *;}
-dontwarn com.hikvision.netsdk.**
-keep class com.hikvision.netsdk.** { *;}
-dontwarn com.neutral.netsdk.**
-keep class com.neutral.netsdk.** { *;}
-dontwarn com.hikvision.audio.**
-keep class com.hikvision.audio.** { *;}
-dontwarn com.mediaplayer.audio.**
-keep class com.mediaplayer.audio.** { *;}
-dontwarn com.hikvision.wifi.**
-keep class com.hikvision.wifi.** { *;}
-dontwarn com.hikvision.keyprotect.**
-keep class com.hikvision.keyprotect.** { *;}
-dontwarn com.hikvision.audio.**
-keep class com.hikvision.audio.** { *;}
-dontwarn org.MediaPlayer.PlayM4.**
-keep class org.MediaPlayer.PlayM4.** { *;}
#========以上是hik二方库=======#
#========以下是第三方开源库=======#
# JNA
-dontwarn com.sun.jna.**
-keep class com.sun.jna.** { *;}
# Gson
-keepattributes *Annotation*
-keep class sun.misc.Unsafe { *; }
-keep class com.idea.fifaalarmclock.entity.***
-keep class com.google.gson.stream.** { *; }
# OkHttp
# JSR 305 annotations are for embedding nullability information.
-dontwarn javax.annotation.**
# A resource is loaded with a relative path so the package of this class must be preserved.
-keepnames class okhttp3.internal.publicsuffix.PublicSuffixDatabase
# Animal Sniffer compileOnly dependency to ensure APIs are compatible with older versions of Java.
-dontwarn org.codehaus.mojo.animal_sniffer.*
# OkHttp platform used only on JVM and when Conscrypt dependency is available.
-dontwarn okhttp3.internal.platform.ConscryptPlatform
# 必须额外加的,否则编译无法通过
-dontwarn okio.**
#========以上是第三方开源库=======#
SDK主要流程
初始化授权流程
服务器对接授权客户:
第三方服务器通过服务端api接口获取accesstoken和过期时间,accesstoken用来授权,过期时间用来定时刷新accesstoken
第三方服务器将获取到的accesstoken下发到第三方app(需集成SDK),第三方app调用EZOpenSDK.getInstance().setAccessToken(String accesstoken),来完成授权
EZOpenSDK.getInstance().setAccessToken(String accessToken);
EZOpenSDK会文件缓存accesstoken,下次打开app,初始化时会自动完成授权
退出登录后需要调
退出登录授权
EZOpenSDK.getInstance().logout();
或者
EZOpenSDK.getInstance().setAccessToken(null);
针对需要调用EZOpenSDK登录页登录授权的客户:
- 使用openLoginPage()方法跳转到登录H5页,此页面可以登录萤石账号
EZOpenSDK.getInstance().openLoginPage();
- 登录成功之后会发送广播action为Constant.OAUTH_SUCCESS_ACTION为登录成功,登录成功后,app可以开展自己的业务,以及调用EZOpenSDK的接口,注意登录成功后EZOpenSDK自动完成accesstoken设置授权,第三个app无需再设置accesstoken;
- EZOpenSDK会文件缓存accesstoken,下次打开app,初始化时会自动完成授权
- 目前针对调用openLoginPage()页面获取accesstoken授权的,EZOpenSDK会内部自动刷新accesstoken,不用担心过期或者失效
- 如果需要获取EZOpenSDK内部缓存的accesstoken,调用方法EZOpenSDK.getInstance().getEZAccessToken(),得到EZAccessToken对象,包含accessToken和过去时间,拿accessToken自己去调用萤石api的需要考虑accessToken过期的情况
EZOpenSDK.getInstance().getEZAccessToke();
直播
步骤
- 创建播放器
- 设置handler回调、显示区域、设备如果设置了视频加密,需要设置视频加密密码,默认为设备的6位验证码
- 启动播放
- 停止播放
- 释放播放器
实例代码如下
EZPlayer player = EZOpenSDK.getInstance().createPlayer(String deviceSerial,int cameraNo);
//设置Handler, 该handler将被用于从播放器向handler传递消息
player.setHandler(mHandler);
//设置播放器的显示Surface
player.setSurfaceHold(mHolder);
/**
* 设备加密的需要传入密码
* 传入视频加密密码,用于加密视频的解码,该接口可以在收到ERROR_INNER_VERIFYCODE_NEED或ERROR_INNER_VERIFYCODE_ERROR错误回调时调用
* @param verifyCode 视频加密密码,默认为设备的6位验证码
*/
player.setPlayVerifyCode(String verifyCode);
//开启直播
player.startRealPlay();
//停止直播
player.stopRealPlay();
//释放资源
player.release();
说明
- 直播播放成功后可以进行以下操作:录像、拍照、画面翻转、对讲、云台控制、声音开关、视频画面缩放,详见api的EZPlayer,其中设备控制该接口的如云台控制和镜头显示功能、对讲,属于限制级接口,要优选通过判断设备的能力集来调用,设备能力集请查看EZDeviceInfo对象的属性值来判断具体方法;
//开启录像,recordFile录制本地路径,例如:Environment.getExternalStorageDirectory().getPath()+"/abc"
player.startLocalRecordWithFile(String recordFile)
//结束本地直播流录像与startLocalRecordWithFile成对使用
player.stopLocalRecord()
//截图
player.capturePicture()
//声音开关
player.openSound();
player.closeSound();
/**
* PTZ 控制接口
* 该接口为耗时操作,必须在线程中调用
* @param deviceSerial 设备序列号
* @param cameraNo 通道号
* @param command ptz控制命令
* @param action 控制启动/停止
* @param speed 速度(0-2)
* @return 操作成功或者失败(返回失败错误码)
*/
EZopenSDK.getInstance().controlPTZ(String deviceSerial,int cameraNo, EZPTZCommand command, EZPTZAction action, int speed)
EZOpenSDK中的setVideoLevel设置视频清晰度(videoLevel),此调节可以在视频播放前设置也可以在视频播放成功后设置,视频播放成功后设置了清晰度需要先停止播放stopRealPlay然后重新开启播放startRealPlay才能生效;
EZopenSDK.getInstance().setVideoLevel(String deviceSerial,int cameraNo, int videoLevel); //设置成功 // 停止播放 Stop play stopRealPlay(); // 开始播放 start play startRealPlay();
开始播放之后在消息回调中会收到
a、成功消息:102 (EZRealPlayConstants.MSG_REALPLAY_PLAY_SUCCESS), b、视频画面分辨率回调:134 (EZConstants.MSG_VIDEO_SIZE_CHANGED), c、失败消息:103 (EZRealPlayConstants.MSG_REALPLAY_PLAY_FAIL),失败回调时查看errorCode,如果为400035(需要输入验证码)和400036(验证码错误),则需要开发者自己处理让用户重新输入验证密码,并调用setPlayVerifyCode设置密码,然后重新启动播放。
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case EZConstants.EZRealPlayConstants.MSG_REALPLAY_PLAY_SUCCESS:
//播放成功
break;
case EZConstants.EZRealPlayConstants.MSG_REALPLAY_PLAY_FAIL:
//播放失败,得到失败信息
ErrorInfo errorinfo = (ErrorInfo) msg.obj;
//得到播放失败错误码
int code = errorinfo.errorCode
//得到播放失败模块错误码
String codeStr = errorinfo.moduleCode
//得到播放失败描述
String description = errorinfo.description
//得到播放失败解决方方案
String description = errorinfo.sulution
break;
case EZConstants.MSG_VIDEO_SIZE_CHANGED:
//解析出视频画面分辨率回调
try {
String temp = (String) msg.obj;
String[] strings = temp.split(":");
int mVideoWidth = Integer.parseInt(strings[0]);
int mVideoHeight = Integer.parseInt(strings[1]);
//解析出视频分辨率
} catch (Exception e) {
e.printStackTrace();
}
break;
default:
break;
}
}
回放
步骤
- 创建播放器
- 设置handler回调、显示区域、设备如果设置了视频加密,需要设置视频加密密码,默认为设备的6位验证码
- 启动播放
- 停止播放
- 释放播放器
实例代码如下
EZPlayer player = EZOpenSDK.getInstance().createPlayer(String deviceSerial,int cameraNo);
//设置Handler, 该handler将被用于从播放器向handler传递消息
player.setHandler(mHandler);
//设置播放器的显示Surface
player.setSurfaceHold(mHolder);
/**
* 设备加密的需要传入密码
* 传入视频加密密码,用于加密视频的解码,该接口可以在收到ERROR_INNER_VERIFYCODE_NEED或ERROR_INNER_VERIFYCODE_ERROR错误回调时调用
* @param verifyCode 视频加密密码,默认为设备的6位验证码
*/
player.setPlayVerifyCode(String verifyCode);
/**
* 开始云存储远程回放
* @param cloudFile 云存储文件信息 参见下文中的 查询云存储录像信息列表
* @return true 表示成功, false 表示失败
*/
player.startPlayback(EZCloudRecordFile cloudFile)
//或者
/**
* 开始远程SD卡回放
* @param deviceFile SD卡文件信息 参见下文中的 查询远程SD卡存储录像信息列表
* @return true 表示成功, false 表示失败
*/
player.startPlayback(EZDeviceRecordFile deviceFile)
//或者
/**
* 开始远程SD卡回放---按时间回放
* @param startTime 开始时间
* @param stopTime 结束时间
* @return true 表示成功, false 表示失败
*/
player.startPlayback(Calendar startTime, Calendar stopTime)
/**
* 停止远程回放
*/
player.stopPlayback()
说明
- 查询云存储录像信息列表
/** * 查询云存储录像信息列表 * 该接口中有网络操作,需要在线程中调用 * @param deviceSerial 设备序列号 * @param cameraNo camera的序号,EZCameraInfo.cameraNo * @param startTime 查询时间范围开始时间 * @param endTime 查询时间范围结束时间 * @return 云存储录像信息列表 * @throws BaseException */ EZopenSDK.getInstance().searchRecordFileFromCloud(String deviceSerial, int cameraNo, Calendar startTime, Calendar endTime)
- 查询远程SD卡存储录像信息列表
/** * 查询远程SD卡存储录像信息列表 * 当设备关联了NVR存储设备后,此时查找的是NVR设备中录像,不再提供查找设备SD卡中录像 * 该接口为耗时操作,必须在线程中调用 */ EZopenSDK.getInstance().searchRecordFileFromDevice(String deviceSerial, int cameraNo, Calendar startTime, Calendar endTime)
回放播放成功后可以进行以下操作:录像、拍照、声音开关、视频画面缩放、拖动进度seekPlayback播放,具体方法见api的EZPlayer;
/** * 根据偏移时间播放 * 拖动进度条时调用此接口。先停止当前播放,再把offsetTime作为起始时间按时间回放 * 建议使用stopPlayback+startPlayback(offsetTime,stopTime代替此接口 * @param offsetTime 录像偏移时间 */ player.seekPlayback(Calendar offsetTime)
- getOSDTime获取当前回放时间点,如果回放开始时间8:00,结束时间9:00,getOSDTime时间为8:30,那么播放进度为50%;
回放播放成功后可以调用pausePlayback(暂停远程回放播放)和 resumePlayback(恢复远程回放播放);
/** * 暂停远程回放播放 */ player.pausePlayback() /** * 恢复远程回放播放 */ player.resumePlayback()
开始播放之后在消息回调中会收到
a、成功消息:205 (EZConstants.EZPlaybackConstants.MSG_REMOTEPLAYBACK_PLAY_SUCCUSS), b、失败消息:206 (EZConstants.EZPlaybackConstants.MSG_REMOTEPLAYBACK_PLAY_FAIL),失败回调时查看errorCode,如果为400035(需要输入验证码)和400036(验证码错误),则需要开发者自己处理让用户重新输入验证密码,并调用setPlayVerifyCode设置密码,然后重新启动播放。 c、视频画面分辨率回调:134 (EZConstants.MSG_VIDEO_SIZE_CHANGED)
对讲
步骤
- 创建对讲播放器
- 设置handler回调、设备如果设置了视频加密,需要设置视频加密密码,默认为设备的6位验证码
- 启动对讲
- 停止对讲
- 释放对讲播放器
实例代码如下
EZPlayer talk = EZOpenSDK.getInstance().createPlayer(String deviceSerial,int cameraNo);
//设置Handler, 该handler将被用于从播放器向handler传递消息
talk.setHandler(mHandler);
/**
* 设备加密的需要传入密码
* 传入视频加密密码,用于加密视频的解码,该接口可以在收到ERROR_INNER_VERIFYCODE_NEED或ERROR_INNER_VERIFYCODE_ERROR错误回调时调用
* @param verifyCode 视频加密密码,默认为设备的6验证码
*/
talk.setPlayVerifyCode(String verifyCode);
//开启对讲, isDeviceTalkBack参数是用于判断对讲的设备,true表示与当前设备对讲,false表示与NVR设备下的IPC通道对讲。
talk.startVoiceTalk(boolean isDeviceTalkBack)
//开启对讲
talk.startVoiceTalk();
//关闭对讲
talk.stopVoiceTalk();
//注意对于半双工对讲:需要调用上面接口开启对讲
//开启对讲后能听到设备端声音,但是设备端听不到自己的声音,需要以下操作setVoiceTalkStatus
//设备端听,手机端说
talk.setVoiceTalkStatus(true);
//手机端听,设备端说
talk.setVoiceTalkStatus(false);
说明
对讲流程需要根据设备的对讲能力进行区分处理。EZDeviceInfo中的isSupportTalk可获取到设备的对讲能力,0-不支持对讲,1-支持全双工对讲,3-支持半双工对讲。 同一设备需要开启不同功能(直播/回放/对讲)的播放器时,需要分别对每个功能创建一个播放器。播放器的功能是单一的
关于对讲功能,如果播放有声音输出,则在开启对讲前需要关闭播放的声音closeSound,关闭对讲后开启播放的声音openSound,详见demo;
开始对讲之后在消息回调中会收到
a、成功消息:113 (RealPlayMsg.MSG_REALPLAY_VOICETALK_SUCCESS), b、失败消息:114 (RealPlayMsg.MSG_REALPLAY_VOICETALK_FAIL),失败回调时查看errorCode,如果为400035(需要输入验证码)和400036(验证码错误),则需要开发者自己处理让用户重新输入验证密码,并调用setPlayVerifyCode设置密码,然后重新启动播放。
设备添加流程
查询设备信息(probeDeviceInfo接口)的所获得对象是EZProbeDeviceInfoResult,需要开异步调用,EZProbeDeviceInfoResult 对象包含查询的设备信息,以及异常情况
final EZProbeDeviceInfoResult result = EZOpenSDK.getInstance().probeDeviceInfo(mDeviceSerial,deviceType); if (result.getBaseException() == null){ //查询成功,添加设备 return; }else{ switch (result.getBaseException().getErrorCode()){ case 120023: // TODO: 2018/6/25 设备不在线,未被用户添加 (这里需要网络配置) case 120002: // TODO: 2018/6/25 设备不存在,未被用户添加 (这里需要网络配置) case 120029: // TODO: 2018/6/25 设备不在线,已经被自己添加 (这里需要网络配置) runOnUiThread(new Runnable() { @Override public void run() { if (result.getEZProbeDeviceInfo() == null){ // 未查询到设备信息,不确定设备支持的配网能力,需要用户根据指示灯判断 //若设备指示灯红蓝闪烁,请选择smartconfig配网 //若设备指示灯蓝色闪烁,请选择设备热点配网 }else{ // 查询到设备信息,根据能力级选择配网方式 if (probeDeviceInfo.getSupportAP() == 2) { //选择设备热单配网 } if (probeDeviceInfo.getSupportWifi() == 3) { //选择smartconfig配网 } if (probeDeviceInfo.getSupportSoundWave() == 1) { //选择声波配网 } } } }); break; case 120020: // TODO: 2018/6/25 设备在线,已经被自己添加 (给出提示) case 120022: // TODO: 2018/6/25 设备在线,已经被别的用户添加 (给出提示) case 120024: // TODO: 2018/6/25 设备不在线,已经被别的用户添加 (给出提示) default: // TODO: 2018/6/25 请求异常 showToast("Request failed = " + result.getBaseException().getErrorCode()); break; } }
热点配网模式
/** * AP配网接口,默认为"EZVIZ_"+设备序列号,设备AP热点密码默认为"EZVIZ_"+设备验证码,默认自动连接设备热点,需要获取可扫描wifi的权限 * @param ssid WiFi的ssid * @param password WiFi的密码 * @param deviceSerial 设备序列号 * @param verifyCode 设备验证码 * @param apConfigCallback 结果回调 */ EZOpenSDK.getInstance().startAPConfigWifiWithSsid( final String ssid, final String password,String deviceSerial,final String verifyCode, final APWifiConfig.APConfigCallback apConfigCallback); /** * AP配网接口 * @param ssid WiFi的ssid * @param password WiFi的密码 * @param deviceSerial 设备序列号 * @param verifyCode 设备验证码 * @param routerName 设备热点名称,可传空,默认为"EZVIZ_"+设备序列号 * @param routerPassword 设备热点密码,可传空,默认为"EZVIZ_"+设备验证码 * @param isAutoConnectDeviceHotSpot 是否自动连接设备热点,需要获取可扫描wifi的权限;如果开发者已经确认手机连接到设备热点,则传false * @param apConfigCallback 结果回调 */ EZOpenSDK.getInstance().startAPConfigWifiWithSsid(final String ssid, final String password,String deviceSerial,final String verifyCode,final String routerName, final String routerPassword,boolean isAutoConnectDeviceHotSpot, final APWifiConfig.APConfigCallback apConfigCallback); /** * 停止AP配网 */ EZOpenSDK.getInstance().stopAPConfigWifiWithSsid(); /** * 热点配网回调 */ APWifiConfig.APConfigCallback apConfigCallback = new APWifiConfig.APConfigCallback(){ @Override public void onSuccess() { // TODO: 2018/6/28 配网成功 EZOpenSDK.getInstance().stopAPConfigWifiWithSsid(); Log.d(TAG, "startAPConfigWifiWithSsid onSuccess mDeviceSerial = " + mDeviceSerial); } @Override public void OnError(int code) { // TODO: 2018/6/28 配网失败 EZOpenSDK.getInstance().stopAPConfigWifiWithSsid(); Log.d(TAG, "startAPConfigWifiWithSsid OnError mDeviceSerial = " + mDeviceSerial); switch (code) { case 15: // TODO: 2018/7/24 超时 break; case 1: // TODO: 2018/7/24 参数错误 break; case 2: // TODO: 2018/7/24 设备ap热点密码错误 break; case 3: // TODO: 2018/7/24 连接ap热点异常 break; case 4: // TODO: 2018/7/24 搜索WiFi热点错误 break; default: // TODO: 2018/7/24 未知错误 // 更多错误码请见枚举类 EZConfigWifiErrorEnum 相关说明 break; } }
无线配网模式 调用wifi一键配置,startConfigWifi和stopConfigWifi要成对出现,开启配置后,配置时长开发这个可以自己定义一个定时器,到时间后调用stopConfigWiFi(),停止配网。
/** * 开始WiFi配置 * @param context 应用 activity context * @param deviceSerial 配置设备序列号 * @param ssid 连接WiFi SSID * @param password 连接 WiFi 密码 * @param back 配置回调 */ EZOpenSDK.getInstance().startConfigWifi(Context context,String deviceSerial, String ssid, String password, EZOpenSDKListener.EZStartConfigWifiCallback back); /** * 开始WiFi配置 * @since 4.8.3 * @param context 应用 activity context * @param deviceSerial 配置设备序列号 * @param ssid 连接WiFi SSID * @param password 连接 WiFi 密码 * @param mode 配网的方式,EZWiFiConfigMode中列举的模式进行任意组合(EZWiFiConfigMode.EZWiFiConfigSmart:普通配网;EZWiFiConfigMode.EZWiFiConfigWave:声波配网),例 如:EZWiFiConfigMode.EZWiFiConfigSmart|EZWiFiConfigMode.EZWiFiConfigWave * @param back 配置回调 */ EZOpenSDK.getInstance().startConfigWifi(Context context,String deviceSerial, String ssid, String password, int mode,EZOpenSDKListener.EZStartConfigWifiCallback back); /** * 停止Wifi配置 */ EZOpenSDK.getInstance().stopConfigWiFi(); /** * 配网回调 */ EZOpenSDKListener.EZStartConfigWifiCallback mEZStartConfigWifiCallback = new EZOpenSDKListener.EZStartConfigWifiCallback() { @Override public void onStartConfigWifiCallback(String deviceSerial,final EZConstants.EZWifiConfigStatus status) { AutoWifiConnectingActivity.this.runOnUiThread(new Runnable() { @Override public void run() { if (status == EZConstants.EZWifiConfigStatus.DEVICE_WIFI_CONNECTED) { //设备wifi连接成功 } else if (status == EZConstants.EZWifiConfigStatus.DEVICE_PLATFORM_REGISTED) { EZWiFiConfigManager.stopConfigWiFi(); //设备注册到平台成功,可以调用添加设备接口添加设备 } } }); } };
特别说明: 账户下删除设备重新wifi配置并且添加过程中,请在重置设备等待2分钟以后再调用wifi配置的相关接口可以提高wifi配置的成功率,否则会降低成功率,因为重置设备以后我们平台将在2分钟内得到设备下线的状态,只有平台认为下线了,wifi配置成功率才会高。
注意 1: DEVICE_WIFI_CONNECTED和DEVICE_PLATFORM_REGISTED状态上报可能会丢失,此时可在适当时机查询设备当前的状态(调用接口probeDeviceInfo),根据设备状态进行后续操作
注意 2:针对海康设备在添加可能需要激活,需要在局域网中先搜索到设备,然后判断是否已激活(萤石设备是免激活的),如未激活需要调用激活接口激活
//sadp 局域网搜索设备
EZHCNetDeviceSDK.getInstance().startLocalSearch(new EZHCNetDeviceSDK.SadpDeviceFoundListener() {
@Override
public void onDeviceFound(final EZSADPDeviceInfo sadp_device_info) {
LogUtil.d(TAG,
"onDeviceFound " + sadp_device_info.getDeviceSerial() + " " + sadp_device_info.getDeviceSerial());
//搜索到设备
//判断设备是否激活
boolean isActivied = sadp_device_info.isActived();
}
});
//sadp 关闭局域网搜索设备
EZHCNetDeviceSDK.getInstance().stopLocalSearch();
//sadp 局域网设备激活
new Thread(new Runnable() {
@Override
public void run() {
final int result = EZHCNetDeviceSDK.getInstance().activeDeviceWithSerial(deviceSerial, mPassword);
if (result == 1) {
// TODO: 2017/8/15 Activation successful
return;
}else {
//TODO: 2017/8/15 Activation failed
runOnUiThread(new Runnable() {
@Override
public void run() {
if(result == 2020){
// TODO: 2017/8/16 密码太弱
}else{
// TODO: 2017/8/16 激活失败
}
}
});
}
}
}).start();
附录:
目前以下设备类型支持AP配网功能
国内型号 | 海外型号 |
---|---|
CS-C4Wi-3C2WFR | HSFLC1(VOXX定制型号) |
CS-C4Wi-3C2EFR | HSDB2(VOXX定制型号) |
CS-C4W-3C2WFR | CS-CV206-C0-3B2WFR-KJDS |
CS-C3A-1C2WPMFBR | CS-CV206-C0-1A1WFR-KJDS |
CS-CV310-A0-3B1WFR-KJDS | |
CS-CV310-A0-1B2WFR-KJDS | |
CS-CV246-B0-3B2WFR-KJDS |
附录:
声波配网支持以下设备类型及对应最低版本,仅供参考
设备型号 | 设备具体 | 版本号 | 声波配置 |
---|---|---|---|
C2C | CS-C2C-1B2WFR | V5.1.2 build 180313 | 支持 |
C6P | CS-C6P-7A3WFR | V5.3.2 build 180117 | 支持 |
C2HC | CS-C2HC-3B2WFR | V5.2.4 build 180125 | 支持 |
C3W | CS-C3W-3B1WFR | V5.2.4 build 180131 | 支持 |
C5S | CS-C5S-1B2WFR | V5.2.4 build 180129 | 支持 |
C5Si | CS-C5Si-3C2WFR | V5.2.4 build 180307 | 支持 |
C6H | CS-C6H-3B1WFR | V5.2.4 build 180129 | 支持 |
C6C | CS-C6C-3B2WFR | V5.2.4 build 180129 | 支持 |
C6HC | CS-C6HC-3B2WFR | V5.2.4 build 180129 | 支持 |
参考资料
若文档有未尽之处,请参考以下资料。 1.萤石SDK demo,点击跳转到github下载