-package com.enqualcomm.support.service;\r
-\r
-import android.app.AlarmManager;\r
-import android.app.PendingIntent;\r
-import android.content.BroadcastReceiver;\r
-import android.content.Context;\r
-import android.content.Intent;\r
-import android.net.ConnectivityManager;\r
-import android.net.wifi.WifiConfiguration;\r
-import android.net.wifi.WifiManager;\r
-import android.os.Build;\r
-import android.os.Handler;\r
-import android.os.Message;\r
-import android.os.Parcelable;\r
-import android.os.PowerManager;\r
-import android.os.SystemClock;\r
-\r
-import com.enqualcomm.support.Config;\r
-import com.enqualcomm.support.Constants;\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
-import com.enqualcomm.support.bean.Contact;\r
-import com.enqualcomm.support.bean.StringMessage;\r
-import com.enqualcomm.support.bean.voicePacket;\r
-import com.enqualcomm.support.service.base.AbstractConnectionService;\r
-import com.enqualcomm.support.utils.Connection;\r
-import com.enqualcomm.support.bean.Runtime;\r
-import com.enqualcomm.support.utils.FileCache;\r
-import com.enqualcomm.support.utils.ICLogger;\r
-import com.enqualcomm.support.utils.NettyConnection;\r
-import com.enqualcomm.support.utils.ServiceUtil;\r
-import com.enqualcomm.support.utils.SharPreferenceUtil;\r
-import com.enqualcomm.support.utils.SimSignalUtil;\r
-import com.enqualcomm.support.utils.Util;\r
-\r
-import java.util.concurrent.LinkedBlockingDeque;\r
-import java.util.concurrent.TimeUnit;\r
-import java.util.concurrent.locks.Condition;\r
-import java.util.concurrent.locks.ReentrantLock;\r
-\r
-import static android.app.PendingIntent.FLAG_UPDATE_CURRENT;\r
-import static com.enqualcomm.support.Constants.ACTION_WAKEUP_ALARM;\r
-import static com.enqualcomm.support.Constants.DIALOG_ACTION;\r
-import static com.enqualcomm.support.bean.Contact.CATEGORY_GROUP;\r
-import static com.enqualcomm.support.bean.Content.CONTACT_CATEGORY_GROUP;\r
-\r
-/**\r
- * 负责发送除了login,心跳之外的所有指令\r
- */\r
-public class Deliver extends AbstractConnectionService {\r
- private static final String RECEIVE_WAKE_LOCKTAG = "ReceiveWakelockTag";\r
- \r
- private static PowerManager.WakeLock WifiListWakeLock;\r
- \r
- public static boolean haveSendH42 = false;\r
- \r
- private static int isAppSetWifi = 0;\r
-\r
- private static boolean sendloopruning=false;\r
-\r
-\r
- private static ReentrantLock mLock = new ReentrantLock();\r
- private static ReentrantLock lock = new ReentrantLock();\r
- private static Condition mCondition = mLock.newCondition();\r
-\r
- public static LinkedBlockingDeque<StringMessage> queue = new LinkedBlockingDeque(200);\r
-\r
- private static FileCache fileCache;\r
- private static Connection connection;\r
-\r
- public static boolean is_active_location = false;\r
- \r
- private static PowerManager.WakeLock ReceiveWakeLock;\r
- \r
- private Handler delayHandler;\r
- \r
- private Runnable delayTh;\r
- \r
- private Connection mConnection;\r
-\r
- private ConWifiReceiver mMyWifiReceiver;\r
- \r
- private static Runtime mRuntime;\r
- \r
- private static boolean wakeLockWifiList = false;\r
- \r
- private static boolean wakeLockWifiSet = false;\r
- \r
- private static boolean wifiEnabled;\r
-\r
- public static Runnable delaySendMSG;\r
- private static Handler mSendMSGHandler=new Handler(new Handler.Callback() {\r
- @Override\r
- public boolean handleMessage(Message message) {\r
- return false;\r
- }\r
- });\r
-\r
- static {\r
- delaySendMSG = new Runnable() {\r
- @Override\r
- public void run() {\r
- sendloopruning=true;\r
- if (getAndSendMsgFromQueue()==true){\r
- //数据发送成功,则5秒后进行下一轮发送(while 循环用sleep会很占资源造成死锁\r
- mSendMSGHandler.postDelayed(delaySendMSG,5000L);\r
- }else{\r
- //没有数据可以发送,则退出sendloop\r
- sendloopruning=false;\r
- }\r
- }\r
- };\r
- }\r
- public Deliver(Connection paramNettyConnection, Runtime paramRuntime) {\r
- connection = paramNettyConnection;\r
- mRuntime = paramRuntime;\r
- //把queue 保存在磁盘中的缓存文件\r
- //此文件只缓存 除了 登录指令AP00,心跳AP03以及voice 分包指令以外的需要上传的指令。初步规划为 定位AP01和心率/血压 APHT\r
- fileCache = new FileCache(paramRuntime.getFileDir());\r
- }\r
-\r
- private static boolean checkNetwork(){\r
- boolean ret=true;\r
- boolean dateConnectionLinked=SimSignalUtil.checkNet(mRuntime.getContextProxy().context);\r
-\r
- if (dateConnectionLinked) {\r
-// int signal = mRuntime.getSignalStrength();\r
-// int networkType = SimSignalUtil.getInstance((mRuntime.getContextProxy()).context).getNetworkType();\r
-// if (signal + 110 < getMinSignalStrength(networkType)) {\r
-// ICLogger.i("Skip Send for SignalStrengh " + (signal + 110) + " < " + getMinSignalStrength(networkType));\r
-// //如果信号不好,把msg放回去\r
-// ret = false;\r
-// }\r
- if (connection.isServerConnected() == false || !mRuntime.isServerProtocolConnected()) {\r
- ICLogger.i("服务器无法访问,或者协议状态失常");\r
- ret = false;\r
- }\r
- }else{\r
- ICLogger.i("数据网络没有连接");\r
- ret=false;\r
- }\r
- return ret;\r
- }\r
- public static void triggerSendThread() {\r
-\r
-\r
- if(sendloopruning==false) {\r
- ICLogger.i("triggerSendThread !");\r
- mSendMSGHandler.post(delaySendMSG);\r
- }else{\r
- ICLogger.i("triggerSendThread running skip !");\r
- }\r
-\r
-// delaySendMSG.run();\r
-// mSendMSGHandler.sendEmptyMessage(1);\r
- }\r
- private static int CheckCount=0;\r
- private static boolean checkNeedServerResponse(StringMessage cmd){\r
-\r
- boolean NeedCheckServerResponse;\r
- if(cmd!=null &&\r
- Config.protocol_no==Config.PROTOCOL_FZD &&\r
- (protocolAPIHelper.isCmdStr(cmd).equals("UD") || protocolAPIHelper.isCmdStr(cmd).equals("UD2"))\r
- ){\r
- NeedCheckServerResponse=false;\r
- }else{\r
- NeedCheckServerResponse=true;\r
- }\r
- return NeedCheckServerResponse;\r
- }\r
- public static void dumpMessage(StringMessage msg){\r
-\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
- }\r
- public static boolean getAndSendMsgFromQueue(){\r
- boolean ret=false;\r
- if (mRuntime.getUseQueue()) {\r
- ICLogger.i("queue locked "+mLock.isLocked());\r
- if(mLock.isLocked()) return false;\r
- mLock.lock();\r
- try\r
- {\r
- String str;\r
- //如果没有数据从缓存中尝试读取\r
-\r
- //检查刚刚发送出去的包是否需要检查server response\r
-\r
- StringMessage msgWait=mRuntime.getDbHelper().queryWaitCMDRecord();\r
- dumpMessage(msgWait);\r
-\r
- if(msgWait!=null) {\r
- //如果需要,且没有服务器反馈\r
- //刚刚发送的包不为空,且检测次数小于3,则保留数据,进行下一次重试。\r
- //如果cmd有效,且尝试次数小于3, 没有收到反馈的情况下,可以重新插入queue进行下一次尝试!\r
- ICLogger.i("checkSrvResponse " + CheckCount + " times for " + msgWait.cmd() + " " + msgWait.isFromCache() + " index " + msgWait.getIndex());\r
- if (msgWait.getIndex() >= 0) {\r
- mRuntime.getDbHelper().updateCMDRecord(msgWait.getIndex(), 0);//设置为未发送\r
- }\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
-\r
- //C5要的临时版本,去掉盲点续传。\r
-\r
- if( Config.discard_cmd_after_retryfailed) {\r
- if (msgWait.getIndex() >= 0) {\r
- //有些协议需要对盲点数据进行修改(盲点数据可能是不同的topic),在此对数据修改后更新数据库\r
- mRuntime.getDbHelper().updateCMDRecord(msgWait.getIndex(), 3);//设置为盲点不发送\r
- }\r
- dumpMessage(msgWait);\r
- }\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
- StringBuilder stringBuilder = new StringBuilder();\r
- if (checkNetwork()) {\r
- StringMessage msgSent;\r
- if( Config.discard_cmd_after_retryfailed) {\r
- //如果可以丢弃数据,则直接查找没发送的数据即可\r
- msgSent = mRuntime.getDbHelper().queryNotSentCMDRecord();\r
- }else{\r
- //如果有盲点续传问题,不丢弃,则先查找丢掉的数据(重试失败的)先进行重传。\r
- msgSent = mRuntime.getDbHelper().queryDiscardCMDRecord();\r
- if(msgSent==null) {\r
- //如果没有丢弃的数据,直接查找未发送的数据进行\r
- msgSent = mRuntime.getDbHelper().queryNotSentCMDRecord();\r
- }\r
- }\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
-\r
- connection.send(msgSent);\r
- //如果需要CheckResponse\r
- if (checkNeedServerResponse(msgSent)==true){\r
- ICLogger.i("checkSrvResponse "+topic+" "+cmd);\r
- mRuntime.getDbHelper().updateCMDRecord(msgSent.getIndex(),1); //设置为等待响应\r
- }else{\r
- ICLogger.i("no need checkSrvResponse "+topic+" "+cmd);\r
- mRuntime.getDbHelper().updateCMDRecord(msgSent.getIndex(),2); //直接设置为已经响应\r
- }\r
- ret=true;\r
- } else {\r
- //已经拿到的缓存,如果刚巧没有网络,就原路放回去\r
- ICLogger.i("网络不通,不能发送!");\r
- if (msgSent.getIndex() >= 0) {\r
- mRuntime.getDbHelper().updateCMDRecord(msgSent.getIndex(), 0); //设置为未发送\r
- }\r
- dumpMessage(msgSent);\r
- ret=false;\r
- }\r
- }else{\r
- stringBuilder.append("no message!\n");\r
- }\r
- }\r
- str = stringBuilder.toString();\r
- ICLogger.i("send cached cmd : \n"+str);\r
- //ICLogger.i("\n"+queue.size()+" left in Queue!");\r
- }finally {\r
- if(mLock!=null && mLock.isLocked())\r
- mLock.unlock();\r
- }\r
- }\r
- return ret;\r
- }\r
-\r
- public static void resetCMDReocrdsDB(){\r
- //正常应该只有一个在wait的记录,如果开机的时候,可能需要处理一下第一条记录\r
- StringMessage msgWait=mRuntime.getDbHelper().queryWaitCMDRecord();\r
- dumpMessage(msgWait);\r
- if (msgWait!=null) {\r
- if( Config.discard_cmd_after_retryfailed) {\r
- while(msgWait!=null) {\r
- //所有缓存数据都设置为放弃发送\r
- mRuntime.getDbHelper().updateCMDRecord(msgWait.getIndex(), 3);\r
- msgWait=mRuntime.getDbHelper().queryWaitCMDRecord();\r
- }\r
- }else {\r
- mRuntime.getDbHelper().updateCMDRecord(msgWait.getIndex(), 0);//设置为未发送\r
- }\r
- }\r
- }\r
- public static void sendLocationMSG( String Msg){\r
-\r
- if(Msg==null ||Msg.trim().isEmpty()){\r
- ICLogger.i("命令为空,跳过发送!");\r
- return ;\r
- }\r
- sendLocationMSG(protocolAPIHelper.genStringMessage("queue",Msg));\r
- }\r
- public static void sendLocationMSG( StringMessage Msg){\r
- if(Msg==null ){\r
- ICLogger.i("命令为空,跳过发送!");\r
- return ;\r
- }\r
-\r
- if(mRuntime.getUseQueue()){\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
- connection.send(Msg);\r
- } else {\r
- ICLogger.i("offline skip " + Msg);\r
- if (Config.LOG_TOFILE) ICLogger.logToFile( "APILog", " offlineskip " + Msg.cmd()+" "+Msg.isFromCache());\r
- }\r
- }\r
-}\r
- private static int getMinSignalStrength(int paramInt) {\r
- int b = -105;\r
- switch (paramInt) {\r
- case SimSignalUtil.IS_4G:\r
- b = -100;\r
- break;\r
- case SimSignalUtil.IS_2G:\r
- case SimSignalUtil.IS_3G:\r
- default:\r
- break;\r
- }\r
- return b;\r
- }\r
-\r
- public static PowerManager.WakeLock WakeLockForGetWifiList(Runtime paramRuntime) {\r
- PowerManager.WakeLock wakeLock = ((PowerManager)(paramRuntime.getContextProxy()).context.getSystemService(Context.POWER_SERVICE)).newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, Deliver.class.getSimpleName());\r
- wakeLock.acquire(120000L);\r
- return wakeLock;\r
- }\r
- \r
- private boolean isSilence(Runtime paramRuntime) {\r
- return SharPreferenceUtil.getPrefBoolean((paramRuntime.getContextProxy()).context, "KEY_ISSILENCE", false);\r
- }\r
- \r
- public static void releaseWakeLockForGetWifiList() {\r
- if (WifiListWakeLock == null) {\r
- ICLogger.i("WifiListWakeLock 没有加锁");\r
- return;\r
- } \r
- if (WifiListWakeLock.isHeld()) {\r
- WifiListWakeLock.release();\r
- WifiListWakeLock = null;\r
- } \r
- }\r
- \r
- public PowerManager.WakeLock getWakeLock() {\r
- PowerManager.WakeLock wakeLock = ((PowerManager)(this.mRuntime.getContextProxy()).context.getSystemService(Context.POWER_SERVICE)).newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, Deliver.class.getSimpleName());\r
- wakeLock.acquire(40000L);\r
- return wakeLock;\r
- }\r
- \r
- public void onAlarmClock(Connection paramConnection, Runtime paramRuntime) {}\r
- \r
- public void onAttach(Connection paramConnection, Runtime paramRuntime) {}\r
-\r
- @Override\r
- public boolean onConnectionClose(Connection paramConnection, Runtime paramRuntime, String ErrorMsg) {\r
- return false; }\r
- \r
- public boolean onConnectionOpen(Connection paramConnection, Runtime paramRuntime) { return false; }\r
- \r
- public void onDetach(Connection paramConnection, Runtime paramRuntime) {}\r
- \r
- public boolean onReceive(StringMessage paramStringMessage, Connection paramConnection, final Runtime paramRuntime) {\r
- this.mConnection = paramConnection;\r
- this.mRuntime = paramRuntime;\r
- String cmd = paramStringMessage.cmd();\r
- if(Config.protocol_no==Config.PROTOCOL_MQTT)\r
- {\r
- cmd=protocolAPIHelper.isCmdStr(paramStringMessage);\r
- }\r
- //如果需要检测是否响应。\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
- mRuntime.getDbHelper().updateCMDRecord(msgWait.getIndex(), 2);//设置为已读\r
- CheckCount = 0;\r
- }\r
- }\r
-\r
- ICLogger.i("Deliver receive cmd " + paramStringMessage.cmd());\r
- if (cmd.equals("SentVoicePacket") ) {\r
- //收到BP07 表示服务器收到一个voicePacket 分包成功,开始检查下一个包是否存在需要发送。\r
- //收到SentVoicePacket 表示 有一个VoiceMessage要发送,需要从第0个包开始发送语音分包。\r
- voicePacket voicepacket = voicePacket.getInstanceSent();\r
- if (voicepacket.getCurrentIndexToSent() < voicepacket.getPacketCount()) {\r
- ICLogger.i("voicepacket " + voicepacket.getName() + " filetype " + voicepacket.getFiletype() + " , datatype " + voicepacket.getDateType() +" "+ voicepacket.getPacketTime() + " send " + (voicepacket.getCurrentIndexToSent() + 1) + "/" + voicepacket.getPacketCount());\r
- if(mConnection instanceof NettyConnection) {\r
- ((NettyConnection) mConnection).sendMsg("RAWPACKET",\r
- protocolAPIHelper.getVoicePacketItem(voicepacket.getPacketTime(),\r
- voicepacket.getPacketCount(),\r
- (voicepacket.getCurrentIndexToSent() + 1),\r
- voicepacket.getVoicePacketWithIndex(voicepacket.getCurrentIndexToSent()).getPacketLen(),\r
- voicepacket.getVoicePacketWithIndex(voicepacket.getCurrentIndexToSent()).getPacketData(), voicepacket.getFiletype(), voicepacket.getDateType())\r
- );\r
- }\r
- } else {\r
- ICLogger.i("voicepacket " + voicepacket.getName() + " filetype " + voicepacket.getFiletype() + " , datatype " + voicepacket.getDateType() + " " + voicepacket.getPacketTime() + " sent Done!");\r
- }\r
- return true;\r
- } else if ("PhotoRemoteTaken".equals(paramStringMessage.cmd())) {\r
- //接收到拍照完毕命令,发送照片\r
-\r
- String msgUrl=paramStringMessage.isFromCache();\r
- ICLogger.i("receive taken photo to send "+msgUrl);\r
- //创建voiceConent并添加到数据\r
- final VoiceContent voiceContent = VoiceContent.placeHolderOut(CONTACT_CATEGORY_GROUP, "123", msgUrl,2,2);\r
-\r
- // 把voiceContent拆解成1024的分包\r
- Util.parseToVoicePacketSent(voiceContent);\r
- //trigger 分包发送\r
- if (CoreService.getInstance().getConnection()!=null) {\r
-\r
-\r
- //H88 专用功能拍照时检测用户体温心率\r
- if(Util.getSystemProperties("persist.sys.do_check_condition","false").equals("true")) {\r
- //开启测温\r
- if(mRuntime.check_stat_do_temp_test()) {\r
- TemperatureUtil.DoTempTest();\r
- }\r
-\r
- Util.mSleep(5000);\r
- //开启测量PPG\r
- if(mRuntime.check_stat_do_ppg_test()) {\r
- HeartRateManager.triggerPPGtest();\r
- }\r
- }\r
-\r
- CoreService.getInstance().getConnection().DeliverCMDMessageToSystem("SentVoicePacket", "");\r
- }\r
- return true;\r
- } else if ("poweroffCheckSim".equals(paramStringMessage.cmd())) {\r
- paramRuntime.setShutdown(true);\r
-\r
- if (SimSignalUtil.hasSimCard(paramRuntime.getContextProxy().context))\r
- {\r
- ICLogger.i("Has Sim Card Skip poweroff!");\r
- Util.ShowToast(paramRuntime,"Has Sim Card Skip poweroff!");\r
- return true;\r
- }else{\r
- Util.ShowToast(paramRuntime,"Do poweroff!");\r
- }\r
- mSendMSGHandler.postDelayed(new Runnable() {\r
- @Override\r
- public void run() {\r
- Util.shutdown();\r
- }\r
- },2000);\r
- return true;\r
- } else if ("FactoryResetCheckSim".equals(paramStringMessage.cmd())) {\r
-\r
- if (SimSignalUtil.hasSimCard(paramRuntime.getContextProxy().context))\r
- {\r
- ICLogger.i("Has Sim Card Skip FactoryReset!");\r
- Util.ShowToast(paramRuntime,"Has Sim Card Skip FactoryReset!");\r
-\r
- return true;\r
- }else{\r
- Util.ShowToast(paramRuntime,"Do FactoryReset!");\r
- }\r
- mSendMSGHandler.postDelayed(new Runnable() {\r
- @Override\r
- public void run() {\r
- Util.doMasterClear(paramRuntime.getContextProxy().context);\r
- }\r
- },2000);\r
- return true;\r
- } else if ("poweroff".equals(paramStringMessage.cmd())) {\r
- paramRuntime.setShutdown(true);\r
- mSendMSGHandler.postDelayed(new Runnable() {\r
- @Override\r
- public void run() {\r
- Util.shutdown();\r
- }\r
- },2000);\r
- return true;\r
- } else if ("FactoryReset".equals(paramStringMessage.cmd())) {\r
- mSendMSGHandler.postDelayed(new Runnable() {\r
- @Override\r
- public void run() {\r
- Util.doMasterClear(paramRuntime.getContextProxy().context);\r
- }\r
- },2000);\r
- return true;\r
- } else if ("Reboot".equals(paramStringMessage.cmd())) {\r
- mSendMSGHandler.postDelayed(new Runnable() {\r
- @Override\r
- public void run() {\r
- Util.reboot(paramRuntime.getContextProxy().context);\r
- }\r
- },2000);\r
- return true;\r
- } else if ("heartbeat".equals(paramStringMessage.cmd())) {\r
- //每次心跳,查询一下 是否有语音消息需要接收。\r
-// paramConnection.send(protocolAPIHelper.genStringMessage("AP05",protocolAPIHelper.AP05(true)));\r
-\r
- } else if ("getWeather".equals(paramStringMessage.cmd())) {\r
- ICLogger.i("获取天气");\r
- mConnection.send(protocolAPIHelper.getWeatherMSG(mRuntime));\r
- } else if ("NewVoice".equals(paramStringMessage.cmd()))\r
- {\r
- mSendMSGHandler.postDelayed(new Runnable() {\r
- @Override\r
- public void run() {\r
- final Context context = (Deliver.this.mRuntime.getContextProxy()).context;\r
-\r
- Contact param2Contact = new Contact(CATEGORY_GROUP, (mRuntime.getContextProxy()).context.getResources().getString(R.string.all_group), Contact.GROUP_ALL);\r
- int i = mRuntime.getContextProxy().getTelephonyManager().getCallState();\r
- if (!mRuntime.getBatteryLow() && 1 != i && 2 != i) {\r
- if (Config.do_broadCast_message)\r
- {\r
-\r
- ICLogger.d(Constants.ACTION_MESSAGE_RECEIVED+" "+paramStringMessage.isFromCache());\r
- //广播 voice消息\r
- Intent intent = new Intent();\r
- intent.setAction(Constants.ACTION_MESSAGE_RECEIVED);\r
- intent.putExtra(Constants.KEY_MESSAGE_TYPE,"voice");\r
- intent.putExtra(Constants.KEY_MESSAGE_FROM,"广播消息");\r
- intent.putExtra(Constants.KEY_MESSAGE_URL,paramStringMessage.isFromCache());\r
-\r
- // playVoice(context,paramStringMessage.isFromCache());\r
- context.sendBroadcast(intent);\r
- }\r
-\r
- if (Config.noVoiceNotifyDialog==false) {\r
-\r
- Intent intent = new Intent();\r
- //显示提示窗口\r
- intent.setAction(DIALOG_ACTION);\r
- intent.putExtra("contact", (Parcelable) param2Contact);\r
- context.sendBroadcast(intent);\r
- }\r
-\r
- }\r
- }\r
- },500);\r
-\r
- return true;\r
- }else if ("findDev".equals(paramStringMessage.cmd())) {\r
-\r
- mSendMSGHandler.postDelayed(new Runnable() {\r
- @Override\r
- public void run() {\r
- final Context context = (Deliver.this.mRuntime.getContextProxy()).context;\r
- Intent intent = new Intent();\r
- ICLogger.d(Constants.ACTION_MESSAGE_RECEIVED+" "+paramStringMessage.isFromCache());\r
- //显示提示窗口\r
- intent.setAction(DIALOG_ACTION);\r
- intent.putExtra("findDev", "Find Device");\r
- context.sendBroadcast(intent);\r
- }\r
- },500);\r
-\r
- return true;\r
- }else if ("takephoto".equals(paramStringMessage.cmd())) {\r
-\r
- mSendMSGHandler.postDelayed(new Runnable() {\r
- @Override\r
- public void run() {\r
- final Context context = (Deliver.this.mRuntime.getContextProxy()).context;\r
- Intent intent = new Intent();\r
- ICLogger.d(Constants.ACTION_MESSAGE_RECEIVED+" "+paramStringMessage.isFromCache());\r
- //显示提示窗口\r
- intent.setAction(DIALOG_ACTION);\r
- intent.putExtra("takephoto", "Take Photo !");\r
- context.sendBroadcast(intent);\r
- }\r
- },500);\r
-\r
- return true;\r
-\r
- }else if ("StartMonitor".equals(paramStringMessage.cmd())) {\r
-\r
- String recordfilepath=Util.getRecordfilePath(mRuntime, TimeUtil.getSystemTime3());\r
- int recordtime=Integer.parseInt(paramStringMessage.isFromCache().trim());\r
- mSendMSGHandler.post(new Runnable() {\r
- @Override\r
- public void run() {\r
- AudioService.getInstance().startRecord(recordfilepath);\r
- }\r
- });\r
- mSendMSGHandler.postDelayed(new Runnable() {\r
- @Override\r
- public void run() {\r
- AudioService.getInstance().stopRecord();\r
- ICLogger.i("Monitor Record to send "+recordfilepath);\r
- //创建voiceConent并添加到数据\r
- /**\r
- * * * 1 语音—— 1.监听语音 * 2.SOS语音 * 3.扩展\r
- * * * 2 图片—— 1.签到图片 * 2.指令图片 * 3.设备图片 * 4.扩展\r
- */\r
- final VoiceContent voiceContent = VoiceContent.placeHolderOut(CONTACT_CATEGORY_GROUP, "123", recordfilepath,1,1);\r
-\r
- // 把voiceContent拆解成1024的分包\r
- Util.parseToVoicePacketSent(voiceContent);\r
- //trigger 分包发送\r
- if (CoreService.getInstance().getConnection()!=null)\r
- CoreService.getInstance().getConnection().DeliverCMDMessageToSystem("SentVoicePacket", "");\r
- }\r
- },recordtime*1000);\r
-\r
- return true;\r
- }\r
-\r
- return false;\r
- }\r
-\r
-\r
-\r
- private void playVoice(Context paramContext,String voicefile) {\r
- AudioService.getInstance().play(voicefile);\r
- }\r
-\r
- public static void releaseOneWakeLock() {\r
- if (ReceiveWakeLock == null) {\r
- ICLogger.i("ReceiveWakeLock 没有加锁");\r
- return;\r
- } \r
- if (!wakeLockWifiList && !wakeLockWifiSet && ReceiveWakeLock.isHeld()) {\r
- ReceiveWakeLock.release();\r
- ReceiveWakeLock = null;\r
- } \r
- }\r
- \r
- public void releaseReceiveWakeLock() {\r
- if (this.ReceiveWakeLock == null) {\r
- ICLogger.i("ReceiveWakeLock 没有加锁");\r
- return;\r
- } \r
- if (this.ReceiveWakeLock.isHeld()) {\r
- this.ReceiveWakeLock.release();\r
- this.wakeLockWifiList = false;\r
- this.wakeLockWifiSet = false;\r
- this.ReceiveWakeLock = null;\r
- } \r
- }\r
- public static void connectToWifi(String ssid,String pwd,String encryptType){\r
- int networkid;\r
- final WifiManager wifiManager = mRuntime.getContextProxy().getWifiManager();\r
- wifiEnabled = wifiManager.isWifiEnabled();\r
- if (!wifiEnabled)\r
- {\r
- //没开就打开wifi\r
- Util.turnOnWifiForConnect(mRuntime.getContextProxy().context, mRuntime);\r
- }\r
- if (Util.isConnectWifi(mRuntime.getContextProxy().context)) {\r
- networkid = wifiManager.getConnectionInfo().getNetworkId();\r
- wifiManager.disconnect();\r
- wifiManager.removeNetwork(networkid);\r
- wifiManager.saveConfiguration();\r
- }\r
-\r
- Deliver.isAppSetWifi = 1;\r
- WifiConfiguration wifiConfiguration = Util.GetconfigWifiInfo(mRuntime.getContextProxy().context, ssid, pwd, encryptType);\r
- networkid = wifiConfiguration.networkId;\r
- wifiManager.removeNetwork(networkid);\r
- wifiManager.saveConfiguration();\r
- networkid = wifiManager.addNetwork(wifiConfiguration);\r
- if (Util.connectWifiByReflectMethod(mRuntime.getContextProxy().context, networkid) == null && !wifiManager.enableNetwork(networkid, true)) {\r
- ICLogger.i("连接失败 3");\r
- SystemClock.sleep(3000L);\r
-\r
- wifiManager.setWifiEnabled(false);\r
- wakeLockWifiSet = false;\r
- releaseOneWakeLock();\r
- WifiListWakeLock = Deliver.WakeLockForGetWifiList(mRuntime);\r
-\r
- return;\r
- }\r
-\r
- if(!wifiEnabled ){\r
- //原来wifi没开就关闭wifi\r
- Util.turnOffWifiForSleep(mRuntime.getContextProxy().context, mRuntime);\r
- }\r
-\r
- }\r
- public void setWakeupAlarm(Runtime paramRuntime) {\r
- AlarmManager alarmManager = (AlarmManager)(paramRuntime.getContextProxy()).context.getSystemService(Context.ALARM_SERVICE);\r
- Intent intent = new Intent((paramRuntime.getContextProxy()).context, CoreService.class);\r
- intent.setAction(ACTION_WAKEUP_ALARM);\r
- PendingIntent pendingIntent = PendingIntent.getService((paramRuntime.getContextProxy()).context, 0, intent, FLAG_UPDATE_CURRENT);\r
- alarmManager.cancel(pendingIntent);\r
- long l = SystemClock.elapsedRealtime();\r
- StringBuilder stringBuilder = new StringBuilder();\r
- stringBuilder.append("SDK_INT=");\r
- stringBuilder.append(Build.VERSION.SDK_INT);\r
- stringBuilder.append(",m=,");\r
- stringBuilder.append(23);\r
- stringBuilder.append(",kitkat=");\r
- stringBuilder.append(19);\r
- ICLogger.i(stringBuilder.toString());\r
- if (Build.VERSION.SDK_INT >= 19) {\r
- alarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, l + 10000L, pendingIntent);\r
- return;\r
- } \r
- alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, l + 10000L, pendingIntent);\r
- }\r
-\r
- class ConWifiReceiver extends BroadcastReceiver {\r
- ConWifiReceiver() {\r
- }\r
-\r
- public void onReceive(final Context var1, Intent var2) {\r
- String var3 = var2.getAction();\r
- StringBuilder var4 = new StringBuilder();\r
- var4.append(" receive action=");\r
- var4.append(var3);\r
- var4.append(" isAppSetWifi=");\r
- var4.append(Deliver.isAppSetWifi);\r
- ICLogger.i(var4.toString());\r
- if (var3.equals("android.net.conn.CONNECTIVITY_CHANGE")) {\r
- if (Deliver.isAppSetWifi == 0) {\r
- return;\r
- }\r
-\r
- if (Deliver.isAppSetWifi == 1) {\r
- Deliver.isAppSetWifi = 0;\r
- if (Deliver.this.delayHandler != null) {\r
- Deliver.this.delayHandler.removeCallbacks(Deliver.this.delayTh);\r
- Deliver.this.delayHandler = null;\r
- }\r
- }\r
-\r
- WifiManager var5 = (WifiManager)var1.getSystemService(Context.WIFI_SERVICE);\r
- if (((ConnectivityManager)var1.getSystemService(Context.CONNECTIVITY_SERVICE)).getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected()) {\r
- ICLogger.i("连接成功");\r
- Deliver.isAppSetWifi = 0;\r
- Deliver.haveSendH42 = true;\r
- Deliver.this.mConnection.connect(Deliver.this.mRuntime.getHost(), Deliver.this.mRuntime.getPort());\r
- if (Deliver.this.delayHandler != null) {\r
- Deliver.this.delayHandler.removeCallbacks(Deliver.this.delayTh);\r
- Deliver.this.delayHandler = null;\r
- }\r
-\r
- var1.unregisterReceiver(Deliver.this.mMyWifiReceiver);\r
- Deliver.this.mMyWifiReceiver = null;\r
- Deliver.this.wakeLockWifiSet = false;\r
- Deliver.this.releaseOneWakeLock();\r
- Deliver.WifiListWakeLock = Deliver.WakeLockForGetWifiList(Deliver.this.mRuntime);\r
- } else {\r
- StringBuilder var6 = new StringBuilder();\r
- var6.append("连接失败 222 delayHandler=");\r
- var6.append(Deliver.this.delayHandler);\r
- ICLogger.i(var6.toString());\r
- Deliver.isAppSetWifi = 2;\r
- var5.reconnect();\r
- if (Deliver.this.delayHandler == null) {\r
- Deliver.this.delayHandler = new Handler();\r
- Deliver.this.delayTh = new Runnable() {\r
- public void run() {\r
- StringBuilder var1x = new StringBuilder();\r
- var1x.append("连接失败 超时 wifiEnabled=");\r
- var1x.append(Deliver.this.wifiEnabled);\r
- ICLogger.i(var1x.toString());\r
- if (Deliver.isAppSetWifi != 1) {\r
- Deliver.isAppSetWifi = 0;\r
- var1.unregisterReceiver(Deliver.this.mMyWifiReceiver);\r
- Deliver.this.mMyWifiReceiver = null;\r
- WifiManager var3 = (WifiManager)var1.getSystemService(Context.WIFI_SERVICE);\r
- if (((ConnectivityManager)var1.getSystemService(Context.CONNECTIVITY_SERVICE)).getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected()) {\r
- ICLogger.i("连接成功 1");\r
- Deliver.haveSendH42 = true;\r
- Deliver.this.mConnection.connect(Deliver.this.mRuntime.getHost(), Deliver.this.mRuntime.getPort());\r
- Deliver.this.wakeLockWifiSet = false;\r
- Deliver.this.releaseOneWakeLock();\r
- Deliver.WifiListWakeLock = Deliver.WakeLockForGetWifiList(Deliver.this.mRuntime);\r
- } else {\r
- int var2 = var3.getConnectionInfo().getNetworkId();\r
- if (var2 != -1) {\r
- var3.disableNetwork(var2);\r
-// ServiceUtil.offerQueue(API.H42(Deliver.this.mRuntime, "3"));\r
- Deliver.this.wakeLockWifiSet = false;\r
- Deliver.this.releaseOneWakeLock();\r
- Deliver.WifiListWakeLock = Deliver.WakeLockForGetWifiList(Deliver.this.mRuntime);\r
- } else {\r
- ICLogger.i("连接失败 2-2");\r
-// ServiceUtil.offerQueue(API.H42(Deliver.this.mRuntime, "3"));\r
- Deliver.this.wakeLockWifiSet = false;\r
- Deliver.this.releaseOneWakeLock();\r
- Deliver.WifiListWakeLock = Deliver.WakeLockForGetWifiList(Deliver.this.mRuntime);\r
- }\r
-\r
- if (!Deliver.this.wifiEnabled) {\r
- var3.setWifiEnabled(false);\r
- }\r
- }\r
-\r
- Deliver.this.delayHandler = null;\r
- }\r
- }\r
- };\r
- Deliver.this.delayHandler.postDelayed(Deliver.this.delayTh, 30000L);\r
- }\r
- }\r
- }\r
-\r
- }\r
- }\r
- \r
-\r
-}\r
-\r
+package com.enqualcomm.support.service;
+
+import android.app.AlarmManager;
+import android.app.PendingIntent;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.net.ConnectivityManager;
+import android.net.wifi.WifiConfiguration;
+import android.net.wifi.WifiManager;
+import android.os.Build;
+import android.os.Handler;
+import android.os.Message;
+import android.os.Parcelable;
+import android.os.PowerManager;
+import android.os.SystemClock;
+
+import com.enqualcomm.support.Config;
+import com.enqualcomm.support.Constants;
+import com.enqualcomm.support.CoreService;
+import com.enqualcomm.support.R;
+import com.enqualcomm.support.bean.VoiceContent;
+import com.enqualcomm.support.utils.DBHelper;
+import com.enqualcomm.support.utils.TemperatureUtil;
+import com.enqualcomm.support.utils.TimeUtil;
+import com.ic.protocols.protocolAPIHelper;
+import com.enqualcomm.support.bean.Contact;
+import com.enqualcomm.support.bean.StringMessage;
+import com.enqualcomm.support.bean.voicePacket;
+import com.enqualcomm.support.service.base.AbstractConnectionService;
+import com.enqualcomm.support.utils.Connection;
+import com.enqualcomm.support.bean.Runtime;
+import com.enqualcomm.support.utils.FileCache;
+import com.enqualcomm.support.utils.ICLogger;
+import com.enqualcomm.support.utils.NettyConnection;
+import com.enqualcomm.support.utils.ServiceUtil;
+import com.enqualcomm.support.utils.SharPreferenceUtil;
+import com.enqualcomm.support.utils.SimSignalUtil;
+import com.enqualcomm.support.utils.Util;
+
+import java.util.concurrent.LinkedBlockingDeque;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.locks.Condition;
+import java.util.concurrent.locks.ReentrantLock;
+
+import static android.app.PendingIntent.FLAG_UPDATE_CURRENT;
+import static com.enqualcomm.support.Constants.ACTION_WAKEUP_ALARM;
+import static com.enqualcomm.support.Constants.DIALOG_ACTION;
+import static com.enqualcomm.support.bean.Contact.CATEGORY_GROUP;
+import static com.enqualcomm.support.bean.Content.CONTACT_CATEGORY_GROUP;
+
+/**
+ * 负责发送除了login,心跳之外的所有指令
+ */
+public class Deliver extends AbstractConnectionService {
+ private static final String RECEIVE_WAKE_LOCKTAG = "ReceiveWakelockTag";
+
+ private static PowerManager.WakeLock WifiListWakeLock;
+
+ public static boolean haveSendH42 = false;
+
+ private static int isAppSetWifi = 0;
+
+ private static boolean sendloopruning=false;
+
+
+ private static ReentrantLock mLock = new ReentrantLock();
+ private static ReentrantLock lock = new ReentrantLock();
+ private static Condition mCondition = mLock.newCondition();
+
+ public static LinkedBlockingDeque<StringMessage> queue = new LinkedBlockingDeque(200);
+
+ private static FileCache fileCache;
+ private static Connection connection;
+
+ public static boolean is_active_location = false;
+
+ private static PowerManager.WakeLock ReceiveWakeLock;
+
+ private Handler delayHandler;
+
+ private Runnable delayTh;
+
+ private Connection mConnection;
+
+ private ConWifiReceiver mMyWifiReceiver;
+
+ private static Runtime mRuntime;
+
+ private static boolean wakeLockWifiList = false;
+
+ private static boolean wakeLockWifiSet = false;
+
+ private static boolean wifiEnabled;
+
+ public static Runnable delaySendMSG;
+ private static Handler mSendMSGHandler=new Handler(new Handler.Callback() {
+ @Override
+ public boolean handleMessage(Message message) {
+ return false;
+ }
+ });
+
+ static {
+ delaySendMSG = new Runnable() {
+ @Override
+ public void run() {
+ sendloopruning=true;
+ if (getAndSendMsgFromQueue()==true){
+ //数据发送成功,则5秒后进行下一轮发送(while 循环用sleep会很占资源造成死锁
+ mSendMSGHandler.postDelayed(delaySendMSG,5000L);
+ }else{
+ //没有数据可以发送,则退出sendloop
+ sendloopruning=false;
+ }
+ }
+ };
+ }
+ public Deliver(Connection paramNettyConnection, Runtime paramRuntime) {
+ connection = paramNettyConnection;
+ mRuntime = paramRuntime;
+ //把queue 保存在磁盘中的缓存文件
+ //此文件只缓存 除了 登录指令AP00,心跳AP03以及voice 分包指令以外的需要上传的指令。初步规划为 定位AP01和心率/血压 APHT
+ fileCache = new FileCache(paramRuntime.getFileDir());
+ }
+
+ private static boolean checkNetwork(){
+ boolean ret=true;
+ boolean dateConnectionLinked=SimSignalUtil.checkNet(mRuntime.getContextProxy().context);
+
+ if (dateConnectionLinked) {
+// int signal = mRuntime.getSignalStrength();
+// int networkType = SimSignalUtil.getInstance((mRuntime.getContextProxy()).context).getNetworkType();
+// if (signal + 110 < getMinSignalStrength(networkType)) {
+// ICLogger.i("Skip Send for SignalStrengh " + (signal + 110) + " < " + getMinSignalStrength(networkType));
+// //如果信号不好,把msg放回去
+// ret = false;
+// }
+ if (connection.isServerConnected() == false || !mRuntime.isServerProtocolConnected()) {
+ ICLogger.i("服务器无法访问,或者协议状态失常");
+ ret = false;
+ }
+ }else{
+ ICLogger.i("数据网络没有连接");
+ ret=false;
+ }
+ return ret;
+ }
+ public static void triggerSendThread() {
+
+
+ if(sendloopruning==false) {
+ ICLogger.i("triggerSendThread !");
+ mSendMSGHandler.post(delaySendMSG);
+ }else{
+ ICLogger.i("triggerSendThread running skip !");
+ }
+
+// delaySendMSG.run();
+// mSendMSGHandler.sendEmptyMessage(1);
+ }
+ private static int CheckCount=0;
+ private static boolean checkNeedServerResponse(StringMessage cmd){
+
+ boolean NeedCheckServerResponse;
+ if(cmd!=null &&
+ Config.protocol_no==Config.PROTOCOL_FZD &&
+ (protocolAPIHelper.isCmdStr(cmd).equals("UD") || protocolAPIHelper.isCmdStr(cmd).equals("UD2"))
+ ){
+ NeedCheckServerResponse=false;
+ }else{
+ NeedCheckServerResponse=true;
+ }
+ return NeedCheckServerResponse;
+ }
+ public static void dumpMessage(StringMessage msg){
+
+ StringBuilder sb = new StringBuilder("StringMessage ");
+ if (msg!=null) {
+ sb.append("index ").append(msg.getIndex())
+ .append("\nDate ").append(msg.getDate()).append(msg.getTime())
+ .append("\nflag ").append(msg.haveSent())
+ .append("\ntopic ").append(msg.cmd())
+ .append("\ncmd ").append(msg.isFromCache()).append("\n");
+ }
+// ICLogger.i(sb.toString());
+
+ }
+ public static boolean getAndSendMsgFromQueue(){
+ boolean ret=false;
+ if (mRuntime.getUseQueue()) {
+ ICLogger.i("queue locked "+mLock.isLocked());
+ if(mLock.isLocked()) return false;
+ mLock.lock();
+ try
+ {
+ String str;
+ //如果没有数据从缓存中尝试读取
+
+ //检查刚刚发送出去的包是否需要检查server response
+
+ StringMessage msgWait=mRuntime.getDbHelper().queryWaitCMDRecord();
+ dumpMessage(msgWait);
+
+ if(msgWait!=null) {
+ //如果需要,且没有服务器反馈
+ //刚刚发送的包不为空,且检测次数小于3,则保留数据,进行下一次重试。
+ //如果cmd有效,且尝试次数小于3, 没有收到反馈的情况下,可以重新插入queue进行下一次尝试!
+ ICLogger.i("checkSrvResponse " + CheckCount + " times for " + msgWait.cmd() + " " + msgWait.isFromCache() + " index " + msgWait.getIndex());
+ if (msgWait.getIndex() >= 0) {
+ mRuntime.getDbHelper().updateCMDRecord(msgWait.getIndex(), 0);//设置为未发送
+ }
+ dumpMessage(msgWait);
+ CheckCount++;
+ //尝试次数大于5 ,可能是还没有发送过数据,或者超过重试次数,暂停提取queue中数据进,下次心跳再开始发送
+ if (CheckCount > 5) {
+ ICLogger.i("checkSrvResponse CheckCount=" + CheckCount + " Timeout or cmd is null, skip ");
+
+ //C5要的临时版本,去掉盲点续传。
+
+ if( Config.discard_cmd_after_retryfailed) {
+ if (msgWait.getIndex() >= 0) {
+ //有些协议需要对盲点数据进行修改(盲点数据可能是不同的topic),在此对数据修改后更新数据库
+ mRuntime.getDbHelper().updateCMDRecord(msgWait.getIndex(), 3);//设置为盲点不发送
+ }
+ dumpMessage(msgWait);
+ }
+ if (Config.LOG_TOFILE)
+ ICLogger.logToFile("APILog", "response timeout skip! ");
+ CheckCount = 0;
+ if (mLock != null && mLock.isLocked())
+ mLock.unlock();
+ return false;
+ }
+
+ }
+
+ StringBuilder stringBuilder = new StringBuilder();
+ if (checkNetwork()) {
+ StringMessage msgSent;
+ if( Config.discard_cmd_after_retryfailed) {
+ //如果可以丢弃数据,则直接查找没发送的数据即可
+ msgSent = mRuntime.getDbHelper().queryNotSentCMDRecord();
+ }else{
+ //如果有盲点续传问题,不丢弃,则先查找丢掉的数据(重试失败的)先进行重传。
+ msgSent = mRuntime.getDbHelper().queryDiscardCMDRecord();
+ if(msgSent==null) {
+ //如果没有丢弃的数据,直接查找未发送的数据进行
+ msgSent = mRuntime.getDbHelper().queryNotSentCMDRecord();
+ }
+ }
+ dumpMessage(msgSent);
+ if (msgSent != null) {
+ String cmd = msgSent.isFromCache();
+ String topic = msgSent.cmd();
+ stringBuilder.append(topic);
+ stringBuilder.append(" ");
+ stringBuilder.append(cmd);
+ stringBuilder.append("\n");
+ if (checkNetwork()) {
+
+ connection.send(msgSent);
+ //如果需要CheckResponse
+ if (checkNeedServerResponse(msgSent)==true){
+ ICLogger.i("checkSrvResponse "+topic+" "+cmd);
+ mRuntime.getDbHelper().updateCMDRecord(msgSent.getIndex(),1); //设置为等待响应
+ }else{
+ ICLogger.i("no need checkSrvResponse "+topic+" "+cmd);
+ mRuntime.getDbHelper().updateCMDRecord(msgSent.getIndex(),2); //直接设置为已经响应
+ }
+ ret=true;
+ } else {
+ //已经拿到的缓存,如果刚巧没有网络,就原路放回去
+ ICLogger.i("网络不通,不能发送!");
+ if (msgSent.getIndex() >= 0) {
+ mRuntime.getDbHelper().updateCMDRecord(msgSent.getIndex(), 0); //设置为未发送
+ }
+ dumpMessage(msgSent);
+ ret=false;
+ }
+ }else{
+ stringBuilder.append("no message!\n");
+ }
+ }
+ str = stringBuilder.toString();
+ ICLogger.i("send cached cmd : \n"+str);
+ //ICLogger.i("\n"+queue.size()+" left in Queue!");
+ }finally {
+ if(mLock!=null && mLock.isLocked())
+ mLock.unlock();
+ }
+ }
+ return ret;
+ }
+
+ public static void resetCMDReocrdsDB(){
+ //正常应该只有一个在wait的记录,如果开机的时候,可能需要处理一下第一条记录
+ StringMessage msgWait=mRuntime.getDbHelper().queryWaitCMDRecord();
+ dumpMessage(msgWait);
+ if (msgWait!=null) {
+ if( Config.discard_cmd_after_retryfailed) {
+ while(msgWait!=null) {
+ //所有缓存数据都设置为放弃发送
+ mRuntime.getDbHelper().updateCMDRecord(msgWait.getIndex(), 3);
+ msgWait=mRuntime.getDbHelper().queryWaitCMDRecord();
+ }
+ }else {
+ mRuntime.getDbHelper().updateCMDRecord(msgWait.getIndex(), 0);//设置为未发送
+ }
+ }
+ }
+ public static void sendLocationMSG( String Msg){
+
+ if(Msg==null ||Msg.trim().isEmpty()){
+ ICLogger.i("命令为空,跳过发送!");
+ return ;
+ }
+ sendLocationMSG(protocolAPIHelper.genStringMessage("queue",Msg));
+ }
+ public static void sendLocationMSG( StringMessage Msg){
+ if(Msg==null ){
+ ICLogger.i("命令为空,跳过发送!");
+ return ;
+ }
+
+ if(mRuntime.getUseQueue()){
+ long id=mRuntime.getDbHelper().insertCMDRecord(Msg);
+ Msg.setIndex((int)id);
+ dumpMessage(Msg);
+ triggerSendThread();
+ }else {
+ if (checkNetwork()) {
+ ICLogger.i(" first send " + Msg);
+ connection.send(Msg);
+ } else {
+ ICLogger.i("offline skip " + Msg);
+ if (Config.LOG_TOFILE) ICLogger.logToFile( "APILog", " offlineskip " + Msg.cmd()+" "+Msg.isFromCache());
+ }
+ }
+}
+ private static int getMinSignalStrength(int paramInt) {
+ int b = -105;
+ switch (paramInt) {
+ case SimSignalUtil.IS_4G:
+ b = -100;
+ break;
+ case SimSignalUtil.IS_2G:
+ case SimSignalUtil.IS_3G:
+ default:
+ break;
+ }
+ return b;
+ }
+
+ public static PowerManager.WakeLock WakeLockForGetWifiList(Runtime paramRuntime) {
+ PowerManager.WakeLock wakeLock = ((PowerManager)(paramRuntime.getContextProxy()).context.getSystemService(Context.POWER_SERVICE)).newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, Deliver.class.getSimpleName());
+ wakeLock.acquire(120000L);
+ return wakeLock;
+ }
+
+ private boolean isSilence(Runtime paramRuntime) {
+ return SharPreferenceUtil.getPrefBoolean((paramRuntime.getContextProxy()).context, "KEY_ISSILENCE", false);
+ }
+
+ public static void releaseWakeLockForGetWifiList() {
+ if (WifiListWakeLock == null) {
+ ICLogger.i("WifiListWakeLock 没有加锁");
+ return;
+ }
+ if (WifiListWakeLock.isHeld()) {
+ WifiListWakeLock.release();
+ WifiListWakeLock = null;
+ }
+ }
+
+ public PowerManager.WakeLock getWakeLock() {
+ PowerManager.WakeLock wakeLock = ((PowerManager)(this.mRuntime.getContextProxy()).context.getSystemService(Context.POWER_SERVICE)).newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, Deliver.class.getSimpleName());
+ wakeLock.acquire(40000L);
+ return wakeLock;
+ }
+
+ public void onAlarmClock(Connection paramConnection, Runtime paramRuntime) {}
+
+ public void onAttach(Connection paramConnection, Runtime paramRuntime) {}
+
+ @Override
+ public boolean onConnectionClose(Connection paramConnection, Runtime paramRuntime, String ErrorMsg) {
+ return false; }
+
+ public boolean onConnectionOpen(Connection paramConnection, Runtime paramRuntime) { return false; }
+
+ public void onDetach(Connection paramConnection, Runtime paramRuntime) {}
+
+ public boolean onReceive(StringMessage paramStringMessage, Connection paramConnection, final Runtime paramRuntime) {
+ this.mConnection = paramConnection;
+ this.mRuntime = paramRuntime;
+ String cmd = paramStringMessage.cmd();
+ if(Config.protocol_no==Config.PROTOCOL_MQTT)
+ {
+ cmd=protocolAPIHelper.isCmdStr(paramStringMessage);
+ }
+ //如果需要检测是否响应。
+ StringMessage msgWait=mRuntime.getDbHelper().queryWaitCMDRecord();
+ dumpMessage(msgWait);
+ if(msgWait!=null) {
+ ICLogger.i("====== checkSrvResponse cmd " + cmd + " msg " + protocolAPIHelper.isCmdStr(msgWait));
+ if (cmd.equals(protocolAPIHelper.isCmdStr(msgWait))) {
+ ICLogger.i("checkSrvResponse " + cmd + " " + protocolAPIHelper.isCmdStr(msgWait) + " is responsed!");
+ mRuntime.getDbHelper().updateCMDRecord(msgWait.getIndex(), 2);//设置为已读
+ CheckCount = 0;
+ }
+ }
+
+ ICLogger.i("Deliver receive cmd " + paramStringMessage.cmd());
+ if (cmd.equals("SentVoicePacket") ) {
+ //收到BP07 表示服务器收到一个voicePacket 分包成功,开始检查下一个包是否存在需要发送。
+ //收到SentVoicePacket 表示 有一个VoiceMessage要发送,需要从第0个包开始发送语音分包。
+ voicePacket voicepacket = voicePacket.getInstanceSent();
+ if (voicepacket.getCurrentIndexToSent() < voicepacket.getPacketCount()) {
+ ICLogger.i("voicepacket " + voicepacket.getName() + " filetype " + voicepacket.getFiletype() + " , datatype " + voicepacket.getDateType() +" "+ voicepacket.getPacketTime() + " send " + (voicepacket.getCurrentIndexToSent() + 1) + "/" + voicepacket.getPacketCount());
+ if(mConnection instanceof NettyConnection) {
+ ((NettyConnection) mConnection).sendMsg("RAWPACKET",
+ protocolAPIHelper.getVoicePacketItem(voicepacket.getPacketTime(),
+ voicepacket.getPacketCount(),
+ (voicepacket.getCurrentIndexToSent() + 1),
+ voicepacket.getVoicePacketWithIndex(voicepacket.getCurrentIndexToSent()).getPacketLen(),
+ voicepacket.getVoicePacketWithIndex(voicepacket.getCurrentIndexToSent()).getPacketData(), voicepacket.getFiletype(), voicepacket.getDateType())
+ );
+ }
+ } else {
+ ICLogger.i("voicepacket " + voicepacket.getName() + " filetype " + voicepacket.getFiletype() + " , datatype " + voicepacket.getDateType() + " " + voicepacket.getPacketTime() + " sent Done!");
+ }
+ return true;
+ } else if ("PhotoRemoteTaken".equals(paramStringMessage.cmd())) {
+ //接收到拍照完毕命令,发送照片
+
+ String msgUrl=paramStringMessage.isFromCache();
+ ICLogger.i("receive taken photo to send "+msgUrl);
+ //创建voiceConent并添加到数据
+ final VoiceContent voiceContent = VoiceContent.placeHolderOut(CONTACT_CATEGORY_GROUP, "123", msgUrl,2,2);
+
+ // 把voiceContent拆解成1024的分包
+ Util.parseToVoicePacketSent(voiceContent);
+ //trigger 分包发送
+ if (CoreService.getInstance().getConnection()!=null) {
+
+
+ //H88 专用功能拍照时检测用户体温心率
+ if(Util.getSystemProperties("persist.sys.do_check_condition","false").equals("true")) {
+ //开启测温
+ if(mRuntime.check_stat_do_temp_test()) {
+ TemperatureUtil.DoTempTest();
+ }
+
+ Util.mSleep(5000);
+ //开启测量PPG
+ if(mRuntime.check_stat_do_ppg_test()) {
+ HeartRateManager.triggerPPGtest();
+ }
+ }
+
+ CoreService.getInstance().getConnection().DeliverCMDMessageToSystem("SentVoicePacket", "");
+ }
+ return true;
+ } else if ("poweroffCheckSim".equals(paramStringMessage.cmd())) {
+ paramRuntime.setShutdown(true);
+
+ if (SimSignalUtil.hasSimCard(paramRuntime.getContextProxy().context))
+ {
+ ICLogger.i("Has Sim Card Skip poweroff!");
+ Util.ShowToast(paramRuntime,"Has Sim Card Skip poweroff!");
+ return true;
+ }else{
+ Util.ShowToast(paramRuntime,"Do poweroff!");
+ }
+ mSendMSGHandler.postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ Util.shutdown();
+ }
+ },2000);
+ return true;
+ } else if ("FactoryResetCheckSim".equals(paramStringMessage.cmd())) {
+
+ if (SimSignalUtil.hasSimCard(paramRuntime.getContextProxy().context))
+ {
+ ICLogger.i("Has Sim Card Skip FactoryReset!");
+ Util.ShowToast(paramRuntime,"Has Sim Card Skip FactoryReset!");
+
+ return true;
+ }else{
+ Util.ShowToast(paramRuntime,"Do FactoryReset!");
+ }
+ mSendMSGHandler.postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ Util.doMasterClear(paramRuntime.getContextProxy().context);
+ }
+ },2000);
+ return true;
+ } else if ("poweroff".equals(paramStringMessage.cmd())) {
+ paramRuntime.setShutdown(true);
+ mSendMSGHandler.postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ Util.shutdown();
+ }
+ },2000);
+ return true;
+ } else if ("FactoryReset".equals(paramStringMessage.cmd())) {
+ mSendMSGHandler.postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ Util.doMasterClear(paramRuntime.getContextProxy().context);
+ }
+ },2000);
+ return true;
+ } else if ("Reboot".equals(paramStringMessage.cmd())) {
+ mSendMSGHandler.postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ Util.reboot(paramRuntime.getContextProxy().context);
+ }
+ },2000);
+ return true;
+ } else if ("heartbeat".equals(paramStringMessage.cmd())) {
+ //每次心跳,查询一下 是否有语音消息需要接收。
+// paramConnection.send(protocolAPIHelper.genStringMessage("AP05",protocolAPIHelper.AP05(true)));
+
+ } else if ("getWeather".equals(paramStringMessage.cmd())) {
+ ICLogger.i("获取天气");
+ mConnection.send(protocolAPIHelper.getWeatherMSG(mRuntime));
+ } else if ("NewVoice".equals(paramStringMessage.cmd()))
+ {
+ mSendMSGHandler.postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ final Context context = (Deliver.this.mRuntime.getContextProxy()).context;
+
+ Contact param2Contact = new Contact(CATEGORY_GROUP, (mRuntime.getContextProxy()).context.getResources().getString(R.string.all_group), Contact.GROUP_ALL);
+ int i = mRuntime.getContextProxy().getTelephonyManager().getCallState();
+ if (!mRuntime.getBatteryLow() && 1 != i && 2 != i) {
+ if (Config.do_broadCast_message)
+ {
+
+ ICLogger.d(Constants.ACTION_MESSAGE_RECEIVED+" "+paramStringMessage.isFromCache());
+ //广播 voice消息
+ Intent intent = new Intent();
+ intent.setAction(Constants.ACTION_MESSAGE_RECEIVED);
+ intent.putExtra(Constants.KEY_MESSAGE_TYPE,"voice");
+ intent.putExtra(Constants.KEY_MESSAGE_FROM,"广播消息");
+ intent.putExtra(Constants.KEY_MESSAGE_URL,paramStringMessage.isFromCache());
+
+ // playVoice(context,paramStringMessage.isFromCache());
+ context.sendBroadcast(intent);
+ }
+
+ if (Config.noVoiceNotifyDialog==false) {
+
+ Intent intent = new Intent();
+ //显示提示窗口
+ intent.setAction(DIALOG_ACTION);
+ intent.putExtra("contact", (Parcelable) param2Contact);
+ context.sendBroadcast(intent);
+ }
+
+ }
+ }
+ },500);
+
+ return true;
+ }else if ("findDev".equals(paramStringMessage.cmd())) {
+
+ mSendMSGHandler.postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ final Context context = (Deliver.this.mRuntime.getContextProxy()).context;
+ Intent intent = new Intent();
+ ICLogger.d(Constants.ACTION_MESSAGE_RECEIVED+" "+paramStringMessage.isFromCache());
+ //显示提示窗口
+ intent.setAction(DIALOG_ACTION);
+ intent.putExtra("findDev", "Find Device");
+ context.sendBroadcast(intent);
+ }
+ },500);
+
+ return true;
+ }else if ("takephoto".equals(paramStringMessage.cmd())) {
+
+ mSendMSGHandler.postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ final Context context = (Deliver.this.mRuntime.getContextProxy()).context;
+ Intent intent = new Intent();
+ ICLogger.d(Constants.ACTION_MESSAGE_RECEIVED+" "+paramStringMessage.isFromCache());
+ //显示提示窗口
+ intent.setAction(DIALOG_ACTION);
+ intent.putExtra("takephoto", "Take Photo !");
+ context.sendBroadcast(intent);
+ }
+ },500);
+
+ return true;
+
+ }else if ("StartMonitor".equals(paramStringMessage.cmd())) {
+
+ String recordfilepath=Util.getRecordfilePath(mRuntime, TimeUtil.getSystemTime3());
+ int recordtime=Integer.parseInt(paramStringMessage.isFromCache().trim());
+ mSendMSGHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ AudioService.getInstance().startRecord(recordfilepath);
+ }
+ });
+ mSendMSGHandler.postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ AudioService.getInstance().stopRecord();
+ ICLogger.i("Monitor Record to send "+recordfilepath);
+ //创建voiceConent并添加到数据
+ /**
+ * * * 1 语音—— 1.监听语音 * 2.SOS语音 * 3.扩展
+ * * * 2 图片—— 1.签到图片 * 2.指令图片 * 3.设备图片 * 4.扩展
+ */
+ final VoiceContent voiceContent = VoiceContent.placeHolderOut(CONTACT_CATEGORY_GROUP, "123", recordfilepath,1,1);
+
+ // 把voiceContent拆解成1024的分包
+ Util.parseToVoicePacketSent(voiceContent);
+ //trigger 分包发送
+ if (CoreService.getInstance().getConnection()!=null)
+ CoreService.getInstance().getConnection().DeliverCMDMessageToSystem("SentVoicePacket", "");
+ }
+ },recordtime*1000);
+
+ return true;
+ }
+
+ return false;
+ }
+
+
+
+ private void playVoice(Context paramContext,String voicefile) {
+ AudioService.getInstance().play(voicefile);
+ }
+
+ public static void releaseOneWakeLock() {
+ if (ReceiveWakeLock == null) {
+ ICLogger.i("ReceiveWakeLock 没有加锁");
+ return;
+ }
+ if (!wakeLockWifiList && !wakeLockWifiSet && ReceiveWakeLock.isHeld()) {
+ ReceiveWakeLock.release();
+ ReceiveWakeLock = null;
+ }
+ }
+
+ public void releaseReceiveWakeLock() {
+ if (this.ReceiveWakeLock == null) {
+ ICLogger.i("ReceiveWakeLock 没有加锁");
+ return;
+ }
+ if (this.ReceiveWakeLock.isHeld()) {
+ this.ReceiveWakeLock.release();
+ this.wakeLockWifiList = false;
+ this.wakeLockWifiSet = false;
+ this.ReceiveWakeLock = null;
+ }
+ }
+ public static void connectToWifi(String ssid,String pwd,String encryptType){
+ int networkid;
+ final WifiManager wifiManager = mRuntime.getContextProxy().getWifiManager();
+ wifiEnabled = wifiManager.isWifiEnabled();
+ if (!wifiEnabled)
+ {
+ //没开就打开wifi
+ Util.turnOnWifiForConnect(mRuntime.getContextProxy().context, mRuntime);
+ }
+ if (Util.isConnectWifi(mRuntime.getContextProxy().context)) {
+ networkid = wifiManager.getConnectionInfo().getNetworkId();
+ wifiManager.disconnect();
+ wifiManager.removeNetwork(networkid);
+ wifiManager.saveConfiguration();
+ }
+
+ Deliver.isAppSetWifi = 1;
+ WifiConfiguration wifiConfiguration = Util.GetconfigWifiInfo(mRuntime.getContextProxy().context, ssid, pwd, encryptType);
+ networkid = wifiConfiguration.networkId;
+ wifiManager.removeNetwork(networkid);
+ wifiManager.saveConfiguration();
+ networkid = wifiManager.addNetwork(wifiConfiguration);
+ if (Util.connectWifiByReflectMethod(mRuntime.getContextProxy().context, networkid) == null && !wifiManager.enableNetwork(networkid, true)) {
+ ICLogger.i("连接失败 3");
+ SystemClock.sleep(3000L);
+ String isUserOpen = Util.getSystemProperties("persist.sys.ic.wifi_enable", "false");
+ ICLogger.d("is open by user == > " + isUserOpen);
+ if ("false".equals(isUserOpen)) {
+ //用户手动打开的,那么就不关闭wifi了
+ wifiManager.setWifiEnabled(false);
+ }
+ wakeLockWifiSet = false;
+ releaseOneWakeLock();
+ WifiListWakeLock = Deliver.WakeLockForGetWifiList(mRuntime);
+
+ return;
+ }
+
+ if(!wifiEnabled ){
+ //原来wifi没开就关闭wifi
+ Util.turnOffWifiForSleep(mRuntime.getContextProxy().context, mRuntime);
+ }
+
+ }
+ public void setWakeupAlarm(Runtime paramRuntime) {
+ AlarmManager alarmManager = (AlarmManager)(paramRuntime.getContextProxy()).context.getSystemService(Context.ALARM_SERVICE);
+ Intent intent = new Intent((paramRuntime.getContextProxy()).context, CoreService.class);
+ intent.setAction(ACTION_WAKEUP_ALARM);
+ PendingIntent pendingIntent = PendingIntent.getService((paramRuntime.getContextProxy()).context, 0, intent, FLAG_UPDATE_CURRENT);
+ alarmManager.cancel(pendingIntent);
+ long l = SystemClock.elapsedRealtime();
+ StringBuilder stringBuilder = new StringBuilder();
+ stringBuilder.append("SDK_INT=");
+ stringBuilder.append(Build.VERSION.SDK_INT);
+ stringBuilder.append(",m=,");
+ stringBuilder.append(23);
+ stringBuilder.append(",kitkat=");
+ stringBuilder.append(19);
+ ICLogger.i(stringBuilder.toString());
+ if (Build.VERSION.SDK_INT >= 19) {
+ alarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, l + 10000L, pendingIntent);
+ return;
+ }
+ alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, l + 10000L, pendingIntent);
+ }
+
+ class ConWifiReceiver extends BroadcastReceiver {
+ ConWifiReceiver() {
+ }
+
+ public void onReceive(final Context var1, Intent var2) {
+ String var3 = var2.getAction();
+ StringBuilder var4 = new StringBuilder();
+ var4.append(" receive action=");
+ var4.append(var3);
+ var4.append(" isAppSetWifi=");
+ var4.append(Deliver.isAppSetWifi);
+ ICLogger.i(var4.toString());
+ if (var3.equals("android.net.conn.CONNECTIVITY_CHANGE")) {
+ if (Deliver.isAppSetWifi == 0) {
+ return;
+ }
+
+ if (Deliver.isAppSetWifi == 1) {
+ Deliver.isAppSetWifi = 0;
+ if (Deliver.this.delayHandler != null) {
+ Deliver.this.delayHandler.removeCallbacks(Deliver.this.delayTh);
+ Deliver.this.delayHandler = null;
+ }
+ }
+
+ WifiManager var5 = (WifiManager)var1.getSystemService(Context.WIFI_SERVICE);
+ if (((ConnectivityManager)var1.getSystemService(Context.CONNECTIVITY_SERVICE)).getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected()) {
+ ICLogger.i("连接成功");
+ Deliver.isAppSetWifi = 0;
+ Deliver.haveSendH42 = true;
+ Deliver.this.mConnection.connect(Deliver.this.mRuntime.getHost(), Deliver.this.mRuntime.getPort());
+ if (Deliver.this.delayHandler != null) {
+ Deliver.this.delayHandler.removeCallbacks(Deliver.this.delayTh);
+ Deliver.this.delayHandler = null;
+ }
+
+ var1.unregisterReceiver(Deliver.this.mMyWifiReceiver);
+ Deliver.this.mMyWifiReceiver = null;
+ Deliver.this.wakeLockWifiSet = false;
+ Deliver.this.releaseOneWakeLock();
+ Deliver.WifiListWakeLock = Deliver.WakeLockForGetWifiList(Deliver.this.mRuntime);
+ } else {
+ StringBuilder var6 = new StringBuilder();
+ var6.append("连接失败 222 delayHandler=");
+ var6.append(Deliver.this.delayHandler);
+ ICLogger.i(var6.toString());
+ Deliver.isAppSetWifi = 2;
+ var5.reconnect();
+ if (Deliver.this.delayHandler == null) {
+ Deliver.this.delayHandler = new Handler();
+ Deliver.this.delayTh = new Runnable() {
+ public void run() {
+ StringBuilder var1x = new StringBuilder();
+ var1x.append("连接失败 超时 wifiEnabled=");
+ var1x.append(Deliver.this.wifiEnabled);
+ ICLogger.i(var1x.toString());
+ if (Deliver.isAppSetWifi != 1) {
+ Deliver.isAppSetWifi = 0;
+ var1.unregisterReceiver(Deliver.this.mMyWifiReceiver);
+ Deliver.this.mMyWifiReceiver = null;
+ WifiManager var3 = (WifiManager)var1.getSystemService(Context.WIFI_SERVICE);
+ if (((ConnectivityManager)var1.getSystemService(Context.CONNECTIVITY_SERVICE)).getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected()) {
+ ICLogger.i("连接成功 1");
+ Deliver.haveSendH42 = true;
+ Deliver.this.mConnection.connect(Deliver.this.mRuntime.getHost(), Deliver.this.mRuntime.getPort());
+ Deliver.this.wakeLockWifiSet = false;
+ Deliver.this.releaseOneWakeLock();
+ Deliver.WifiListWakeLock = Deliver.WakeLockForGetWifiList(Deliver.this.mRuntime);
+ } else {
+ int var2 = var3.getConnectionInfo().getNetworkId();
+ if (var2 != -1) {
+ var3.disableNetwork(var2);
+// ServiceUtil.offerQueue(API.H42(Deliver.this.mRuntime, "3"));
+ Deliver.this.wakeLockWifiSet = false;
+ Deliver.this.releaseOneWakeLock();
+ Deliver.WifiListWakeLock = Deliver.WakeLockForGetWifiList(Deliver.this.mRuntime);
+ } else {
+ ICLogger.i("连接失败 2-2");
+// ServiceUtil.offerQueue(API.H42(Deliver.this.mRuntime, "3"));
+ Deliver.this.wakeLockWifiSet = false;
+ Deliver.this.releaseOneWakeLock();
+ Deliver.WifiListWakeLock = Deliver.WakeLockForGetWifiList(Deliver.this.mRuntime);
+ }
+
+ if (!Deliver.this.wifiEnabled) {
+ var3.setWifiEnabled(false);
+ }
+ }
+
+ Deliver.this.delayHandler = null;
+ }
+ }
+ };
+ Deliver.this.delayHandler.postDelayed(Deliver.this.delayTh, 30000L);
+ }
+ }
+ }
+
+ }
+ }
+
+
+}
+