private boolean scanBLEOnly=false;\r
\r
//如果未扫到,重试扫描的次数。\r
- private int maxBLEScanTime=2;\r
+ private int maxBLEScanTime=1;\r
private int ScanBLERetryCount=maxBLEScanTime;\r
-\r
-\r
+ private int OneBLEScanTimeOUT=15;\r
\r
private static LocationClient gLocationCline=null;\r
// private BroadcastReceiver screenOnReceiver = new BroadcastReceiver() {\r
public LocationClient(Connection paramNettyConnection, Runtime paramRuntime) {\r
connection = paramNettyConnection;\r
runtime = paramRuntime;\r
- btHelper=BTHelper.getInstance(paramRuntime.getContextProxy().context, new BTHelper.BTScanCallback() {\r
+ btHelper=BTHelper.CreateInstance(paramRuntime, new BTHelper.BTScanCallback() {\r
@Override\r
public void OnScanFinished(ArrayList<String> btPairedScanResult, ArrayList<String> btNewScanResult) {\r
\r
\r
}\r
});\r
+\r
+ btHelper.setBLEScanTimeout(OneBLEScanTimeOUT);\r
gLocationCline=this;\r
//GPS 监听管理初始化\r
this.nmeaListener = new NMEAListener(paramRuntime.getContextProxy().getLocationManager(), paramRuntime);\r
(Config.forceMoveCheck==true) &&\r
(NoMoveTimeout) && (skipMoveCheck ==false )){\r
ICLogger.i("No Move ,skip BT location!");\r
+\r
return false;\r
}\r
ICLogger.i("BT NoMoveTimeout "+NoMoveTimeout+", forceLocation="+forceLocation+", Config.forceMoveCheck="+Config.forceMoveCheck+", skipMoveCheck="+skipMoveCheck);\r
import android.content.Intent;\r
import android.content.IntentFilter;\r
import android.os.Handler;\r
-\r
+import com.enqualcomm.support.bean.Runtime;\r
import com.enqualcomm.support.Config;\r
import com.enqualcomm.support.utils.ICLogger;\r
\r
private Context mContext=null;\r
private BTScanCallback mCallback=null;\r
private static BTHelper mBThelper=null;\r
- private int BLETimeoutForOneScan=6;\r
+ private int BLETimeoutForOneScan=10;\r
private static boolean btscanning=false;\r
+ private static Runtime mRuntime;\r
private boolean enabledBeforScan=false;\r
+ private Handler mHandler=null;\r
BTHelper(){\r
\r
}\r
\r
+ public void setBLEScanTimeout(int timeout){\r
+ BLETimeoutForOneScan=timeout;\r
+ }\r
+ private boolean isBeaconFounded(String beaconAddr){\r
+\r
+ String tmp = beaconAddr.replace(":", "").toLowerCase();\r
+ if(tmp.contains(","))\r
+ tmp = tmp.substring(0, tmp.indexOf(","));\r
+\r
+ for (String beacon:mRuntime.bleInfo.btMacList){\r
+// ICLogger.i(beacon +" ==? "+tmp);\r
+ if (tmp.equals(beacon)) {\r
+ ICLogger.i("bt mac " + tmp + " " + beaconAddr.toLowerCase());\r
+ return true;\r
+ }\r
+ }\r
+// ICLogger.i(" false ");\r
+ return false;\r
+ }\r
//enableBT\r
public void enableBT() {\r
ICLogger.i("BT enableBT()");\r
//disableBT\r
public void disableBT(){\r
ICLogger.i( "BT disableBT()");\r
- btscanning=false;\r
- if (mBtAdapter.isEnabled()) {\r
+ if (mBtAdapter.isEnabled()) {\r
mBtAdapter.disable();\r
// Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);\r
// mContext.startActivity(enableIntent);\r
}\r
+ btscanning=false;\r
}\r
\r
//初始化 BTHlper\r
\r
// Get the local Bluetooth adapter\r
mBtAdapter = BluetoothAdapter.getDefaultAdapter();\r
+ mHandler = new Handler();\r
+ lecallback = new BLeScanCallback();\r
\r
}\r
\r
+\r
//获取实例\r
- public static BTHelper getInstance(Context context , BTScanCallback callback){\r
+ public static BTHelper CreateInstance(Runtime runtime , BTScanCallback callback){\r
+ mRuntime=runtime;\r
if (mBThelper==null) {\r
ICLogger.i( "BT getInstance ");\r
mBThelper = new BTHelper();\r
- mBThelper.Init(context,callback);\r
+ mBThelper.Init(runtime.getContextProxy().context,callback);\r
}\r
return mBThelper;\r
}\r
\r
+\r
// // The BroadcastReceiver that listens for discovered devices and\r
// // changes the title when discovery is finished\r
// private final BroadcastReceiver mReceiver = new BroadcastReceiver() {\r
//\r
// }\r
\r
+\r
+ private BLeScanCallback lecallback =null;\r
+\r
+ private RunableStopBleScan mRunable_stopBleScan=new RunableStopBleScan();\r
+\r
+ private static boolean hasStopedByFoundBT=false;\r
public boolean isBtscanning(){\r
return btscanning;\r
}\r
\r
// mBtAdapter.startDiscovery();\r
\r
-\r
- mBtAdapter.setScanMode(BluetoothAdapter.SCAN_MODE_NONE, Config.bleScanTimeout);\r
- LeScanCallback lecallback = new LeScanCallback() {\r
-\r
- @Override\r
- public void onLeScan(BluetoothDevice bluetoothDevice, int rssi, byte[] scanRecode) {\r
-// ICLogger.i( "BT onLeScan "+bluetoothDevice.getName()+" "+bluetoothDevice.getAddress()+" rssi "+rssi);\r
-// ICLogger.logToFile("LBS","BT onLeScan "+bluetoothDevice.getName()+" "+bluetoothDevice.getAddress()+" rssi "+rssi );\r
- boolean found = false;\r
- for (String dev : mNewDevicesArray) {\r
- if (dev.contains(bluetoothDevice.getAddress())) {\r
- found = true;\r
- break;\r
- }\r
- }\r
- if (!found)\r
- mNewDevicesArray.add(bluetoothDevice.getAddress() + "," + rssi);\r
- }\r
- };\r
+// mBtAdapter.setScanMode(BluetoothAdapter.SCAN_MODE_NONE, BLETimeoutForOneScan);\r
\r
ICLogger.i("BT startLeScan");\r
mBtAdapter.startLeScan(lecallback);\r
+ mHandler.postDelayed(mRunable_stopBleScan, BLETimeoutForOneScan*1000);\r
\r
-\r
- new Handler().postDelayed(new Runnable() {\r
- @Override\r
- public void run() {\r
- ICLogger.i("BT stopLeScan");\r
- mBtAdapter.stopLeScan(lecallback);\r
-\r
- //开始扫描前是关闭的,就关闭它\r
-// if(!enabledBeforScan)\r
- disableBT();\r
-\r
- if (mCallback != null)\r
- mCallback.OnScanFinished(mPairedDevicesArray, mNewDevicesArray);\r
- }\r
- }, BLETimeoutForOneScan*1000);\r
}else{\r
ICLogger.i("BT Scanning skip Scan!");\r
}\r
\r
}\r
}\r
+ private class BLeScanCallback implements LeScanCallback{\r
+\r
+ @Override\r
+ public void onLeScan(BluetoothDevice bluetoothDevice, int rssi, byte[] scanRecode) {\r
+// ICLogger.i( "BT onLeScan "+bluetoothDevice.getName()+" "+bluetoothDevice.getAddress()+" rssi "+rssi);\r
+// ICLogger.logToFile("LBS","BT onLeScan "+bluetoothDevice.getName()+" "+bluetoothDevice.getAddress()+" rssi "+rssi );\r
+ boolean found = false;\r
+ for (String dev : mNewDevicesArray) {\r
+ if (dev.contains(bluetoothDevice.getAddress())) {\r
+ found = true;\r
+ break;\r
+ }\r
+ }\r
+\r
+ if (!found) {\r
+ mNewDevicesArray.add(bluetoothDevice.getAddress() + "," + rssi);\r
+ }\r
+\r
+ if(isBeaconFounded(bluetoothDevice.getAddress())){\r
+\r
+ hasStopedByFoundBT=true;\r
+ mHandler.removeCallbacks(mRunable_stopBleScan);\r
+\r
+ ICLogger.i("BT stopLeScan");\r
+ mBtAdapter.stopLeScan(this);\r
+\r
+ //开始扫描前是关闭的,就关闭它\r
+ // if(!enabledBeforScan)\r
+ disableBT();\r
+\r
+ if (mCallback != null)\r
+ mCallback.OnScanFinished(mPairedDevicesArray, mNewDevicesArray);\r
+ }\r
+ }\r
+ }\r
+\r
+ private class RunableStopBleScan implements Runnable{\r
+\r
+ @Override\r
+ public void run() {\r
+ ICLogger.i("BT stopLeScan");\r
+\r
+ if(hasStopedByFoundBT) {\r
+ hasStopedByFoundBT=false;\r
+ ICLogger.i(" BT has Stoped !");\r
+\r
+ }else{\r
+ mBtAdapter.stopLeScan(lecallback);\r
+ //开始扫描前是关闭的,就关闭它\r
+ // if(!enabledBeforScan)\r
+ disableBT();\r
+ if (mCallback != null)\r
+ mCallback.OnScanFinished(mPairedDevicesArray, mNewDevicesArray);\r
+ }\r
+ }\r
+ }\r
+\r
public interface BTScanCallback{\r
void OnScanFinished(ArrayList<String> btPairedScanResult,ArrayList<String> btNewScanResult);\r
-\r
}\r
}\r