Skip to content

Commit b6e7412

Browse files
committed
Syncronize scanning-related android code
1 parent 8af9440 commit b6e7412

File tree

1 file changed

+47
-40
lines changed

1 file changed

+47
-40
lines changed

src/android/BluetoothLePlugin.java

Lines changed: 47 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1030,7 +1030,7 @@ private void disableAction(CallbackContext callbackContext) {
10301030
//Else listen to initialize callback for disabling
10311031
}
10321032

1033-
private void startScanAction(JSONArray args, CallbackContext callbackContext) {
1033+
private synchronized void startScanAction(JSONArray args, CallbackContext callbackContext) {
10341034
if (isNotInitialized(callbackContext, true)) {
10351035
return;
10361036
}
@@ -1117,7 +1117,7 @@ private void startScanAction(JSONArray args, CallbackContext callbackContext) {
11171117
}
11181118
}
11191119

1120-
private void stopScanAction(CallbackContext callbackContext) {
1120+
private synchronized void stopScanAction(CallbackContext callbackContext) {
11211121
if (isNotInitialized(callbackContext, true)) {
11221122
return;
11231123
}
@@ -2512,21 +2512,24 @@ public void onActivityResult(int requestCode, int resultCode, Intent intent) {
25122512
private LeScanCallback scanCallbackKitKat = new LeScanCallback() {
25132513
@Override
25142514
public void onLeScan(final BluetoothDevice device, int rssi, byte[] scanRecord) {
2515-
if (scanCallbackContext == null) {
2516-
return;
2517-
}
2515+
synchronized(BluetoothLePlugin.this){
25182516

2519-
JSONObject returnObj = new JSONObject();
2517+
if (scanCallbackContext == null) {
2518+
return;
2519+
}
25202520

2521-
addDevice(returnObj, device);
2521+
JSONObject returnObj = new JSONObject();
25222522

2523-
addProperty(returnObj, keyRssi, rssi);
2524-
addPropertyBytes(returnObj, keyAdvertisement, scanRecord);
2525-
addProperty(returnObj, keyStatus, statusScanResult);
2523+
addDevice(returnObj, device);
25262524

2527-
PluginResult pluginResult = new PluginResult(PluginResult.Status.OK, returnObj);
2528-
pluginResult.setKeepCallback(true);
2529-
scanCallbackContext.sendPluginResult(pluginResult);
2525+
addProperty(returnObj, keyRssi, rssi);
2526+
addPropertyBytes(returnObj, keyAdvertisement, scanRecord);
2527+
addProperty(returnObj, keyStatus, statusScanResult);
2528+
2529+
PluginResult pluginResult = new PluginResult(PluginResult.Status.OK, returnObj);
2530+
pluginResult.setKeepCallback(true);
2531+
scanCallbackContext.sendPluginResult(pluginResult);
2532+
}
25302533
}
25312534
};
25322535

@@ -2544,43 +2547,47 @@ public void onBatchScanResults(List<ScanResult> results) {
25442547

25452548
@Override
25462549
public void onScanFailed(int errorCode) {
2547-
if (scanCallbackContext == null)
2548-
return;
2550+
synchronized(BluetoothLePlugin.this){
2551+
if (scanCallbackContext == null)
2552+
return;
25492553

2550-
JSONObject returnObj = new JSONObject();
2551-
addProperty(returnObj, keyError, errorStartScan);
2554+
JSONObject returnObj = new JSONObject();
2555+
addProperty(returnObj, keyError, errorStartScan);
2556+
2557+
if (errorCode == ScanCallback.SCAN_FAILED_ALREADY_STARTED) {
2558+
addProperty(returnObj, keyMessage, "Scan already started");
2559+
} else if (errorCode == ScanCallback.SCAN_FAILED_APPLICATION_REGISTRATION_FAILED) {
2560+
addProperty(returnObj, keyMessage, "Application registration failed");
2561+
} else if (errorCode == ScanCallback.SCAN_FAILED_FEATURE_UNSUPPORTED) {
2562+
addProperty(returnObj, keyMessage, "Feature unsupported");
2563+
} else if (errorCode == ScanCallback.SCAN_FAILED_INTERNAL_ERROR) {
2564+
addProperty(returnObj, keyMessage, "Internal error");
2565+
} else {
2566+
addProperty(returnObj, keyMessage, logScanStartFail);
2567+
}
25522568

2553-
if (errorCode == ScanCallback.SCAN_FAILED_ALREADY_STARTED) {
2554-
addProperty(returnObj, keyMessage, "Scan already started");
2555-
} else if (errorCode == ScanCallback.SCAN_FAILED_APPLICATION_REGISTRATION_FAILED) {
2556-
addProperty(returnObj, keyMessage, "Application registration failed");
2557-
} else if (errorCode == ScanCallback.SCAN_FAILED_FEATURE_UNSUPPORTED) {
2558-
addProperty(returnObj, keyMessage, "Feature unsupported");
2559-
} else if (errorCode == ScanCallback.SCAN_FAILED_INTERNAL_ERROR) {
2560-
addProperty(returnObj, keyMessage, "Internal error");
2561-
} else {
2562-
addProperty(returnObj, keyMessage, logScanStartFail);
2569+
scanCallbackContext.error(returnObj);
2570+
scanCallbackContext = null;
25632571
}
2564-
2565-
scanCallbackContext.error(returnObj);
2566-
scanCallbackContext = null;
25672572
}
25682573

25692574
@Override
25702575
public void onScanResult(int callbackType, ScanResult result) {
2571-
if (scanCallbackContext == null)
2572-
return;
2576+
synchronized(BluetoothLePlugin.this){
2577+
if (scanCallbackContext == null)
2578+
return;
25732579

2574-
JSONObject returnObj = new JSONObject();
2580+
JSONObject returnObj = new JSONObject();
25752581

2576-
addDevice(returnObj, result.getDevice());
2577-
addProperty(returnObj, keyRssi, result.getRssi());
2578-
addPropertyBytes(returnObj, keyAdvertisement, result.getScanRecord().getBytes());
2579-
addProperty(returnObj, keyStatus, statusScanResult);
2582+
addDevice(returnObj, result.getDevice());
2583+
addProperty(returnObj, keyRssi, result.getRssi());
2584+
addPropertyBytes(returnObj, keyAdvertisement, result.getScanRecord().getBytes());
2585+
addProperty(returnObj, keyStatus, statusScanResult);
25802586

2581-
PluginResult pluginResult = new PluginResult(PluginResult.Status.OK, returnObj);
2582-
pluginResult.setKeepCallback(true);
2583-
scanCallbackContext.sendPluginResult(pluginResult);
2587+
PluginResult pluginResult = new PluginResult(PluginResult.Status.OK, returnObj);
2588+
pluginResult.setKeepCallback(true);
2589+
scanCallbackContext.sendPluginResult(pluginResult);
2590+
}
25842591
}
25852592
};
25862593
}

0 commit comments

Comments
 (0)