@@ -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