用户登录
用户注册

分享至

Android GB905协议详解

  • 作者: 用户61403927
  • 来源: 51数据库
  • 2021-08-23

最近发现,深圳做网约车和货车的协议的公司越来越多了,之前在公司做过一些这方面的项目。就来写个这方面的文章记录下,也顺便分享下。

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.

软件
前端设计
程序设计
Java相关