1. 接入流程

1.1 准备环境

必要的环境

开发环境

版本

备注

Android Studio

建议使用最新的版本

用于开发Android应用

杰理WiFi设备

建议使用最新的固件

固件须支持杰理CTP协议

测试手机

建议不低于Android5.0

SDK不支持模拟器

1.2 库导入

1.2.1 依赖库

注解

xxx 为版本号,请以最新发布版本为准

  1. DVControl_Vxxx-release.aar :严格意义上的SDK库,其通过WiFi与设备通信, 必选

  2. imageloader_Vxxx-release.aar :具有加载、显示、缓存图片的功能库,可选

  3. ijkplayer-yyy-release.aar :是对开源库ijkplayer源码修改并编译的一系列库,用于预览、回放、图片转码,可选

  4. ZXing.jar :用于生成二维码的开源库,可选

  5. shareLibrary_v0.1.0-release.aar :有限分享功能的开源库,可选

  6. BaiduTraceSDK_v3_0_7.jar、BaiduLBS_Android.jar :用于行车轨迹的百度地图库,可选

  7. 其他是一些官方或开源的依赖库,具体可以看工程代码中的app/build.gradle和app/libs, 根据需要来选择

1.2.2 导入库

  1. 将1.2.1的依赖aar文件放入工程目录中的对应moudle的libs文件夹下

  2. 在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 前期准备

  1. 在连接设备前,让手机WiFi与设备处于同一个网络。

  2. 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再初始化界面。