-[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":695,"versionName":"2011121531","enabled":true,"outputFile":"ICSer_V695_2011121531_release.apk","fullName":"release","baseName":"release"},"path":"ICSer_V695_2011121531_release.apk","properties":{}}]
\ No newline at end of file
+[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":696,"versionName":"2011142302","enabled":true,"outputFile":"ICSer_V696_2011142302_release.apk","fullName":"release","baseName":"release"},"path":"ICSer_V696_2011142302_release.apk","properties":{}}]
\ No newline at end of file
\r
//启动结束设置标志位,让心率和体温检测可以正常执行。\r
server_starting=false;\r
+\r
+ //重置缓存中的在等待命令\r
+ Deliver.resetCMDReocrdsDB();\r
+\r
ReConnectToServer();\r
}\r
\r
// 由于计步接口没有提供设置步数。所以暂时只能清零,不能解决午夜还在运动的情况,会丢失一两次的数据。但是影响不大\r
runtime.setLastStepCountForBT(0);\r
runtime.setLastStepCount(0);\r
- this.locationClient.updateStepCount(); //重置后马上跟新当前步数为0, 以便及时更新睡眠信息 一分钟内更新的步数可以忽略不记,从而平滑切换 0点reset 计步数据的计算问题\r
- updateSleepDate();//更新睡眠信息\r
+ //重置后马上跟新当前步数为0, 以便及时更新睡眠信息 一分钟内更新的步数可以忽略不记,从而平滑切换 0点reset 计步数据的计算问题\r
+ this.locationClient.updateStepCount();\r
+ //更新睡眠信息\r
+ updateSleepDate();\r
+ //清除已经发送的历史记录\r
+ runtime.getDbHelper().clearCMDRecordsHaveSent();\r
setCleanStepCountAlarm();\r
Config.logBootDate(this);//重置步数的时候,要把开机时间也更新一下,否则第二天 任意时间重启都会造成计步数据清零\r
return Service.START_STICKY;\r
}else {\r
if (retry_connect_count >= retry_connect_max_times) {\r
\r
- ICLogger.i("retry " + retry_connect_count + " 次 >= " + retry_connect_max_times + " ,停止重试!等待下一次心跳再重试!");\r
no_network_Heartbeats_Count++;\r
+ ICLogger.i("retry " + retry_connect_count + " 次 >= " + retry_connect_max_times + " ,停止重试!等待下一次心跳再重试! 已经第"+no_network_Heartbeats_Count+"次心跳都没有连接服务器成功!");\r
stopConnectionRetryTimer();\r
\r
} else {\r
private static final String ALARM_MSG_RECORDS_MIME = "vnd.android.cursor.dir/vnd.com.enqualcomm.support.alarmMSG";\r
public static final Uri ALARM_MSG_RECORDS_URI = Uri.parse("content://com.enqualcomm.support/alarmMSG");\r
\r
+ public static final String PROTOCOL_CMD_RECORDS_TABLE_NAME = "PROTOCOL_CMD_RECORDS";\r
+ private static final int PROTOCOL_CMD_RECORDS = 27;\r
+ private static final String PROTOCOL_CMD_RECORDS_MIME = "vnd.android.cursor.dir/vnd.com.enqualcomm.support.cmdRecord";\r
+ public static final Uri PROTOCOL_CMD_RECORDS_URI = Uri.parse("content://com.enqualcomm.support/cmdRecord");\r
\r
private SQLiteDatabase db;\r
\r
URI_MATCHER.addURI("com.enqualcomm.support", "eventMessage", EVENT_MESSAGE); //24\r
URI_MATCHER.addURI("com.enqualcomm.support", "sit", SIT); //25\r
URI_MATCHER.addURI("com.enqualcomm.support", "alarmMSG", ALARM_MSG_RECORDS); //26\r
+ URI_MATCHER.addURI("com.enqualcomm.support", "cmdRecord", PROTOCOL_CMD_RECORDS); //27\r
\r
}\r
\r
i = bulkInsertLocale(ALARM_MSG_RECORDS_TABLE_NAME, paramArrayOfContentValues);\r
getContext().getContentResolver().notifyChange(ALARM_MSG_RECORDS_URI, null);\r
break;\r
+ case PROTOCOL_CMD_RECORDS:\r
+ i = bulkInsertLocale(PROTOCOL_CMD_RECORDS_TABLE_NAME, paramArrayOfContentValues);\r
+ getContext().getContentResolver().notifyChange(PROTOCOL_CMD_RECORDS_URI, null);\r
+ break;\r
default:\r
break;\r
}\r
if (j != 0) {\r
getContext().getContentResolver().notifyChange(ALARM_MSG_RECORDS_URI, null);\r
\r
+ }\r
+ i = j;\r
+ break;\r
+ case PROTOCOL_CMD_RECORDS:\r
+\r
+ j = this.db.delete(PROTOCOL_CMD_RECORDS_TABLE_NAME, whereClause, whereArgs);\r
+\r
+ if (j != 0) {\r
+ getContext().getContentResolver().notifyChange(PROTOCOL_CMD_RECORDS_URI, null);\r
+\r
}\r
i = j;\r
break;\r
return SIT_MIME;\r
case ALARM_MSG_RECORDS:\r
return ALARM_MSG_RECORDS_MIME;\r
+ case PROTOCOL_CMD_RECORDS:\r
+ return PROTOCOL_CMD_RECORDS_MIME;\r
default:\r
return null;\r
} \r
paramUri = ContentUris.withAppendedId(paramUri, this.db.insert(ALARM_MSG_RECORDS_TABLE_NAME, null, paramContentValues));\r
getContext().getContentResolver().notifyChange(ALARM_MSG_RECORDS_URI, null);\r
break;\r
+ case PROTOCOL_CMD_RECORDS:\r
+ paramUri = ContentUris.withAppendedId(paramUri, this.db.insert(PROTOCOL_CMD_RECORDS_TABLE_NAME, null, paramContentValues));\r
+ getContext().getContentResolver().notifyChange(PROTOCOL_CMD_RECORDS_URI, null);\r
+ break;\r
default:\r
return null;\r
} \r
return this.db.query(SIT_TABLE_NAME, columns, paramString1, paramArrayOfString2, null, null, paramString2);\r
case ALARM_MSG_RECORDS:\r
return this.db.query(ALARM_MSG_RECORDS_TABLE_NAME, columns, paramString1, paramArrayOfString2, null, null, paramString2);\r
+ case PROTOCOL_CMD_RECORDS:\r
+ return this.db.query(PROTOCOL_CMD_RECORDS_TABLE_NAME, columns, paramString1, paramArrayOfString2, null, null, paramString2);\r
default:\r
return null;\r
}\r
i = j;\r
}\r
\r
+ break;\r
+ case PROTOCOL_CMD_RECORDS:\r
+\r
+ j = this.db.update(PROTOCOL_CMD_RECORDS_TABLE_NAME, paramContentValues, whereClause, whereArgs);\r
+ i = j;\r
+ if (j != 0) {\r
+ getContext().getContentResolver().notifyChange(PROTOCOL_CMD_RECORDS_URI, null);\r
+ i = j;\r
+ }\r
+\r
break;\r
default:\r
break;\r
import com.enqualcomm.support.bean.Contact;\r
import com.enqualcomm.support.bean.ICLocation;\r
import com.enqualcomm.support.bean.Runtime;\r
+import com.enqualcomm.support.bean.StringMessage;\r
import com.enqualcomm.support.service.AudioService;\r
import com.enqualcomm.support.service.Deliver;\r
import com.enqualcomm.support.service.SmsDatabaseChaneObserver;\r
Deliver.sendLocationMSG(protocolAPIHelper.getLBSLocationMSG(runtime));\r
}\r
\r
+ }else if(cmd.startsWith("testCMDRecords")) {\r
+\r
+ if(CoreService.getInstance()!=null){\r
+ StringMessage msg=protocolAPIHelper.getLBSLocationMSG(runtime);\r
+ runtime.getDbHelper().insertCMDRecord(msg);\r
+ Deliver.dumpMessage(msg);\r
+ Util.mSleep(2000);\r
+ msg=protocolAPIHelper.getLBSLocationMSG(runtime);\r
+ runtime.getDbHelper().insertCMDRecord(msg);\r
+ Deliver.dumpMessage(msg);\r
+ Util.mSleep(2000);\r
+ msg=protocolAPIHelper.getLBSLocationMSG(runtime);\r
+ runtime.getDbHelper().insertCMDRecord(msg);\r
+ Deliver.dumpMessage(msg);\r
+\r
+ Deliver.triggerSendThread();\r
+ /*\r
+ msg=runtime.getDbHelper().queryNotSentCMDRecord();\r
+ Deliver.dumpMessage(msg);\r
+ runtime.getDbHelper().updateCMDRecord(msg.getIndex(),1);\r
+ msg=runtime.getDbHelper().queryWaitCMDRecord();\r
+ Deliver.dumpMessage(msg);\r
+ runtime.getDbHelper().updateCMDRecord(msg.getIndex(),2);\r
+ Deliver.dumpMessage(msg);\r
+\r
+ msg=runtime.getDbHelper().queryNotSentCMDRecord();\r
+ Deliver.dumpMessage(msg);\r
+ runtime.getDbHelper().updateCMDRecord(msg.getIndex(),1);\r
+ msg=runtime.getDbHelper().queryWaitCMDRecord();\r
+ Deliver.dumpMessage(msg);\r
+ runtime.getDbHelper().updateCMDRecord(msg.getIndex(),2);\r
+ Deliver.dumpMessage(msg);\r
+\r
+ msg=runtime.getDbHelper().queryNotSentCMDRecord();\r
+ Deliver.dumpMessage(msg);\r
+ runtime.getDbHelper().updateCMDRecord(msg.getIndex(),1);\r
+ msg=runtime.getDbHelper().queryWaitCMDRecord();\r
+ Deliver.dumpMessage(msg);\r
+ runtime.getDbHelper().updateCMDRecord(msg.getIndex(),2);\r
+ Deliver.dumpMessage(msg);\r
+*/\r
+\r
+ }\r
+\r
}\r
}\r
}
\ No newline at end of file
\r
\r
public class MySqlitOpenHelper extends SQLiteOpenHelper {\r
- private static int dbVersion=9;\r
+ private static int dbVersion=10;\r
public MySqlitOpenHelper(Context paramContext) { super(paramContext, "data", null, dbVersion); }\r
\r
public void onCreate(SQLiteDatabase sqlite) {\r
sqlite.execSQL("CREATE TABLE DOWNLOADINFO(_id INTEGER PRIMARY KEY AUTOINCREMENT ,IMSI TEXT,TIME TEXT,NUMBER TEXT,TOTAL_NUMBER TEXT)");\r
sqlite.execSQL("CREATE TABLE STHEART_RATE(_id INTEGER PRIMARY KEY AUTOINCREMENT ,START_TIME TEXT ,END_TIME TEXT ,WEEK TEXT ,STATUS TEXT,INTERVAL TEXT)");\r
sqlite.execSQL("CREATE TABLE UNREADMSG(_id INTEGER PRIMARY KEY AUTOINCREMENT ,CATEGORY INTEGER ,ID TEXT ,COUNT INTEGER,RECVTIME INTEGER)");\r
+ create_tables(sqlite);\r
+}\r
+\r
\r
+ private void create_tables(SQLiteDatabase sqlite){\r
\r
- /*\r
+ /*\r
系统对话消息表,包含微聊,系统推送文本,上传图片,上传语音等一系列消息。\r
Pushtxt、message\r
数据库 Message,记录所有message,包括类型(下发txt,chat msg, chat image),文件url或者文本内容。\r
2个数据库,时间段和当前状态记录(包括历史记录)。\r
*/\r
sqlite.execSQL("CREATE TABLE ANTIOFF(_id INTEGER PRIMARY KEY AUTOINCREMENT ,START_TIME TEXT ,END_TIME TEXT ,WEEK TEXT ,STATUS TEXT,CUR_SYS_STATUS TEXT)");\r
- // sqlite.execSQL("CREATE TABLE ANTIOFF_RECORDS(_id INTEGER PRIMARY KEY AUTOINCREMENT ,TIME TEXT ,STATUS TEXT,CUR_SYS_STATUS TEXT)");\r
+ // sqlite.execSQL("CREATE TABLE ANTIOFF_RECORDS(_id INTEGER PRIMARY KEY AUTOINCREMENT ,TIME TEXT ,STATUS TEXT,CUR_SYS_STATUS TEXT)");\r
\r
/*\r
睡眠\r
\r
/*所有报警的记录表,包括开关机事件*/\r
sqlite.execSQL("CREATE TABLE ALARM_MSG_RECORDS(_id INTEGER PRIMARY KEY AUTOINCREMENT ,DATE TEXT, TIME TEXT ,ALARM TEXT )");\r
+\r
+ /*缓存协议记录*/\r
+ sqlite.execSQL("CREATE TABLE PROTOCOL_CMD_RECORDS(_id INTEGER PRIMARY KEY AUTOINCREMENT , FLAG INTEGER, DATE TEXT, TIME TEXT ,TOPIC TEXT,CMD TEXT )");\r
+\r
}\r
\r
public void onUpgrade(SQLiteDatabase sqlite, int oldDBversion, int newDBversion) {\r
- if (oldDBversion <dbVersion) {\r
+ if (oldDBversion < 9) {\r
ICLogger.i("数据库升级 to "+dbVersion);\r
sqlite.execSQL("DROP TABLE IF EXISTS MESSAGE");\r
sqlite.execSQL("DROP TABLE IF EXISTS EVENT_MESSAGE");\r
sqlite.execSQL("DROP TABLE IF EXISTS SLEEP_STATUS");\r
sqlite.execSQL("DROP TABLE IF EXISTS SIT");\r
sqlite.execSQL("DROP TABLE IF EXISTS ALARM_MSG_RECORDS");\r
-\r
- /*\r
-系统对话消息表,包含微聊,系统推送文本,上传图片,上传语音等一系列消息。\r
-Pushtxt、message\r
-数据库 Message,记录所有message,包括类型(下发txt,chat msg, chat image),文件url或者文本内容。\r
-*/\r
- sqlite.execSQL("CREATE TABLE MESSAGE(_id INTEGER PRIMARY KEY AUTOINCREMENT ,CATEGORY INTEGER ,CONTENT TEXT ,PREVIEW TEXT ,STATUS INTEGER ,IN_OR_OUT INTEGER ,CONTACT_CATEGORY INTEGER ,CONTACT_NUMBER TEXT ,SERVER_TIME TEXT ,LOCAL_TIME INTEGER ,ICON TEXT)");\r
- //sqlite.execSQL("CREATE TABLE MESSAGE(_id INTEGER PRIMARY KEY AUTOINCREMENT ,CATEGORY INTEGER ,CONTENT TEXT ,PREVIEW TEXT ,STATUS INTEGER ,IN_OR_OUT INTEGER ,CONTACT_CATEGORY INTEGER ,CONTACT_NUMBER TEXT ,SERVER_TIME TEXT ,LOCAL_TIME INTEGER ,ICON TEXT,FILETYPE INTEGER,DATATYPE INTEGER)");\r
-\r
-\r
-\r
-//日志表格,存储开机关机,低电报警等消息。。。\r
- sqlite.execSQL("CREATE TABLE EVENT_MESSAGE(_id INTEGER PRIMARY KEY AUTOINCREMENT , EVENT_TYPE INTEGER, EVENT_NAME TEXT, TIME TEXT )");\r
-\r
-/*\r
-脱腕检测时段AntiOff\r
-本身需要时间段的,在时间段内才进行 脱腕检测。没有设置时间段的话,或者从0:00~23:59表示持续判断脱腕检测。\r
-2个数据库,时间段和当前状态记录(包括历史记录)。\r
-*/\r
- sqlite.execSQL("CREATE TABLE ANTIOFF(_id INTEGER PRIMARY KEY AUTOINCREMENT ,START_TIME TEXT ,END_TIME TEXT ,WEEK TEXT ,STATUS TEXT,CUR_SYS_STATUS TEXT)");\r
- // sqlite.execSQL("CREATE TABLE ANTIOFF_RECORDS(_id INTEGER PRIMARY KEY AUTOINCREMENT ,TIME TEXT ,STATUS TEXT,CUR_SYS_STATUS TEXT)");\r
-\r
-/*\r
-睡眠\r
-根据时间段进行检测,时间段内,根据翻滚次数确认其睡眠类型。如深度睡眠或者浅睡。\r
-2个数据库翻滚次数记录,当每日睡眠情况统计计算,检测时间段记在settings里,就不放在数据库了。\r
-*/\r
- /*每次打点的记录表 SLEEP_DATE 代表记录睡眠的日期,例如 22日上午7:00的计入到21日的睡眠记录中。 DATE代表记录的时间,此出应该等于上文的 22日 7:00 */\r
- sqlite.execSQL("CREATE TABLE SLEEP_RECORDS(_id INTEGER PRIMARY KEY AUTOINCREMENT ,SLEEP_DATE TEXT,DATE TEXT, STEPCOUNT INTEGER ,ROLLTIMES INTEGER ,STATUS TEXT )");\r
- /*计算后的分值,每天会在睡眠结束后计算Records获得*/\r
- sqlite.execSQL("CREATE TABLE SLEEP_STATUS(_id INTEGER PRIMARY KEY AUTOINCREMENT , DATE TEXT , DEEP_SLEEP INTEGER , LIGHT_SLEEP INTEGER ,SCORE INTEGER )");\r
-\r
-/*久坐\r
-根据时间段进行检测,时间段内,根据计步变化确认其是否在坐着。\r
-1个数据库 久坐检测时间段,报警时长度要求,报警记录*/\r
- sqlite.execSQL("CREATE TABLE SIT(_id INTEGER PRIMARY KEY AUTOINCREMENT ,START_TIME TEXT ,END_TIME TEXT ,WEEK TEXT ,INTERVAL INTEGER)");\r
-\r
-\r
- /*所有报警的记录表,包括开关机事件*/\r
- sqlite.execSQL("CREATE TABLE ALARM_MSG_RECORDS(_id INTEGER PRIMARY KEY AUTOINCREMENT ,DATE TEXT, TIME TEXT ,ALARM TEXT )");\r
-\r
+ create_tables(sqlite);\r
+ }else if (oldDBversion == 9 ){\r
+ /*缓存协议记录*/\r
+ sqlite.execSQL("CREATE TABLE PROTOCOL_CMD_RECORDS(_id INTEGER PRIMARY KEY AUTOINCREMENT , FLAG INTEGER, DATE TEXT, TIME TEXT ,TOPIC TEXT,CMD TEXT )");\r
}\r
}\r
}\r
import java.util.ArrayList;\r
\r
public class StringMessage {\r
+ //暂时未用\r
ArrayList<byte[]> bs;\r
- \r
+\r
+ //目前作为消息主体,除了mqtt协议还需要一个topic(fragments[0]) , 其他协议就是要发送的内容本身。\r
private String cache;\r
- \r
+\r
+ //数据库中的index\r
+ private int index=-1;\r
+\r
+ //命令日期\r
+ private String date=null;\r
+\r
+ //命令时间\r
+ private String time=null;\r
+ //mqtt协议中第一条就是 topic,其他协议中就是cmdname或者无用\r
protected String[] fragments;\r
- \r
- public boolean u8;\r
- \r
+\r
+ //发送标志(表示已经接收到服务器返回消息) , 0 未发送, 1 发送等回复, 2 已回复\r
+ private int sentFlag;\r
+\r
+ //除mqtt协议可以使用\r
public StringMessage(String paramString) {\r
this.cache = paramString;\r
- this.u8 = true;\r
+ this.sentFlag = 0;\r
+ }\r
+\r
+ public String getDate(){\r
+ return date;\r
}\r
- \r
- public StringMessage(String[] paramArrayOfString) { this(paramArrayOfString, true); }\r
- \r
+\r
+ public String getTime(){\r
+ return time;\r
+ }\r
+\r
+ public int getIndex(){\r
+ return index;\r
+ }\r
+\r
+ public void setIndex(int i){\r
+ index=i;\r
+ }\r
+\r
+ public void setDate(String date1,String time1){\r
+ date=date1;\r
+ time=time1;\r
+ }\r
+ //mqtt协议使用 设置topic\r
+ public StringMessage(String[] paramArrayOfString) { this(paramArrayOfString, 0); }\r
+\r
+\r
+ //暂时未用,二进制数据备用\r
public StringMessage(String[] paramArrayOfString, ArrayList<byte[]> paramArrayList) {\r
this.fragments = paramArrayOfString;\r
this.bs = paramArrayList;\r
+ this.sentFlag=0;\r
}\r
- \r
- public StringMessage(String[] paramArrayOfString, boolean paramBoolean) {\r
+\r
+ //mqtt协议使用,设置topic 以及 发送标志\r
+ public StringMessage(String[] paramArrayOfString, int paramBoolean) {\r
this.fragments = paramArrayOfString;\r
- this.u8 = paramBoolean;\r
+ this.sentFlag = paramBoolean;\r
+ }\r
+\r
+ //设置发送flag\r
+ public void setSentFlag(int f){\r
+ sentFlag=f;\r
+ }\r
+\r
+ //获取发送flag\r
+ public int haveSent(){\r
+ return sentFlag;\r
}\r
- \r
+\r
+ //未用\r
public String[] all() { return this.fragments; }\r
- \r
+\r
+ //获取topic内容\r
public String cmd() { return this.fragments[0]; }\r
- \r
+\r
+ //获取协议消息主体内容\r
public String isFromCache() { return this.cache; }\r
- \r
+\r
+ //更新协议消息主体内容\r
public void refresh(String paramString) { this.cache = paramString; }\r
- \r
+\r
+ //未用\r
public int size() { return (this.fragments != null) ? this.fragments.length : 0; }\r
- \r
+\r
+ //未用\r
public ArrayList<byte[]> source() { return this.bs; }\r
}\r
\r
import com.enqualcomm.support.CoreService;\r
import com.enqualcomm.support.R;\r
import com.enqualcomm.support.bean.VoiceContent;\r
+import com.enqualcomm.support.utils.DBHelper;\r
import com.enqualcomm.support.utils.TemperatureUtil;\r
import com.enqualcomm.support.utils.TimeUtil;\r
import com.ic.protocols.protocolAPIHelper;\r
}\r
private static boolean NeedCheckServerResponse=true;\r
private static boolean ServerResponsed=false;\r
- private static StringMessage needCheckResponseCMD=null;\r
private static int CheckCount=0;\r
\r
private static void checkNeedServerResponse(StringMessage cmd){\r
NeedCheckServerResponse=true;\r
}\r
}\r
-\r
+ public static void dumpMessage(StringMessage msg){\r
+ StringBuilder sb = new StringBuilder("StringMessage ");\r
+ if (msg!=null) {\r
+ sb.append("index ").append(msg.getIndex())\r
+ .append("\nDate ").append(msg.getDate()).append(msg.getTime())\r
+ .append("\nflag ").append(msg.haveSent())\r
+ .append("\ntopic ").append(msg.cmd())\r
+ .append("\ncmd ").append(msg.isFromCache()).append("\n");\r
+ }\r
+ ICLogger.i(sb.toString());\r
+ }\r
public static boolean getAndSendMsgFromQueue(){\r
boolean ret=false;\r
if (mRuntime.getUseQueue()) {\r
// loadMessage2Queue();\r
\r
//检查刚刚发送出去的包是否需要检查server response\r
- checkNeedServerResponse(needCheckResponseCMD);\r
+\r
+ StringMessage msgWait=mRuntime.getDbHelper().queryWaitCMDRecord();\r
+ dumpMessage(msgWait);\r
+ checkNeedServerResponse(msgWait);\r
\r
//如果需要,且没有服务器反馈\r
- if (NeedCheckServerResponse==true && ServerResponsed==false){\r
+ if (NeedCheckServerResponse==true && ServerResponsed==false) {\r
//刚刚发送的包不为空,且检测次数小于3,则保留数据,进行下一次重试。\r
-// if (needCheckResponseCMD!=null && CheckCount < 3) {\r
- if (needCheckResponseCMD!=null ) { //一直检测 是否服务器收到。\r
- //如果cmd有效,且尝试次数小于3, 没有收到反馈的情况下,可以重新插入queue进行下一次尝试!\r
- ICLogger.i("checkSrvResponse "+CheckCount+" times for "+needCheckResponseCMD.cmd()+ " "+needCheckResponseCMD.isFromCache());\r
- if (!ServiceUtil.offerQueue(needCheckResponseCMD, true)) {\r
- ICLogger.i("checkSrvResponse failed ,重新添加MessageQueue 已满,数据将被丢弃!" + needCheckResponseCMD.cmd()+ " "+needCheckResponseCMD.isFromCache());\r
- if (Config.LOG_TOFILE)\r
- ICLogger.logToFile("APILog", "response failed queueFullskip! " + needCheckResponseCMD.cmd()+ " "+needCheckResponseCMD.isFromCache());\r
- }else{\r
- if (Config.LOG_TOFILE)\r
- ICLogger.logToFile("APILog", "response failed retry ! " +CheckCount+" " + needCheckResponseCMD.cmd()+ " "+needCheckResponseCMD.isFromCache());\r
- }\r
- CheckCount++;\r
- //尝试次数大于5 ,可能是还没有发送过数据,或者超过重试次数,暂停提取queue中数据进,下次心跳再开始发送\r
- if (CheckCount>5){\r
- ICLogger.i("checkSrvResponse CheckCount="+CheckCount+" Timeout or cmd is null, skip ");\r
- if (Config.LOG_TOFILE)\r
- ICLogger.logToFile("APILog", "response timeout skip! " );\r
- CheckCount=0;\r
- if(mLock!=null && mLock.isLocked())\r
- mLock.unlock();\r
- return false;\r
- }\r
+ //如果cmd有效,且尝试次数小于3, 没有收到反馈的情况下,可以重新插入queue进行下一次尝试!\r
+ ICLogger.i("checkSrvResponse " + CheckCount + " times for " + msgWait.cmd() + " " + msgWait.isFromCache());\r
+ if (msgWait.getIndex() >= 0)\r
+ mRuntime.getDbHelper().updateCMDRecord(msgWait.getIndex(), 0);\r
+ dumpMessage(msgWait);\r
+ CheckCount++;\r
+ //尝试次数大于5 ,可能是还没有发送过数据,或者超过重试次数,暂停提取queue中数据进,下次心跳再开始发送\r
+ if (CheckCount > 5) {\r
+ ICLogger.i("checkSrvResponse CheckCount=" + CheckCount + " Timeout or cmd is null, skip ");\r
+ if (Config.LOG_TOFILE)\r
+ ICLogger.logToFile("APILog", "response timeout skip! ");\r
+ CheckCount = 0;\r
+ if (mLock != null && mLock.isLocked())\r
+ mLock.unlock();\r
+ return false;\r
}\r
+\r
}\r
\r
- if (!queue.isEmpty()) {\r
StringBuilder stringBuilder = new StringBuilder();\r
if (checkNetwork()) {\r
- StringMessage stringMessage = queue.poll();\r
- if (stringMessage != null) {\r
- String cmd = stringMessage.isFromCache();\r
- String topic = stringMessage.cmd();\r
+ StringMessage msgSent=mRuntime.getDbHelper().queryNotSentCMDRecord();\r
+ dumpMessage(msgSent);\r
+ if (msgSent != null) {\r
+ String cmd = msgSent.isFromCache();\r
+ String topic = msgSent.cmd();\r
stringBuilder.append(topic);\r
stringBuilder.append(" ");\r
stringBuilder.append(cmd);\r
stringBuilder.append("\n");\r
if (checkNetwork()) {\r
- connection.send(stringMessage);\r
-// stringMessage = queue.poll();\r
- needCheckResponseCMD=stringMessage;\r
+\r
+ connection.send(msgSent);\r
//如果需要Check\r
if (NeedCheckServerResponse==true){\r
ICLogger.i("checkSrvResponse "+topic+" "+cmd);\r
ServerResponsed=false;\r
+ mRuntime.getDbHelper().updateCMDRecord(msgSent.getIndex(),1);\r
+ }else{\r
+ ICLogger.i("no need checkSrvResponse "+topic+" "+cmd);\r
+ ServerResponsed=false;\r
+ mRuntime.getDbHelper().updateCMDRecord(msgSent.getIndex(),2);\r
}\r
ret=true;\r
} else {\r
//已经拿到的缓存,如果刚巧没有网络,就原路放回去\r
ICLogger.i("网络不通,不能发送!");\r
- if (!ServiceUtil.offerQueue(stringMessage,true)){\r
- ICLogger.i("MessageQueue 已满,数据将被丢弃!"+ stringMessage);\r
- if (Config.LOG_TOFILE) ICLogger.logToFile( "APILog", " queueFullskip! " + stringMessage);\r
- }\r
+ if (msgWait.getIndex() >= 0)\r
+ mRuntime.getDbHelper().updateCMDRecord(msgSent.getIndex(), 0);\r
+ dumpMessage(msgWait);\r
ret=false;\r
}\r
}else{\r
}\r
}\r
str = stringBuilder.toString();\r
- } else {\r
- str = "no message!\n";\r
- }\r
ICLogger.i("send cached cmd : \n"+str);\r
- ICLogger.i("\n"+queue.size()+" left in Queue!");\r
+ //ICLogger.i("\n"+queue.size()+" left in Queue!");\r
}finally {\r
if(mLock!=null && mLock.isLocked())\r
mLock.unlock();\r
return ret;\r
}\r
\r
-\r
+ public static void resetCMDReocrdsDB(){\r
+ //正常应该只有一个在wait的记录,如果开机的时候,可能需要处理一下第一条记录\r
+ StringMessage msgWait=mRuntime.getDbHelper().queryWaitCMDRecord();\r
+ dumpMessage(msgWait);\r
+ if (msgWait!=null)\r
+ mRuntime.getDbHelper().updateCMDRecord(msgWait.getIndex(),0);\r
+ }\r
public static void sendLocationMSG( String Msg){\r
\r
if(Msg==null ||Msg.trim().isEmpty()){\r
}\r
\r
if(mRuntime.getUseQueue()){\r
- if(!ServiceUtil.offerQueue(Msg)) {\r
- ICLogger.i(" MessageQueue 已满,数据将被丢弃," + Msg.cmd()+" "+Msg.isFromCache());\r
- if (Config.LOG_TOFILE)ICLogger.logToFile( "APILog", " queueFullskip " + Msg.cmd()+" "+Msg.isFromCache());\r
- }else{\r
- if (Config.LOG_TOFILE)ICLogger.logToFile( "APILog", " queueCMD " + Msg.cmd()+" "+Msg.isFromCache());\r
- }\r
-// if(queue.size()>5) //测试queue 发送逻辑用\r
- triggerSendThread();\r
+ long id=mRuntime.getDbHelper().insertCMDRecord(Msg);\r
+ Msg.setIndex((int)id);\r
+ dumpMessage(Msg);\r
+ triggerSendThread();\r
}else {\r
if (checkNetwork()) {\r
ICLogger.i(" first send " + Msg);\r
//如果需要检测是否响应。\r
if (NeedCheckServerResponse==true){\r
\r
- if(needCheckResponseCMD!=null) {\r
- ICLogger.i("====== checkSrvResponse cmd "+cmd+" msg "+protocolAPIHelper.isCmdStr (needCheckResponseCMD));\r
- if( cmd.equals(protocolAPIHelper.isCmdStr (needCheckResponseCMD))){\r
- ICLogger.i("checkSrvResponse "+cmd+" "+protocolAPIHelper.isCmdStr (needCheckResponseCMD)+" is responsed!");\r
+ StringMessage msgWait=mRuntime.getDbHelper().queryWaitCMDRecord();\r
+ dumpMessage(msgWait);\r
+ if(msgWait!=null) {\r
+ ICLogger.i("====== checkSrvResponse cmd "+cmd+" msg "+protocolAPIHelper.isCmdStr (msgWait));\r
+ if( cmd.equals(protocolAPIHelper.isCmdStr (msgWait))){\r
+ ICLogger.i("checkSrvResponse "+cmd+" "+protocolAPIHelper.isCmdStr (msgWait)+" is responsed!");\r
ServerResponsed=true;\r
CheckCount=0;\r
}\r
}\r
\r
\r
+\r
private void playVoice(Context paramContext,String voicefile) {\r
AudioService.getInstance().play(voicefile);\r
}\r
import com.enqualcomm.support.bean.SleepInfo;\r
import com.enqualcomm.support.bean.SleepRecord;\r
import com.enqualcomm.support.bean.StheartRate;\r
+import com.enqualcomm.support.bean.StringMessage;\r
import com.enqualcomm.support.bean.Weather;\r
\r
import java.util.ArrayList;\r
\r
}\r
\r
+//sqlite.execSQL("CREATE TABLE PROTOCOL_CMD_RECORDS(_id INTEGER PRIMARY KEY AUTOINCREMENT , FLAG INTEGER, DATE TEXT, TIME TEXT ,TOPIC TEXT,CMD TEXT )");\r
+\r
+ public long insertCMDRecord(StringMessage msg){\r
+ ContentValues values = new ContentValues();\r
+ values.put("FLAG",msg.haveSent());\r
+ if(msg.getDate()==null || msg.getTime()==null)\r
+ msg.setDate(TimeUtil.getSystemDateYYMMDD(),TimeUtil.getSystemTimeHHmmss());\r
+ values.put("DATE",msg.getDate());\r
+ values.put("TIME",msg.getTime());\r
+ values.put("TOPIC",msg.cmd());\r
+ values.put("CMD",msg.isFromCache());\r
+ long raw_contactID = ContentUris.parseId(cr.insert(ICContentProvider.PROTOCOL_CMD_RECORDS_URI, values));\r
+\r
+ return raw_contactID;\r
+ }\r
+\r
+\r
+ //\r
+ public void updateCMDRecord(int id, int flag){\r
+\r
+ String WhereClause=null;\r
+ if (id>=0) {\r
+ WhereClause=new StringBuilder("_id=").append(id).toString();\r
+\r
+ ContentValues flagcontent = new ContentValues();\r
+ flagcontent.put("FLAG", flag);\r
+ this.cr.update(ICContentProvider.PROTOCOL_CMD_RECORDS_URI, flagcontent, WhereClause, (String[])null);\r
+ }\r
+ }\r
+\r
+ public void clearCMDRecordsHaveSent(){\r
+ ContentResolver pcr = this.cr;\r
+ Uri table = ICContentProvider.PROTOCOL_CMD_RECORDS_URI;\r
+ StringBuilder where = new StringBuilder();\r
+ where.append("FLAG=2");\r
+ ICLogger.i("delete cmdRecords have sent ");\r
+ pcr.delete(table, where.toString(), (String[])null);\r
+ }\r
+\r
+ public StringMessage queryNotSentCMDRecord(){\r
+ ContentResolver pcr = this.cr;\r
+ Uri table = ICContentProvider.PROTOCOL_CMD_RECORDS_URI;\r
+ StringBuilder where = new StringBuilder();\r
+ where.append("FLAG=0");\r
+ ICLogger.i("Query cmdRecords "+where);\r
+ Cursor cmdrecords = pcr.query(table, (String[])null, where.toString(), (String[])null, (String)null);\r
+ StringMessage msg=null;\r
+ if (cmdrecords != null) {\r
+ int score=0;\r
+ if (cmdrecords.getCount()> 0) {\r
+ if (cmdrecords.moveToFirst()) {\r
+ String topic=cmdrecords.getString(cmdrecords.getColumnIndex("TOPIC"));\r
+ String cmd=cmdrecords.getString(cmdrecords.getColumnIndex("CMD"));\r
+ String date=cmdrecords.getString(cmdrecords.getColumnIndex("DATE"));\r
+ String time=cmdrecords.getString(cmdrecords.getColumnIndex("TIME"));\r
+ int flag=cmdrecords.getInt(cmdrecords.getColumnIndex("FLAG"));\r
+ int index=cmdrecords.getInt(cmdrecords.getColumnIndex("_id"));\r
+\r
+ msg=new StringMessage(new String[]{topic});\r
+ msg.refresh(cmd);\r
+ msg.setDate(date,time);\r
+ msg.setSentFlag(flag);\r
+ msg.setIndex(index);\r
+ ICLogger.i("get cmd Record not sent response _id "+index + " "+date+time+" topic "+topic+" cmd "+cmd);\r
+\r
+ }\r
+ }\r
+ cmdrecords.close();\r
+\r
+ if (msg==null)\r
+ ICLogger.i("no cmd record in not sent status !");\r
+ }\r
+ return msg;\r
+ }\r
+\r
+ public StringMessage queryWaitCMDRecord(){\r
+ ContentResolver pcr = this.cr;\r
+ Uri table = ICContentProvider.PROTOCOL_CMD_RECORDS_URI;\r
+ StringBuilder where = new StringBuilder();\r
+ where.append("FLAG=1");\r
+ ICLogger.i("Query cmdRecords "+where);\r
+ Cursor cmdrecords = pcr.query(table, (String[])null, where.toString(), (String[])null, (String)null);\r
+ StringMessage msg=null;\r
+ if (cmdrecords != null) {\r
+ int score=0;\r
+ if (cmdrecords.getCount()> 0) {\r
+ if (cmdrecords.moveToFirst()) {\r
+ String topic=cmdrecords.getString(cmdrecords.getColumnIndex("TOPIC"));\r
+ String cmd=cmdrecords.getString(cmdrecords.getColumnIndex("CMD"));\r
+ String date=cmdrecords.getString(cmdrecords.getColumnIndex("DATE"));\r
+ String time=cmdrecords.getString(cmdrecords.getColumnIndex("TIME"));\r
+ int flag=cmdrecords.getInt(cmdrecords.getColumnIndex("FLAG"));\r
+ int index=cmdrecords.getInt(cmdrecords.getColumnIndex("_id"));\r
+\r
+ msg=new StringMessage(new String[]{topic});\r
+ msg.refresh(cmd);\r
+ msg.setDate(date,time);\r
+ msg.setSentFlag(flag);\r
+ msg.setIndex(index);\r
+ ICLogger.i("get cmd Record wait response _id "+index + " "+date+time+" topic "+topic+" cmd "+cmd);\r
+\r
+ }\r
+ }\r
+ cmdrecords.close();\r
+\r
+ if (msg==null)\r
+ ICLogger.i("no cmd record in wait status !");\r
+ }\r
+ return msg;\r
+ }\r
+\r
\r
\r
\r
import com.enqualcomm.support.bean.StringMessage;\r
import com.enqualcomm.support.utils.Connection;\r
import com.enqualcomm.support.utils.ICLogger;\r
+import com.enqualcomm.support.utils.TimeUtil;\r
\r
\r
public class protocolAPIHelper {\r
}\r
public static StringMessage genStringMessage(String cmdName, byte[] rawdata){\r
StringMessage sm=new StringMessage(new String[]{cmdName,new String(rawdata) });\r
-\r
+ sm.setDate(TimeUtil.getSystemDateYYMMDD(),TimeUtil.getSystemTimeHHmmss());\r
return sm;\r
}\r
public static StringMessage genStringMessage(String cmdName, String msg){\r
StringMessage sm=new StringMessage(new String[]{cmdName,msg});\r
sm.refresh(msg);\r
+ sm.setDate(TimeUtil.getSystemDateYYMMDD(),TimeUtil.getSystemTimeHHmmss());\r
return sm;\r
}\r
\r
public static StringMessage genStringMessage(String cmdName, String msg){\r
StringMessage sm=new StringMessage(new String[]{cmdName,msg});\r
sm.refresh(msg);\r
+ sm.setDate(TimeUtil.getSystemDateYYMMDD(),TimeUtil.getSystemTimeHHmmss());\r
return sm;\r
}\r
/*\r
public static StringMessage genStringMessage(String cmdName, String msg){\r
StringMessage sm=new StringMessage(new String[]{cmdName,msg});\r
sm.refresh(msg);\r
+ sm.setDate(TimeUtil.getSystemDateYYMMDD(),TimeUtil.getSystemTimeHHmmss());\r
return sm;\r
}\r
\r
public static StringMessage genStringMessage(String cmdName, String msg){\r
StringMessage sm=new StringMessage(new String[]{cmdName,msg});\r
sm.refresh(msg);\r
+ sm.setDate(TimeUtil.getSystemDateYYMMDD(),TimeUtil.getSystemTimeHHmmss());\r
return sm;\r
}\r
/*\r
public static StringMessage genStringMessage(String cmdName, String msg){\r
StringMessage sm=new StringMessage(new String[]{cmdName,msg});\r
sm.refresh(msg);\r
+ sm.setDate(TimeUtil.getSystemDateYYMMDD(),TimeUtil.getSystemTimeHHmmss());\r
return sm;\r
}\r
/*\r
public static StringMessage genStringMessage(String cmdName, String msg) {\r
StringMessage sm = new StringMessage(new String[]{cmdName, msg});\r
sm.refresh(msg);\r
+ sm.setDate(TimeUtil.getSystemDateYYMMDD(),TimeUtil.getSystemTimeHHmmss());\r
return sm;\r
}\r
\r
-#Thu Nov 12 15:31:34 CST 2020\r
-VERSION_CODE=695\r
+#Sat Nov 14 23:02:11 CST 2020\r
+VERSION_CODE=696\r