\r
import android.content.BroadcastReceiver;\r
import android.content.Context;\r
+import android.content.IClipboard;\r
import android.content.Intent;\r
import android.content.IntentFilter;\r
import android.os.Handler;\r
runtime.bleInfo.last_is_in_area=runtime.bleInfo.is_in_area;\r
//扫描结束就清掉scanBLEOnly,保证下次不会被误操作。\r
scanBLEOnly=false;\r
- }else{ //Config.BLEScanProtocol==0\r
+ }else{\r
+ //Config.BLEScanProtocol == 1\r
if (btNewScanResult!=null && btNewScanResult.size() > 0) {\r
StringBuilder sb = new StringBuilder();\r
sb.append("found bt mac ").append(btNewScanResult.size());\r
public void call(Object param1Object) { waitAndSendLocation(); }\r
});\r
}else if (msg.what == msgWhat_StartLocationProcess) {\r
- if (runtime.bleInfo.btMacList.size() > 0) {\r
+ if (Config.BLEScanProtocol == 0 && runtime.bleInfo.btMacList.size() > 0) {\r
if(scanBLEOnly && btHelper.isBtscanning()){\r
//如果正在进行独立蓝牙扫描,则强制切换为正常扫描。\r
scanBLEOnly=false;\r
}else {\r
//有蓝牙搜索要求则 先进行蓝牙扫描\r
- if (needLocationForBT())\r
+ if (needLocation()) {\r
btHelper.scanBLE();\r
+ }\r
}\r
} else {\r
//没有蓝牙搜索要求,就正常定位\r
//有蓝牙搜索要求则 先进行蓝牙扫描\r
if (!btHelper.isBtscanning()) {\r
scanBLEOnly = true;\r
- if (needLocationForBT())\r
+ if (needLocationForBT()) {\r
+ ICLogger.i("msgWhat_StartBLEProcess");\r
btHelper.scanBLE();\r
+ }\r
} else {\r
ICLogger.i("BT Scanning skip ScanBLE only!");\r
}\r
}else{\r
//有蓝牙搜索要求则 先进行蓝牙扫描\r
if (!btHelper.isBtscanning()) {\r
- if (needLocationForBT())\r
+ if (needLocationForBT()) {\r
+ ICLogger.i("msgWhat_StartBLEProcess2");\r
btHelper.scanBLE();\r
+ }\r
} else {\r
- ICLogger.i("BT Scanning skip ScanBLE only!");\r
+ ICLogger.i("BT Scanning skip ScanBLE only2!");\r
}\r
}\r
}else if (msg.what == msgWhat_StartSOSLocationProcess){\r
//更新lbs信息\r
CellInfoUtil.getCellInfo(runtime.getContextProxy().getTelephonyManager(),runtime);\r
\r
- if (runtime.bleInfo.btMacList.size() > 0) {\r
- if(scanBLEOnly && btHelper.isBtscanning())\r
- {\r
- //如果正在进行独立蓝牙扫描,则强制切换为正常扫描。\r
- scanBLEOnly = false;\r
- }else {\r
- //有蓝牙搜索要求则 先进行蓝牙扫描\r
+ if (Config.BLEScanProtocol==0 && runtime.bleInfo.btMacList.size() > 0) {\r
startSOSLocation = true;//启动SOS定位,为了快速响应,只要wifi定位即可。\r
- forceLocation = 1;\r
- if (needLocationForBT())\r
- btHelper.scanBLE();\r
+ if (scanBLEOnly && btHelper.isBtscanning()) {\r
+ //如果正在进行独立蓝牙扫描,则强制切换为正常扫描。\r
+ scanBLEOnly = false;\r
+ } else {\r
+ //SOS location 有蓝牙搜索要求则 先进行蓝牙扫描\r
+ forceLocation = 1;\r
+ if(!btHelper.isBtscanning())\r
+ btHelper.scanBLE();\r
+ }\r
+ } else {\r
+ Util.mSleep(1000);\r
+ StringMessage waningmsg = protocolAPIHelper.getWarningMSG(runtime);\r
+ DeliverMessage(waningmsg);\r
}\r
- } else {\r
- Util.mSleep(1000);\r
- StringMessage waningmsg=protocolAPIHelper.getWarningMSG(runtime);\r
- DeliverMessage(waningmsg);\r
- }\r
}\r
\r
+\r
//\r
// startSOSLocation=true;//启动SOS定位,为了快速响应,只要wifi定位即可。\r
// forceLocation=1;\r
private static boolean last_noMove=false;\r
private static final int MaxNoMoveTimeout=3*60*1000; //3分钟\r
private static long first_NoMove_timestamp=0;\r
+ private static long first_NoMove_timestampForBT=0;\r
+ private static boolean last_noMoveForBT=false;\r
+\r
+ /***\r
+ *noMove and timeout return true\r
+ * else return false\r
+ */\r
+ private boolean checkNoMoveTimeoutForBT(){\r
+ noMove=runtime.getLastStepCountForBT() == runtime.getTotalStepCount();\r
+ runtime.updateFZDDevStatusMoving(!noMove); //设置当前运动状态\r
+ ICLogger.i("BT checkNoMoveTimeout last_noMoveForBT "+last_noMoveForBT+" noMove "+noMove+ " lastStepCountForBT "+runtime.getLastStepCountForBT()+" StepCount "+runtime.getTotalStepCount());\r
+ if (last_noMoveForBT==false&& noMove==true){\r
+ first_NoMove_timestampForBT=System.currentTimeMillis();\r
+ }else if (noMove==false){\r
+ first_NoMove_timestampForBT=0;\r
+ }\r
+ last_noMoveForBT=noMove;\r
+ //属于 判断是否 不动的状态超时\r
+ if (noMove==true&& first_NoMove_timestampForBT>0.01 && System.currentTimeMillis()-first_NoMove_timestampForBT > MaxNoMoveTimeout){\r
+ ICLogger.i("BT checkNoMoveTimeout true ");\r
+ return true;\r
+ }else{\r
+ ICLogger.i("BT checkNoMoveTimeout false");\r
+ return false;\r
+ }\r
\r
+ }\r
\r
/***\r
*noMove and timeout return true\r
private boolean checkNoMoveTimeout(){\r
noMove=runtime.getLastStepCount() == runtime.getTotalStepCount();\r
runtime.updateFZDDevStatusMoving(!noMove); //设置当前运动状态\r
- ICLogger.i(" checkNoMoveTimeout last_noMove "+last_noMove+" noMove "+noMove);\r
+ ICLogger.i("checkNoMoveTimeout last_noMove "+last_noMove+" noMove "+noMove+ " lastStepCount "+runtime.getLastStepCount()+" StepCount "+runtime.getTotalStepCount());\r
if (last_noMove==false&& noMove==true){\r
first_NoMove_timestamp=System.currentTimeMillis();\r
}else if (noMove==false){\r
private boolean needLocationForBT(){\r
updateStepCount();//update StepCount,保证每次定位前,计步数据是最新的。防止丢数据。\r
//如果没有动,且超时。则跳过定位\r
- NoMoveTimeout=checkNoMoveTimeout();\r
+ NoMoveTimeout=checkNoMoveTimeoutForBT();\r
ICLogger.i("BT NoMoveTimeout "+NoMoveTimeout+", forceLocation="+forceLocation+", Config.forceMoveCheck="+Config.forceMoveCheck+", skipMoveCheck="+skipMoveCheck);\r
\r
// 不强制定位 且 (WorkingMod 不是紧急模式 或者 强制进行移动检测),且 没有移动过\r
\r
return false;\r
}\r
+ //以目前逻辑,每次检测必然跟随蓝牙扫描,因此可以在此直接更新上一次的计步次数,配合下次的运动检测\r
+ runtime.setLastStepCountForBT(runtime.getTotalStepCount());\r
+ return true;\r
+ }\r
+\r
+ private boolean needLocation(){\r
+ updateStepCount();//update StepCount,保证每次定位前,计步数据是最新的。防止丢数据。\r
+ //如果没有动,且超时。则跳过定位\r
+ NoMoveTimeout=checkNoMoveTimeout();\r
+ ICLogger.i(" NoMoveTimeout "+NoMoveTimeout+", forceLocation="+forceLocation+", Config.forceMoveCheck="+Config.forceMoveCheck+", skipMoveCheck="+skipMoveCheck);\r
+\r
+ // 不强制定位 且 (WorkingMod 不是紧急模式 或者 强制进行移动检测),且 没有移动过\r
+ if ( ( forceLocation != 1 ) &&\r
+ (Config.forceMoveCheck==true) &&\r
+ (NoMoveTimeout) && (skipMoveCheck ==false )){\r
+ ICLogger.i("No Move ,skip BT location2!");\r
+\r
+ return false;\r
+ }\r
+ //只做正常定位前是否运动的判断,给定位前蓝牙扫描专用的。和 NeedlocationFotBT 还不同。\r
return true;\r
}\r
public void startLocationProcess(int mod){\r
forceLocation=0;\r
isLocating=true;\r
\r
-\r
-\r
+ //如果不动且超时,则意味着要进行定位,更新计步,配合下一次运动检查。\r
runtime.setLastStepCount(runtime.getTotalStepCount());\r
updateCellInfo();\r
if(!Config.disableWiFiScan) startWifiScan();\r