import java.lang.ref.WeakReference;\r
import chestnut.ui.Toastc;\r
import chestnut.utils.PhoneUtils;\r
+import rx.Observable;\r
+import rx.functions.Action1;\r
\r
import android.content.BroadcastReceiver;\r
import android.content.Context;\r
import java.util.Random;\r
import java.util.Timer;\r
import java.util.TimerTask;\r
+import java.util.concurrent.TimeUnit;\r
\r
import static android.app.PendingIntent.FLAG_UPDATE_CURRENT;\r
import static com.enqualcomm.support.Constants.ACTION_ALARM_ADD_DATAPOINTS;\r
//设置5分钟后结束紧急定位模式\r
setEmegencyLocationSTOPAlarm(5);\r
\r
- trigger_SOS_Call();\r
+ //5秒后开始拨打电话\r
+ Observable.timer(5000L, TimeUnit.MILLISECONDS).subscribe(new Action1<Long>() {\r
+ public void call(Long param1Long) {\r
+ trigger_SOS_Call();\r
+ }\r
+ });\r
+\r
\r
}\r
}\r
\r
private static Runtime mRuntime;\r
\r
- private final String spilForWifi = "@EQCWIFI@";\r
- \r
private boolean wakeLockWifiList = false;\r
\r
private boolean wakeLockWifiSet = false;\r
//把queue 保存在磁盘中的缓存文件\r
//此文件只缓存 除了 登录指令AP00,心跳AP03以及voice 分包指令以外的需要上传的指令。初步规划为 定位AP01和心率/血压 APHT\r
fileCache = new FileCache(paramRuntime.getFileDir());\r
- initQueue();\r
}\r
\r
private static boolean checkNetwork(){\r
}\r
Logger.i("send cached cmd: \n"+str);\r
}finally {\r
- lock.unlock();\r
+ if(lock!=null && lock.isLocked())\r
+ lock.unlock();\r
}\r
-// mLock.lock();\r
-// try {\r
-// mCondition.signal();\r
-//\r
-// } finally {\r
-// mLock.unlock();\r
-// }\r
- }\r
- }\r
- MyThread2 mythread2=null;\r
-\r
- private void initQueue(){\r
-// if (mRuntime.getUseQueue()) {\r
-// /*启动 阻塞队列buffer 发送县城,随时准备发送buffer的message*/\r
-// if (mythread2 == null)\r
-// mythread2 = new MyThread2(this.mCondition, this.mLock);\r
-// mythread2.exitthread=false;\r
-// mythread2.start();\r
-// }\r
- }\r
\r
- private void deInitQueue(){\r
- if (mRuntime.getUseQueue()) {\r
- mythread2.exitthread = true;\r
- if (mythread2 != null) {\r
-// mythread2.stop();\r
- mythread2 = null;\r
- }\r
}\r
}\r
private static void loadMessage2Queue() {\r
}\r
\r
\r
- static class MyThread2 extends Thread {\r
- Condition condition;\r
-\r
- boolean isResent = false;\r
- public boolean exitthread=false;\r
- ReentrantLock lock;\r
-\r
- public MyThread2(Condition param1Condition, ReentrantLock param1ReentrantLock) {\r
- this.condition = param1Condition;\r
- this.lock = param1ReentrantLock;\r
- }\r
-\r
- public void run() {\r
- StringMessage stringMessage = null;\r
-\r
- while (!exitthread) {\r
-\r
- //循环发送queue 中的数据\r
-\r
- try {\r
- Logger.i("Sending Thread Queue Take ");\r
-\r
- StringMessage stringMessage1 = (StringMessage)queue.take();\r
- try {\r
-\r
- int signal=mRuntime.getSignalStrength();\r
- int networkType=SimSignalUtil.getInstance((mRuntime.getContextProxy()).context).getNetworkType();\r
- if (signal + 110 < getMinSignalStrength(networkType)) {\r
- Logger.i("Skip Send for SignalStrengh "+(signal + 110 )+" < "+getMinSignalStrength(networkType));\r
- //如果信号不好,把msg放回去\r
- queue.putFirst(stringMessage1);\r
-\r
- } else {\r
-\r
- stringMessage=stringMessage1;\r
-\r
- Context context = (mRuntime.getContextProxy()).context;\r
- StringBuilder stringBuilder = new StringBuilder();\r
- stringBuilder.append("send=");\r
- stringBuilder.append(stringMessage.cmd());\r
- stringBuilder.append(", ");\r
- stringBuilder.append(stringMessage.isFromCache());\r
- if (Config.LOG_TOFILE) FileOutputUtil.fileOutput(mRuntime.getCacheDir(), "MessageInfo", stringBuilder.toString());\r
- Logger.i(stringBuilder.toString());\r
- if( connection.isServerConnected() ==false && !KeepAlive.isConnected ) {\r
-\r
- Logger.i("Skip Send for connection and KeepAlive both false ");\r
- //发现连接断开则重试连接\r
-// CoreService.getInstance().startConnectionRetryTimer();\r
- //连接断开就把msg放回队列,以便重发\r
- queue.putFirst(stringMessage1);\r
- }else{\r
- //连接状态都正常才发送包\r
- connection.send(stringMessage);\r
- }\r
-\r
-\r
- this.lock.lock();\r
-\r
- try {\r
- if (KeepAlive.isConnected) {\r
- //如果 服务器连接状态,等30秒,随时等待数据发送\r
- Logger.i("KeepAlive.isConnected "+KeepAlive.isConnected+" delay 30000ms");\r
- this.condition.await(30000L, TimeUnit.MILLISECONDS);\r
- } else {\r
- //如果服务器断开,等5秒 以便连接后尽快进入下一循环,尽量及时响应\r
- Logger.i("KeepAlive.isConnected "+KeepAlive.isConnected+ " , connection isconnected "+connection.isServerConnected()+" delay 5000ms");\r
-\r
- this.condition.await(5000L, TimeUnit.MILLISECONDS);\r
- }\r
-\r
-\r
- if (queue.peek() == null) {\r
- loadMessage2Queue();\r
- this.lock.unlock();\r
- continue;\r
- }\r
-\r
- } catch (InterruptedException e) {\r
- e.printStackTrace();\r
- }finally{\r
- this.lock.unlock();\r
- }\r
- }\r
- } catch (Exception e) {\r
- e.printStackTrace();\r
- }\r
- } catch (Exception e) {\r
- e.printStackTrace();\r
- }\r
- }//while end\r
- }\r
- }\r
public static void sendLocationMSG( String Msg){\r
\r
if(mRuntime.getUseQueue()){\r