Android GB905协议详解
最近发现,深圳做网约车和货车的协议的公司越来越多了,之前在公司做过一些这方面的项目。就来写个这方面的文章记录下,也顺便分享下。
GB905,主要是面向网约车的一种协议,主要监控司机的行为,确保乘车安全。 首先一些协议的指令。
public class JTT905Cmd {
/** * ISU通用应答 */
public static final int ISU_GENERAL_RESPONSE = 0x0001;
/*** 中心通用应答 */
public static final int CENTER_GENERAL_RESPONSE = 0x8001;
/** * ISU心跳 */
public static final int ISU_HEART = 0x0002;
/** * 设置参数 */
public static final int SET_PARAMETERS = 0x8103;
/**
* 查询ISU参数
*/
public static final int QUERY_ISU_PARAMETERS = 0x8104;
/** * 查询ISU参数应答 */
public static final int QUERY_THE_ISU_PARAMETERS_RESPONSE = 0x0104;
/** * ISU控制 */
public static final int ISU_CONTROL = 0x8105;
/** * ISU升级结果报告消息 */
public static final int ISU_UPDATE_RESULT_REPORT_MESSAGE = 0x0105;
/* 位置信息汇报 */
public static final int LOCATION_INFORMATION_REPORT = 0x0200;
/** * 位置信息查询 */
public static final int LOCATION_INFORMATION_QUERY = 0x8201;
/** * 位置信息查询应答 */
public static final int LOCATION_INFORMATION_QUERY_RESPONSE = 0x0201;
/*** 位置跟踪控制 */
public static final int POSITION_TRACKING_CONTROL = 0x8202;
/** * 位置跟踪信息汇报 */
public static final int POSITION_TRACKING_MESSAGE_REPORT = 0x0202;
/** * 位置汇报数据补传 */
public static final int LOCATION_REPORT_DATA_UPLOAD = 0x0203;
/** * 文本信息下发 */
public static final int TEXT_MESSAGING = 0x8300;
/**
* 事件设置
*/
public static final int EVENT_SET = 0x8301;
/** * 事件报告 */
public static final int INCIDENT_REPORT = 0x0301;
/** * 提问下发 */
public static final int QUESTIONS_ISSUED = 0x8302;
/** * 提问应答 */
public static final int QUESTIONS_ANSWERING = 0x0302;
/** * 电话回拨 */
public static final int BACK_TO_THE_DIAL = 0x8400;
/**
* 设置电话本
*/
public static final int SET_UP_THE_PHONE_BOOK = 0x8401;
/**
* 车辆控制
*/
public static final int VEHICLE_CONTROL = 0x8500;
/** * 车辆控制应答
*/
public static final int VEHICLE_CONTROL_RESPONSE = 0x0500;
/**
* 摄像头图像上传
*/
public static final int CAMERA_PICTURE_UPLOAD = 0x0800;
/**
* 摄像头立即拍摄命令
*/
public static final int THE_CAMERA_IMMEDIATELY_SHOT_THE_COMMAND = 0x8801;
/**
* 存储图像检索
*/
public static final int STORAGE_OF_PICTURE_RETRIEVAL = 0x8802;
/**
* 存储图像检索应答
*/
public static final int STORAGE_PICTURE_RETRIEVAL_RESPONSE = 0x0802;
/**
* 存储图像/音视频上传命令
*/
public static final int STORE_MULTIMEDIA_DATA_UPLOAD_COMMAND = 0x8803;
/**
* 订单任务下发
*/
public static final int ORDER_TASK_ISSUED = 0x8B00;
/**
* 驾驶员抢答
*/
public static final int DRIVER_ANSWER = 0x0B01;
/**
* 下发抢答结果信息
*/
public static final int SEND_THE_RESULT_INFORMATION = 0x8B01;
/**
* 驾驶员电召任务完成确认
*/
public static final int DRIVER_CALL_TASK_HAS_BEEN_CONFIRMED = 0x0B07;
/**
* 驾驶员取消订单
*/
public static final int DRIVER_CANCELLED_THE_ORDER = 0x0B08;
/**
* 中心取消订单
*/
public static final int CENTER_CANCELLED_THE_ORDER = 0x8B09;
/**
* 上班签到信息上传
*/
public static final int CHECK_IN_INFORMATION_UPLOADED = 0x0B03;
/**
* 下班签退信息上传
*/
public static final int CHECK_OUT_INFORMATION_UPLOAD = 0x0B04;
/**
* 运营数据上传
*/
public static final int OPERATION_DATA_UPLOAD = 0x0B05;
/**
* 外围设备指令下行透传
*/
public static final int PERIPHERAL_DEVICE_PASS_THROUGH = 0x8B10;
/**
* 外围设备指令上行透传
*/
public static final int PERIPHERAL_DEVICE_INSTRUCTION_UPLINK = 0x0B10;
/**
* 音频检索
*/
public static final int AUDIO_RETRIEVAL = 0x8805;
/**
* 存储音频检索应答
*/
public static final int AUDIO_RETRIEVAL_RESPONSE = 0x0805;
/**
* 音视频上传
*/
public static final int AUDIO_AND_VIDEO_UPLOAD = 0x0806;
/**
* 中心确认报警
*/
public static final int CENTER_CONFIRM_ALARM = 0x8B0A;
/**
* 中心解除报警
*/
public static final int CENTER_RELEASE_ALARM = 0x8B0B;
/**
* 中心巡检设备
*/
public static final int CENTER_PATROL_EQUIPMENT = 0x8B11;
/**
* 设备巡检应答
*/
public static final int EQUIPMENT_INSPECTION_RESPONSE = 0x0B11;
/**
* 终端请求下发重要初始化参数指令
*/
// public static final int TERMINAL_REQ_ISSUE_PARAMETER = 0x0F40;
/**
* 网约车驾驶员签到/签退通知
*/
public static final int DRIVER_CHECK_IN_OR_OUT_NOTIFY = 0x8BC5;
/**
* 请求关联司机列表信息
*/
public static final int REQ_DRIVER_LIST_INFO = 0x0BD2;
/**
* 请求关联司机列表信息应答
*/
public static final int REP_DRIVER_LIST_INFO = 0x8BD2;
/**
* 云端人脸识别结果通知
*/
public static final int CLOUD_PERSON_FACE_CHECK_RESULT_NOTIFY = 0x8BD3;
/**
* 终端请求驾驶员信息
*/
public static final int TERMINAL_REQ_DRIVER_INFO = 0x0BD0;
/**
* 平台下发驾驶员信息
*/
public static final int PLATFORM_ISSUED_DRIVER_INFO = 0x8BD0;
/**
* 平台删除驾驶员信息
*/
public static final int PLATFORM_DELETE_DRIVER_INFO = 0x8BD1;
/**
* 实时音视频传输请求
*/
public static final int AUDIO_AND_VIDEO_REALTIME_UPLOAD = 0x9501;
/**
* 音视频传输控制
*/
public static final int AUDIO_AND_VIDEO_CONTROL = 0x9102;
/**
* 实时音视频媒体通道注册
*/
public static final int AUDIO_AND_VIDEO_RESGITER = 0x1209;
/**
* 存储音视频检索
*/
public static final int STORAGE_AUDIO_AND_VIDEO_SEARCH = 0x9505;
/**
* 终端上传音视频资源列表
*/
public static final int TERMINAL_UP_AUDIO_AND_VIDEO_LIST = 0x1505;
/**
* 终端搜索月历信息列表
*/
public static final int TERMINAL_SEARCH_MONTH_LIST = 0x9508;
/**
* 月历查询应答
*/
public static final int SEARCH_MONTH_REPLY = 0x1508;
/**
* 存储音视频回放请求
*/
public static final int STORAGE_AUDIO_AND_VIDEO_PLAYBACK = 0x9509;
/**
* 存储音视频回放控制
*/
public static final int STORAGE_AUDIO_AND_VIDEO_CONTROL = 0x950A;
/**
* 网约车订单开始执行通知
*/
public static final int ORDER_START_NOTIFY = 0x8BC2;
/**
* 网约车订单执行完成通知
*/
public static final int ORDER_DONE_NOTIFY = 0x8BC3;
/**
* 特殊报警信息上报(DMS报警)
*/
public static final int DMS_ALARM_REPORT = 0x0BC4;
/**
* @param Command
* 指令
* @throws UnsupportedEncodingException
*
* @return String 通过command指令换取对应的指令字符
*/
public static String Command2CmdString(int Command) throws UnsupportedEncodingException {
// 默认的字符提示
String CommandStr = "错误的指令类型";
switch (Command) {
// ISU通用应答
case JTT905Comd.ISU_GENERAL_RESPONSE:
CommandStr = "ISU通用应答";
break;
// 中心通用应答
case JTT905Comd.CENTER_GENERAL_RESPONSE:
CommandStr = "中心通用应答";
break;
// ISU心跳
case JTT905Comd.ISU_HEART:
CommandStr = "ISU心跳";
break;
// 设置参数
case JTT905Comd.SET_PARAMETERS:
CommandStr = "设置参数";
break;
// 查询ISU参数
case JTT905Comd.QUERY_ISU_PARAMETERS:
CommandStr = "查询ISU参数";
break;
// 查询ISU参数应答
case JTT905Comd.QUERY_THE_ISU_PARAMETERS_RESPONSE:
CommandStr = "查询ISU参数应答";
break;
// ISU控制
case JTT905Comd.ISU_CONTROL:
CommandStr = "ISU控制";
break;
// ISU升级结果报告消息
case JTT905Comd.ISU_UPDATE_RESULT_REPORT_MESSAGE:
CommandStr = "ISU升级结果报告消息";
break;
// 位置信息汇报
case JTT905Comd.LOCATION_INFORMATION_REPORT:
CommandStr = "位置信息汇报";
break;
// 位置信息查询
case JTT905Comd.LOCATION_INFORMATION_QUERY:
CommandStr = "位置信息查询";
break;
// 位置信息查询应答
case JTT905Comd.LOCATION_INFORMATION_QUERY_RESPONSE:
CommandStr = "位置信息查询应答";
break;
// 位置跟踪控制
case JTT905Comd.POSITION_TRACKING_CONTROL:
CommandStr = "位置跟踪控制";
break;
// 位置跟踪信息汇报
case JTT905Comd.POSITION_TRACKING_MESSAGE_REPORT:
CommandStr = "位置跟踪信息汇报";
break;
// 位置汇报数据补传
case JTT905Comd.LOCATION_REPORT_DATA_UPLOAD:
CommandStr = "位置汇报数据补传";
break;
// 文本信息下发
case JTT905Comd.TEXT_MESSAGING:
CommandStr = "文本信息下发";
break;
// 事件设置
case JTT905Comd.EVENT_SET:
CommandStr = "事件设置";
break;
// 事件报告
case JTT905Comd.INCIDENT_REPORT:
CommandStr = "事件报告";
break;
// 提问下发
case JTT905Comd.QUESTIONS_ISSUED:
CommandStr = "提问下发";
break;
// 提问应答
case JTT905Comd.QUESTIONS_ANSWERING:
CommandStr = "提问应答";
break;
// 电话回拨
case JTT905Comd.BACK_TO_THE_DIAL:
CommandStr = "电话回拨";
break;
// 设置电话本
case JTT905Comd.SET_UP_THE_PHONE_BOOK:
CommandStr = "设置电话本";
break;
// 车辆控制
case JTT905Comd.VEHICLE_CONTROL:
CommandStr = "车辆控制";
break;
// 车辆控制应答
case JTT905Comd.VEHICLE_CONTROL_RESPONSE:
CommandStr = "车辆控制应答";
break;
// 摄像头图像上传
case JTT905Comd.CAMERA_PICTURE_UPLOAD:
CommandStr = "摄像头图像上传";
break;
// 摄像头立即拍摄命令
case JTT905Comd.THE_CAMERA_IMMEDIATELY_SHOT_THE_COMMAND:
CommandStr = "摄像头立即拍摄命令";
break;
// 存储图像检索
case JTT905Comd.STORAGE_OF_PICTURE_RETRIEVAL:
CommandStr = "存储图像检索";
break;
// 存储图像检索应答
case JTT905Comd.STORAGE_PICTURE_RETRIEVAL_RESPONSE:
CommandStr = "存储图像检索应答";
break;
// 存储图像/音视频上传命令
case JTT905Comd.STORE_MULTIMEDIA_DATA_UPLOAD_COMMAND:
CommandStr = "存储图像/音视频上传命令";
break;
// 订单任务下发
case JTT905Comd.ORDER_TASK_ISSUED:
CommandStr = "订单任务下发";
break;
// 驾驶员抢答
case JTT905Comd.DRIVER_ANSWER:
CommandStr = "驾驶员抢答";
break;
// 下发抢答结果信息
case JTT905Comd.SEND_THE_RESULT_INFORMATION:
CommandStr = "下发抢答结果信息";
break;
// 驾驶员电召任务完成确认
case JTT905Comd.DRIVER_CALL_TASK_HAS_BEEN_CONFIRMED:
CommandStr = "驾驶员电召任务完成确认";
break;
// 驾驶员取消订单
case JTT905Comd.DRIVER_CANCELLED_THE_ORDER:
CommandStr = "驾驶员取消订单";
break;
// 中心取消订单
case JTT905Comd.CENTER_CANCELLED_THE_ORDER:
CommandStr = "中心取消订单";
break;
// 上班签到信息上传
case JTT905Comd.CHECK_IN_INFORMATION_UPLOADED:
CommandStr = "上班签到信息上传";
break;
// 下班签退信息上传
case JTT905Comd.CHECK_OUT_INFORMATION_UPLOAD:
CommandStr = "下班签退信息上传";
break;
// 运营数据上传
case JTT905Comd.OPERATION_DATA_UPLOAD:
CommandStr = "运营数据上传";
break;
// 外围设备指令下行透传
case JTT905Comd.PERIPHERAL_DEVICE_PASS_THROUGH:
CommandStr = "外围设备指令下行透传";
break;
// 外围设备指令上行透传
case JTT905Comd.PERIPHERAL_DEVICE_INSTRUCTION_UPLINK:
CommandStr = "外围设备指令上行透传";
break;
// 音频检索
case JTT905Comd.AUDIO_RETRIEVAL:
CommandStr = "音频检索";
break;
// 存储音频检索应答
case JTT905Comd.AUDIO_RETRIEVAL_RESPONSE:
CommandStr = "存储音频检索应答";
break;
// 音视频上传
case JTT905Comd.AUDIO_AND_VIDEO_UPLOAD:
CommandStr = "音视频上传";
break;
// 中心确认报警 -> 无消息体
case JTT905Comd.CENTER_CONFIRM_ALARM:
CommandStr = "中心确认报警";
break;
// 中心解除报警
case JTT905Comd.CENTER_RELEASE_ALARM:
CommandStr = "中心解除报警";
break;
// 中心巡检设备
case JTT905Comd.CENTER_PATROL_EQUIPMENT:
CommandStr = "中心巡检设备";
break;
// 设备巡检应答
case JTT905Comd.EQUIPMENT_INSPECTION_RESPONSE:
CommandStr = "设备巡检应答";
break;
// 终端请求下发重要初始化参数指令
// case JTT905Comd.TERMINAL_REQ_ISSUE_PARAMETER:
// CommandStr = "终端请求下发重要初始化参数指令";
// break;
// 请求关联司机列表信息
case JTT905Comd.REQ_DRIVER_LIST_INFO:
CommandStr = "请求关联司机列表信息";
break;
// 请求关联司机列表信息应答
case JTT905Comd.REP_DRIVER_LIST_INFO:
CommandStr = "请求关联司机列表信息应答";
break;
// 终端请求驾驶员信息
case JTT905Comd.TERMINAL_REQ_DRIVER_INFO:
CommandStr = "终端请求驾驶员信息";
break;
// 平台下发驾驶员信息
case JTT905Comd.PLATFORM_ISSUED_DRIVER_INFO:
CommandStr = "平台下发驾驶员信息";
break;
// 平台删除驾驶员信息
case JTT905Comd.PLATFORM_DELETE_DRIVER_INFO:
CommandStr = "平台删除驾驶员信息";
break;
// 实时音视频传输请求
case JTT905Comd.AUDIO_AND_VIDEO_REALTIME_UPLOAD:
CommandStr = "实时音视频传输请求";
break;
// 存储音视频回放请求
case JTT905Comd.STORAGE_AUDIO_AND_VIDEO_PLAYBACK:
CommandStr = "存储音视频回放请求";
break;
// 音视频传输控制
case JTT905Comd.AUDIO_AND_VIDEO_CONTROL:
CommandStr = "音视频传输控制";
break;
// 实时音视频媒体通道注册
case JTT905Comd.AUDIO_AND_VIDEO_RESGITER:
CommandStr = "实时音视频媒体通道注册";
break;
// 存储音视频检索
case JTT905Comd.STORAGE_AUDIO_AND_VIDEO_SEARCH:
CommandStr = "存储音视频检索";
break;
// 终端上传音视频资源列表
case JTT905Comd.TERMINAL_UP_AUDIO_AND_VIDEO_LIST:
CommandStr = "终端上传音视频资源列表";
break;
// 终端搜索月历信息列表
case JTT905Comd.TERMINAL_SEARCH_MONTH_LIST:
CommandStr = "终端搜索月历信息列表";
break;
// 月历查询应答
case JTT905Comd.SEARCH_MONTH_REPLY:
CommandStr = "月历查询应答";
break;
// 存储音视频回放控制
case JTT905Comd.STORAGE_AUDIO_AND_VIDEO_CONTROL:
CommandStr = "存储音视频回放控制";
break;
// 网约车驾驶员签到/签退通知
case JTT905Comd.DRIVER_CHECK_IN_OR_OUT_NOTIFY:
CommandStr = "网约车驾驶员签到/签退通知";
break;
// 云端人脸识别结果通知
case JTT905Comd.CLOUD_PERSON_FACE_CHECK_RESULT_NOTIFY:
CommandStr = "云端人脸识别结果通知";
break;
// 网约车订单开始执行通知
case JTT905Comd.ORDER_START_NOTIFY:
CommandStr = "网约车订单开始执行通知";
break;
// 网约车订单执行完成通知
case JTT905Comd.ORDER_DONE_NOTIFY:
CommandStr = "网约车订单执行完成通知";
break;
// 特殊报警信息上报(DMS报警)
case JTT905Comd.DMS_ALARM_REPORT:
CommandStr = "特殊报警信息上报(DMS报警)";
break;
}
return CommandStr;
}
}
当设备上电后,核心后台服务启动,也是整个项目最核心的启动模块,初始化化的工作。
主要核心操作有初始化定位服务、初始化ID与车牌、初始化车辆状态管理、初始化默认参数设置、
添加需要监听的Observer、初始化串口与外设模块、初始化Window视窗管理、更新并加载参数设置缓存、更新
并加载参数设置缓存中的连接参数、初始化mina4框架、连接平台检测、ISU升级判断、更新位置上报参数并启动上报线程、
注册调试广播、初始化拍照管理、初始化动态查岗管理
@Override
public void onCreate() {
GpsLocationManager.initializeInstance(this); // 初始化GPS
mProtocolPreference = new ProtocolPreference(this); // init ProtocolPreference
getIsuId();
// usb 摄像头启用状态,0启用;非0不启用;
hasUSBCamera = Settings.System.getInt(getContentResolver(), "cameraState", 1) == 0 ? true : false;
// init VehicleManager
mVehicleManager = VehicleManager.getVehicleManager(this);
mVehicleManager.setOnVehicleStateListener(mVehicleStateListener);
// init db
mJTTDBOperation = new JTTDBOperation(this);
boolean firstBootApplication = Settings.System.getInt(getContentResolver(), FIRST_BOOT_APP,0) == 0;
// first boot application
if (firstBootApplication)
// 插入默认的参数到数据库
insertDefaultParams();
// get system device state , register system state and parameter settings Observer
getSysStateRegisterObserver();
// init wd
mPeripheralsManager = PeripheralsManager.getInstance(this);
// 启动检测
mPeripheralsManager.queryDevSatate(new byte[0]);
// init WindowManager
initWindowManager();
// intit gps service
initGps();
if (updateMapCacheOk()) {
updateConnectParameter();
}
// initialization connector
initializationConnector();
startConnect();
// 判断ISU是否进行了升级
UpdateCheck();
// 开始上传位置基本信息,不论连接成功与否
updateReportParameter(false);
// 初始化录音管理实例对象,如果中心设置了全程录音,即开始录音
// mMediaRecordManager = MediaRecordManager.getInstance(this);
// 初次初始化录音参数配置
// mMediaRecordManager.updateAudioParameter();
// 注册主备服务器切换监听
initReceiver();
TakePictureManager.initializeInstance(this);
mTimerQueryManager = TimerQueryManager.getInstance(this);
}
onStart:实际运营时可以屏蔽里面的逻辑,实际运营前可用于调试905协议
startConnect:如果系统开机后,车牌与ISUID非空就直接启动mina4连接平台
initializationConnector:网络连接初始化,这也是终端与平台交互的核心模块,终端发出去的所有协议消息,平台的应答
都会走到这个方法里的匿名接口ConnectionListener的receiveData方法里,其中还有对连接成功、连接断开、连接异常、连接次数超限的检测
mConnector.setOnConnectionListener(new ConnectionListener() {
@Override
public void receiveData(Object data) {
if (config.getFactory() instanceof ByteArrayCodecFactory) {
dispatchProtocol(data);
}
}
@Override
public void disConnect() {
// startTimer(DEV_REBOOT_DEFAULT_TIME);
// 获取设备Id
int devideId = JTTUtils.getDeviceId("与平台连接");
// 不存在此设备
if (devideId == -1) return;
// 更新设备的状态-异常
mJTTDBOperation.insert(devideId, 1);
if (!isActiveDisconnection) {
// 断开了主服务器,切换到备份服务器
if (isCurConnMainIp) {
isCurConnMainIp = false;
Log.d(TAG,"主服务器:" + cur_ip + "\t端口:" + cur_port + "");
Log.d(TAG, "备服务器:" + backups_ip + "\t端口:" + backups_port);
// 中心设置了备份服务器
if (!TextUtils.isEmpty(backups_ip) && backups_port > 0) {
// 备份ip、port与主服务ip、port一致
if (backups_ip.equals(cur_ip) && backups_port == cur_port) {
SocketAddress socket = new InetSocketAddress(cur_ip, cur_port);
mConnector.switchConnection(socket);
return;
}
// 开始切换到备份服务器
Log.d(TAG, "切换到备份服务器:" + backups_ip + "\t端口:" + backups_port);
SocketAddress socket = new InetSocketAddress(backups_ip, backups_port);
// 切换备份服务器
mConnector.switchConnection(socket);
}
} else { // 断开了备份服务器,切换到主服务器
isCurConnMainIp = true;
SocketAddress socket = new InetSocketAddress(cur_ip, cur_port);
mConnector.switchConnection(socket); // 切换备份服务器
}
}
}
@Override
public void connectOk() {
isActiveDisconnection = false;
Log.d(TAG, "连接平台成功");
sendKeepAliveRequest();
// 请求关联司机列表信息 - 下载驾驶员信息、驾驶员头像
mProtocolManager.sendBytesMsg(JTT905Comd.REQ_DRIVER_LIST_INFO, null);
// boolean isLogin = mProtocolPreference.isDriverLogin();
// Log.i(TAG, "connectOk() isLogin : " + isLogin);
// // 已签到
// if (isLogin) {
//
// Log.d(TAG, "connectOk() 驾驶员已签到,开始判断缓存头像是否存在...");
//
// String CertificateNum =
// mProtocolPreference.getEmploymentNumber();
//
// if (TextUtils.isEmpty(CertificateNum)) return;
//
// String path = ProtocolPreference.DEFAULT_DRIVER_PIC_SAVE_DIRECTORY + CertificateNum + ".jpg";
//
// // ***************** 判断缓存头像是否全部下载完毕 *****************
// File file = new File(path);
//
// // 不存在缓存头像
// if (!file.exists()) {
//
// Log.d(TAG, "connectOk() 驾驶员缓存头像不存在,开始请求...");
// // 请求关联司机列表信息 - 下载驾驶员信息、驾驶员头像
// mProtocolManager.sendBytesMsg(JTT905Comd.REQ_DRIVER_LIST_INFO,
// null);
// }
// }
// // 未签到
// else {
// Log.d(TAG, "connectOk() 驾驶员未签到,开始请求...");
// // 请求关联司机列表信息 - 下载驾驶员信息、驾驶员头像
// mProtocolManager.sendBytesMsg(JTT905Comd.REQ_DRIVER_LIST_INFO,
// null);
// }
// 获取设备Id
int devideId = JTTUtils.getDeviceId("与平台连接");
// 不存在此设备
if (devideId == -1) return;
// 更新设备的状态-正常
mJTTDBOperation.insert(devideId, 0);
// 如果连接上了服务器,发送ISU升级成功的消息
if (updateRebootFlag == 2) {
// 发升级结果报告消息给服务器
mProtocolManager.sendBytesMsg(JTT905Comd.ISU_UPDATE_RESULT_REPORT_MESSAGE, updateBytesArray.toBytes());
// clear
updateBytesArray.clear();
// false
isUpdate = false;
updateRebootFlag = 0;
}
// 检测中心设置参数,动态设置汇报时间间隔、距离间隔的值
updateReportParameter(false);
// 数据补传,补传的数据包括签到、签退、位置基本信息、营运记录
if (mDataReUpManager == null)
mDataReUpManager = DataReUpManager.getDataReUpManager(JTTBGService.this, mProtocolManager);
mDataReUpManager.reUpData();
}
@Override
public void connectError(SocketAddress s, Exception e) {
// 获取设备Id
int devideId = Utils.getDeviceId("与平台连接");
// 不存在此设备
if (devideId == -1) return;
// 更新设备的状态-异常
DBOperation.insert(devideId, 1);
if (s instanceof InetSocketAddress) {
InetSocketAddress address = (InetSocketAddress) s;
}
}
@Override
public void exceptionCaught(Throwable cause) {
Log.e(TAG, cause == null ? "exceptionCaught()..." : printfThrowable("exceptionCaught()", cause));
}
});
dispatchProtocol:平台回复或下发的消息最终都由initializationConnector方法的匿名接口ConnectionListener回调,经receiveData方法调用dispatchProtocol方法进行校验,如校验成功将由框架里协议部分的管理者对其进行下发并分发处理,架里协议部分的管理者类ProtocolManager类,
.ProtocolManager类的核心方法
onProtocol:该方法数据来自核心后台服务rmt.jtt.bgs.JTTBGService的dispatchProtocol方法,如校验成功后进行数据回调给onProtocol方法
createProtocol:该方法是实际终端与平台进行交互的地方,解析来自平台的指令并对其做出响应
@Override
public void onProtocol(Protocol protocol) {
if (protocol == null) return;
// 如果是中心/平台/服务器通用应答 -> 8001
if (protocol.getCommand() == JTT905Comd.CENTER_GENERAL_RESPONSE) {
// 消息体
byte[] MessageBody = protocol.getBody().toBytes();
// 取出中心应答ISU的指令ID
int AnswerID = JTTUtils.Byte2Int(new byte[] { MessageBody[2], MessageBody[3] });
// 中心应答位置信息汇报 -> 200
if (AnswerID == JTT905Comd.LOCATION_INFORMATION_REPORT) {
// 空转重清零
VehicleManager.getVehicleManager(mJTTBGService).put(VehicleManager.VEHICLESTATEMAP, 5, 0);
// 重转空清零
VehicleManager.getVehicleManager(mJTTBGService).put(VehicleManager.VEHICLESTATEMAP, 6, 0);
// 车辆非法点火
VehicleManager.getVehicleManager(mJTTBGService).put(VehicleManager.WARNINGMARKMAP, 24, 0);
}
// 摄像头图像上传 || 音视频上传
if (AnswerID == JTT905Comd.CAMERA_PICTURE_UPLOAD || AnswerID == JTT905Comd.AUDIO_AND_VIDEO_UPLOAD) {
// 继续TCP分包的维持条件
if (mMediaFileSendManager != null && MessageBody[4] == 0)
// 继续上传TCP分包
mMediaFileSendManager.resumUpload(protocol);
}
if (AnswerID == JTT905Comd.DMS_ALARM_REPORT) {
JTTUtils.FileEncoder(mPicture, mJTTDBOperation, mPath, true, mMediaFileSendManager, 0, ProtocolManager.this);
}
// 终止
return;
}
// 上班签到、下班签退信息不需要累积角标消息数目
// if (protocol.getCommand() != JTT905Comd.CHECK_IN_INFORMATION_UPLOADED && protocol.getCommand() != JTT905Comd.CHECK_OUT_INFORMATION_UPLOAD) {
// // 更新905入口浮窗的角标消息的值
// update905WindowNumber();
// }
// 生成协议消息并开始分发协议
createProtocol(protocol);
}
大概的流程就是这样 下次分享808.
本文地址:https://blog.csdn.net/u011694328/article/details/109255424