1. 接入流程
1.1 准备环境
开发环境 |
版本 |
备注 |
---|---|---|
Android Studio |
建议使用最新的版本 |
用于开发Android应用 |
杰理WiFi设备 |
建议使用最新的固件 |
固件须支持杰理CTP协议 |
测试手机 |
建议不低于Android5.0 |
SDK不支持模拟器 |
1.2 库导入
1.2.1 依赖库
备注
xxx 为版本号,请以最新发布版本为准
DVControl_Vxxx-release.aar :严格意义上的SDK库,其通过WiFi与设备通信, 必选
imageloader_Vxxx-release.aar :具有加载、显示、缓存图片的功能库,可选
ijkplayer-yyy-release.aar :是对开源库ijkplayer源码修改并编译的一系列库,用于预览、回放、图片转码,可选
ZXing.jar :用于生成二维码的开源库,可选
shareLibrary_v0.1.0-release.aar :有限分享功能的开源库,可选
BaiduTraceSDK_v3_0_7.jar、BaiduLBS_Android.jar :用于行车轨迹的百度地图库,可选
其他是一些官方或开源的依赖库,具体可以看工程代码中的app/build.gradle和app/libs, 根据需要来选择
1.2.2 导入库
将1.2.1的依赖aar文件放入工程目录中的对应moudle的libs文件夹下
在moudlu的build.gradle中添加:
implementation fileTree(include: ['*.aar'], dir: 'libs')
1.2.3 必要权限
1// 联网权限
2<uses-permission android:name="android.permission.INTERNET"/>
3// 与WiFi相关的权限
4<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
5<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
6<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
7<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
8<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/>
1.3 SDK配置
1.3.1 前期准备
在连接设备前,让手机WiFi与设备处于同一个网络。
App也要先申请WiFi权限
1.3.2 创建通信管理类
DeviceClient是与设备通信的类, 建议整个App生命周期保持只有一个对象,即封装成一个单例类, 而不是重复创建对象。如:
1 // 通信管理类
2 public class ClientManager {
3 private static DeviceClient instance;
4 // 单例模式
5 public static DeviceClient getClient() {
6
7 if (instance == null) {
8 synchronized (ClientManager.class) {
9 if (instance == null) {
10 // 支持TCP和UDP通信方式
11 instance = new DeviceClient(MainApplication.getApplication(), DeviceClient.PROTOCOL_TCP);
12 }
13 }
14 }
15 return instance;
16 }
17 // 释放资源
18 public static void release() {
19 if (instance != null) {
20 instance.release();
21 instance = null;
22 }
23 }
24 }
1.3.3 创建连接
1// 1、IP是设备的地址, CTP_TCP_PORT是协商的端口
2ClientManager.getClient().create(ip, IConstant.CTP_TCP_PORT);
3
4// 2、注册连接监听器
5ClientManager.getClient().registerConnectStateListener(new OnConnectStateListener() {
6 @Override
7 public void onStateChanged(Integer state) {
8 // TODO 处理连接状态
9 }
10});
1.3.4 请求连接设备
1// 3、发送命令给设备,请求设备允许接入。设备收到命令后,将给App回复状态
2ClientManager.getClient().tryToAccessDevice(String.valueOf(mApplication.getAppVersion()), new SendResponse() {
3 @Override
4 public void onResponse(Integer code) {
5 if (code != SEND_SUCCESS) {
6 Dbug.e(tag, "Send failed!!!");
7 }
8 }
9});
1.3.5 监听命令回复
1// 4、注册命令监听器
2ClientManager.getClient().registerNotifyListener(onNotifyListener);
3
4// 设备的通知、命令回复会在这里收到
5private final OnNotifyListener onNotifyListener = new OnNotifyListener() {
6 @Override
7 public void onNotify(NotifyInfo data) {
8 if (data.getTopic().equals(Topic.APP_ACCESS)) {
9 // 设备允许接入
10 } else {
11 // TODO other commands
12 }
13 }
14};
15
16// 不用时,要注销命令监听器
17ClientManager.getClient().unregisterNotifyListener(onNotifyListener);
当App被允许接入设备后, 设备端会主动将心跳包间隔、白平衡、TF卡状态、录像状态等信息发送给App,App再初始化界面。