From 5d88f93a619a125d39f7ba6476ad1ace95eadd3a Mon Sep 17 00:00:00 2001 From: Gustavo Barbieri Date: Fri, 27 May 2022 14:12:48 -0300 Subject: [PATCH 1/7] Adding Headless Service --- .../com/lg2/eddystone/BootUpReceiver.java | 19 +++++++++ .../lg2/eddystone/EddystoneEventService.java | 21 ++++++++++ .../com/lg2/eddystone/EddystoneModule.java | 30 +++++++++----- .../com/lg2/eddystone/EddystoneService.java | 40 +++++++++++++++++++ src/Manager.js | 4 +- src/NativeModule.js | 4 +- src/index.js | 4 +- 7 files changed, 107 insertions(+), 15 deletions(-) create mode 100644 android/src/main/java/com/lg2/eddystone/BootUpReceiver.java create mode 100644 android/src/main/java/com/lg2/eddystone/EddystoneEventService.java create mode 100644 android/src/main/java/com/lg2/eddystone/EddystoneService.java diff --git a/android/src/main/java/com/lg2/eddystone/BootUpReceiver.java b/android/src/main/java/com/lg2/eddystone/BootUpReceiver.java new file mode 100644 index 0000000..a8b444c --- /dev/null +++ b/android/src/main/java/com/lg2/eddystone/BootUpReceiver.java @@ -0,0 +1,19 @@ +package com.lg2.eddystone; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.os.Build; + +public class BootUpReceiver extends BroadcastReceiver { + @Override + public void onReceive(Context context, Intent intent) { + if(intent.getAction() == Intent.ACTION_BOOT_COMPLETED){ + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + context.startForegroundService(new Intent(context, EddystoneService.class)); + return; + } + context.startService(new Intent(context, EddystoneService.class)); + } + } +} diff --git a/android/src/main/java/com/lg2/eddystone/EddystoneEventService.java b/android/src/main/java/com/lg2/eddystone/EddystoneEventService.java new file mode 100644 index 0000000..413e6b4 --- /dev/null +++ b/android/src/main/java/com/lg2/eddystone/EddystoneEventService.java @@ -0,0 +1,21 @@ +package com.lg2.eddystone; + +import android.content.Intent; +import android.os.Bundle; +import androidx.annotation.Nullable; + +import com.facebook.react.HeadlessJsTaskService; +import com.facebook.react.bridge.Arguments; +import com.facebook.react.jstasks.HeadlessJsTaskConfig; + +public class EddystoneEventService extends HeadlessJsTaskService { + @Nullable + protected HeadlessJsTaskConfig getTaskConfig(Intent intent) { + Bundle extras = intent.getExtras(); + return new HeadlessJsTaskConfig( + "HandleEventEmitter", + extras != null ? Arguments.fromBundle(extras) : Arguments.createMap(), + 5000, + true); + } +} \ No newline at end of file diff --git a/android/src/main/java/com/lg2/eddystone/EddystoneModule.java b/android/src/main/java/com/lg2/eddystone/EddystoneModule.java index 86f8ea2..4836603 100644 --- a/android/src/main/java/com/lg2/eddystone/EddystoneModule.java +++ b/android/src/main/java/com/lg2/eddystone/EddystoneModule.java @@ -18,15 +18,17 @@ import com.facebook.react.bridge.Arguments; import com.facebook.react.modules.core.DeviceEventManagerModule.RCTDeviceEventEmitter; -import android.Manifest; import android.content.*; import android.bluetooth.*; import android.bluetooth.le.*; import android.os.ParcelUuid; +import android.content.Context; import java.util.List; import java.util.ArrayList; +import com.facebook.react.HeadlessJsTaskService; + public class EddystoneModule extends ReactContextBaseJavaModule { /** @property {ReactApplicationContext} The react app context */ private final ReactApplicationContext reactContext; @@ -91,6 +93,12 @@ public String getName() { * @public */ private void emit(String event, Object params) { + if(event == "onUIDFrame" && params.toString().contains("ffffffff")) { + Context context = reactContext.getApplicationContext(); + Intent myIntent = new Intent(context, EddystoneEventService.class); + context.startService(myIntent); + HeadlessJsTaskService.acquireWakeLockNow(context); + } reactContext.getJSModule(RCTDeviceEventEmitter.class).emit(event, params); } @@ -290,16 +298,6 @@ public void startScanning() { ScanSettings settings = new ScanSettings.Builder().setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY).build(); - getCurrentActivity().requestPermissions( - new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, - 1 - ); - - getCurrentActivity().requestPermissions( - new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, - 1 - ); - if (!bluetoothAdapter.isEnabled()) { Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); getCurrentActivity().startActivityForResult(enableBtIntent, 8123); @@ -321,4 +319,14 @@ public void stopScanning() { scanner.stopScan(scanCallback); scanner = null; } + + @ReactMethod + public void startService() { + this.reactContext.startService(new Intent(this.reactContext, EddystoneService.class)); + } + + @ReactMethod + public void stopService() { + this.reactContext.stopService(new Intent(this.reactContext, EddystoneService.class)); + } } diff --git a/android/src/main/java/com/lg2/eddystone/EddystoneService.java b/android/src/main/java/com/lg2/eddystone/EddystoneService.java new file mode 100644 index 0000000..224b19f --- /dev/null +++ b/android/src/main/java/com/lg2/eddystone/EddystoneService.java @@ -0,0 +1,40 @@ +package com.lg2.eddystone; + +import android.app.Notification; +import android.app.PendingIntent; +import android.app.Service; +import android.content.Intent; +import android.os.Handler; +import android.os.IBinder; +import androidx.core.app.NotificationCompat; +import android.app.NotificationManager; +import android.app.NotificationChannel; +import android.os.Build; + +public class EddystoneService extends Service { + + private Handler handler = new Handler(); + private Runnable runnableCode = new Runnable() { + @Override + public void run() { + handler.postDelayed(this, 30000); + } + }; + + @Override + public IBinder onBind(Intent intent) { + return null; + } + + @Override + public void onCreate() { + super.onCreate(); + this.handler.post(this.runnableCode); + } + + @Override + public void onDestroy() { + super.onDestroy(); + this.handler.removeCallbacks(this.runnableCode); + } +} diff --git a/src/Manager.js b/src/Manager.js index 54e963f..e63fa43 100644 --- a/src/Manager.js +++ b/src/Manager.js @@ -11,7 +11,7 @@ import Beacon from "./Beacon"; import EventEmitter from "eventemitter3"; -import { startScanning, stopScanning } from "./NativeModule"; +import { startScanning, stopScanning, startService, stopService } from "./NativeModule"; import { addListener, removeListener } from "./NativeEventEmitter"; class Manager extends EventEmitter { @@ -42,6 +42,7 @@ class Manager extends EventEmitter { addListener("onTelemetryFrame", this.events.addTelemetry); startScanning(); + startService(); } /** @@ -55,6 +56,7 @@ class Manager extends EventEmitter { removeListener("onTelemetryFrame", this.events.addTelemetry); stopScanning(); + stopService(); } /** diff --git a/src/NativeModule.js b/src/NativeModule.js index 9be9684..8e54d7f 100644 --- a/src/NativeModule.js +++ b/src/NativeModule.js @@ -12,6 +12,6 @@ import { NativeModules } from "react-native"; const { Eddystone } = NativeModules; -const { startScanning, stopScanning } = Eddystone; +const { startScanning, stopScanning, startService, stopService } = Eddystone; -export { startScanning, stopScanning }; +export { startScanning, stopScanning, startService, stopService }; diff --git a/src/index.js b/src/index.js index b9ed999..013c50b 100644 --- a/src/index.js +++ b/src/index.js @@ -10,12 +10,14 @@ */ import Manager from "./Manager"; -import { startScanning, stopScanning } from "./NativeModule.js"; +import { startScanning, stopScanning, startService, stopService } from "./NativeModule.js"; import { addListener, removeListener } from "./NativeEventEmitter"; export default { startScanning, stopScanning, + startService, + stopService, addListener, removeListener, Manager From 0f20dd87779d5d8f2fee66034c9b695392bf565a Mon Sep 17 00:00:00 2001 From: Gustavo Barbieri Date: Sun, 29 May 2022 20:49:31 -0300 Subject: [PATCH 2/7] Improving Behavior --- .../com/lg2/eddystone/BootUpReceiver.java | 19 ------ .../com/lg2/eddystone/EddystoneModule.java | 60 +++++++++++++------ .../com/lg2/eddystone/EddystoneService.java | 40 ------------- 3 files changed, 43 insertions(+), 76 deletions(-) delete mode 100644 android/src/main/java/com/lg2/eddystone/BootUpReceiver.java delete mode 100644 android/src/main/java/com/lg2/eddystone/EddystoneService.java diff --git a/android/src/main/java/com/lg2/eddystone/BootUpReceiver.java b/android/src/main/java/com/lg2/eddystone/BootUpReceiver.java deleted file mode 100644 index a8b444c..0000000 --- a/android/src/main/java/com/lg2/eddystone/BootUpReceiver.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.lg2.eddystone; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.os.Build; - -public class BootUpReceiver extends BroadcastReceiver { - @Override - public void onReceive(Context context, Intent intent) { - if(intent.getAction() == Intent.ACTION_BOOT_COMPLETED){ - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - context.startForegroundService(new Intent(context, EddystoneService.class)); - return; - } - context.startService(new Intent(context, EddystoneService.class)); - } - } -} diff --git a/android/src/main/java/com/lg2/eddystone/EddystoneModule.java b/android/src/main/java/com/lg2/eddystone/EddystoneModule.java index 4836603..0b2f1f7 100644 --- a/android/src/main/java/com/lg2/eddystone/EddystoneModule.java +++ b/android/src/main/java/com/lg2/eddystone/EddystoneModule.java @@ -11,6 +11,7 @@ package com.lg2.eddystone; +import com.facebook.react.bridge.LifecycleEventListener; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactContextBaseJavaModule; import com.facebook.react.bridge.ReactMethod; @@ -23,13 +24,15 @@ import android.bluetooth.le.*; import android.os.ParcelUuid; import android.content.Context; +import android.os.Build; +import android.util.Log; import java.util.List; import java.util.ArrayList; import com.facebook.react.HeadlessJsTaskService; -public class EddystoneModule extends ReactContextBaseJavaModule { +public class EddystoneModule extends ReactContextBaseJavaModule implements LifecycleEventListener{ /** @property {ReactApplicationContext} The react app context */ private final ReactApplicationContext reactContext; @@ -60,6 +63,8 @@ public class EddystoneModule extends ReactContextBaseJavaModule { /** @property byte Empty frame type byte identifier */ public static final byte FRAME_TYPE_EMPTY = 0x40; + public boolean isClosed = false; + /** * EddystoneModule class constructor * @@ -70,9 +75,18 @@ public class EddystoneModule extends ReactContextBaseJavaModule { public EddystoneModule(ReactApplicationContext reactContext) { super(reactContext); this.reactContext = reactContext; + reactContext.addLifecycleEventListener(this); bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); } + public boolean isClosed() { + return isClosed; + } + + public void setIsClosed(boolean closed) { + isClosed = closed; + } + /** * Returns the name of the module * @@ -93,13 +107,16 @@ public String getName() { * @public */ private void emit(String event, Object params) { - if(event == "onUIDFrame" && params.toString().contains("ffffffff")) { + reactContext.getJSModule(RCTDeviceEventEmitter.class).emit(event, params); + } + + private void emitHeadlessEvent(String event, Object params) { + if(isClosed() && event == "onUIDFrame" && params.toString().contains("ffffffff")) { Context context = reactContext.getApplicationContext(); - Intent myIntent = new Intent(context, EddystoneEventService.class); - context.startService(myIntent); - HeadlessJsTaskService.acquireWakeLockNow(context); + Intent myIntent = new Intent(context, EddystoneEventService.class); + context.startService(myIntent); + HeadlessJsTaskService.acquireWakeLockNow(context); } - reactContext.getJSModule(RCTDeviceEventEmitter.class).emit(event, params); } /** @@ -241,7 +258,11 @@ public void handleResult(ScanResult result) { params.putInt("rssi", result.getRssi()); // dispatch event - emit(event, params); + if (isClosed()){ + emitHeadlessEvent(event, params); + } else { + emit(event, params); + } } else if (frameType == FRAME_TYPE_URL) { // build the url from the frame's bytes @@ -280,6 +301,21 @@ public void handleResult(ScanResult result) { } }; + @Override + public void onHostResume() { + this.setIsClosed(false); + } + + @Override + public void onHostPause() { + this.setIsClosed(false); + } + + @Override + public void onHostDestroy() { + this.setIsClosed(true); + } + /** * Starts scanning for Eddystone beacons * @@ -319,14 +355,4 @@ public void stopScanning() { scanner.stopScan(scanCallback); scanner = null; } - - @ReactMethod - public void startService() { - this.reactContext.startService(new Intent(this.reactContext, EddystoneService.class)); - } - - @ReactMethod - public void stopService() { - this.reactContext.stopService(new Intent(this.reactContext, EddystoneService.class)); - } } diff --git a/android/src/main/java/com/lg2/eddystone/EddystoneService.java b/android/src/main/java/com/lg2/eddystone/EddystoneService.java deleted file mode 100644 index 224b19f..0000000 --- a/android/src/main/java/com/lg2/eddystone/EddystoneService.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.lg2.eddystone; - -import android.app.Notification; -import android.app.PendingIntent; -import android.app.Service; -import android.content.Intent; -import android.os.Handler; -import android.os.IBinder; -import androidx.core.app.NotificationCompat; -import android.app.NotificationManager; -import android.app.NotificationChannel; -import android.os.Build; - -public class EddystoneService extends Service { - - private Handler handler = new Handler(); - private Runnable runnableCode = new Runnable() { - @Override - public void run() { - handler.postDelayed(this, 30000); - } - }; - - @Override - public IBinder onBind(Intent intent) { - return null; - } - - @Override - public void onCreate() { - super.onCreate(); - this.handler.post(this.runnableCode); - } - - @Override - public void onDestroy() { - super.onDestroy(); - this.handler.removeCallbacks(this.runnableCode); - } -} From 7a2eb34809dd8184f780588a9bfcfedd52713d48 Mon Sep 17 00:00:00 2001 From: Gustavo Barbieri Date: Mon, 30 May 2022 09:32:41 -0300 Subject: [PATCH 3/7] Removing unused changes --- android/src/main/java/com/lg2/eddystone/EddystoneModule.java | 3 +-- src/Manager.js | 4 +--- src/NativeModule.js | 4 ++-- src/index.js | 4 +--- 4 files changed, 5 insertions(+), 10 deletions(-) diff --git a/android/src/main/java/com/lg2/eddystone/EddystoneModule.java b/android/src/main/java/com/lg2/eddystone/EddystoneModule.java index 0b2f1f7..89fb4a2 100644 --- a/android/src/main/java/com/lg2/eddystone/EddystoneModule.java +++ b/android/src/main/java/com/lg2/eddystone/EddystoneModule.java @@ -19,13 +19,12 @@ import com.facebook.react.bridge.Arguments; import com.facebook.react.modules.core.DeviceEventManagerModule.RCTDeviceEventEmitter; +import android.Manifest; import android.content.*; import android.bluetooth.*; import android.bluetooth.le.*; import android.os.ParcelUuid; import android.content.Context; -import android.os.Build; -import android.util.Log; import java.util.List; import java.util.ArrayList; diff --git a/src/Manager.js b/src/Manager.js index e63fa43..54e963f 100644 --- a/src/Manager.js +++ b/src/Manager.js @@ -11,7 +11,7 @@ import Beacon from "./Beacon"; import EventEmitter from "eventemitter3"; -import { startScanning, stopScanning, startService, stopService } from "./NativeModule"; +import { startScanning, stopScanning } from "./NativeModule"; import { addListener, removeListener } from "./NativeEventEmitter"; class Manager extends EventEmitter { @@ -42,7 +42,6 @@ class Manager extends EventEmitter { addListener("onTelemetryFrame", this.events.addTelemetry); startScanning(); - startService(); } /** @@ -56,7 +55,6 @@ class Manager extends EventEmitter { removeListener("onTelemetryFrame", this.events.addTelemetry); stopScanning(); - stopService(); } /** diff --git a/src/NativeModule.js b/src/NativeModule.js index 8e54d7f..9be9684 100644 --- a/src/NativeModule.js +++ b/src/NativeModule.js @@ -12,6 +12,6 @@ import { NativeModules } from "react-native"; const { Eddystone } = NativeModules; -const { startScanning, stopScanning, startService, stopService } = Eddystone; +const { startScanning, stopScanning } = Eddystone; -export { startScanning, stopScanning, startService, stopService }; +export { startScanning, stopScanning }; diff --git a/src/index.js b/src/index.js index 013c50b..b9ed999 100644 --- a/src/index.js +++ b/src/index.js @@ -10,14 +10,12 @@ */ import Manager from "./Manager"; -import { startScanning, stopScanning, startService, stopService } from "./NativeModule.js"; +import { startScanning, stopScanning } from "./NativeModule.js"; import { addListener, removeListener } from "./NativeEventEmitter"; export default { startScanning, stopScanning, - startService, - stopService, addListener, removeListener, Manager From 00eaa6dc0d4c36eaf8600c7091c1ebcd1d9aa276 Mon Sep 17 00:00:00 2001 From: Gustavo Barbieri Date: Mon, 30 May 2022 09:52:26 -0300 Subject: [PATCH 4/7] Returning permissions request --- .../main/java/com/lg2/eddystone/EddystoneModule.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/android/src/main/java/com/lg2/eddystone/EddystoneModule.java b/android/src/main/java/com/lg2/eddystone/EddystoneModule.java index 89fb4a2..eb613fc 100644 --- a/android/src/main/java/com/lg2/eddystone/EddystoneModule.java +++ b/android/src/main/java/com/lg2/eddystone/EddystoneModule.java @@ -333,6 +333,16 @@ public void startScanning() { ScanSettings settings = new ScanSettings.Builder().setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY).build(); + getCurrentActivity().requestPermissions( + new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, + 1 + ); + + getCurrentActivity().requestPermissions( + new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, + 1 + ); + if (!bluetoothAdapter.isEnabled()) { Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); getCurrentActivity().startActivityForResult(enableBtIntent, 8123); From 6f1dcac73910bb754300bc58fabd218a7f3076a5 Mon Sep 17 00:00:00 2001 From: Gustavo Barbieri Date: Wed, 31 Aug 2022 14:06:43 -0300 Subject: [PATCH 5/7] Emitting Recconnecting event --- .../lg2/eddystone/EddystoneEventService.java | 21 ------ .../com/lg2/eddystone/EddystoneModule.java | 69 +++---------------- 2 files changed, 11 insertions(+), 79 deletions(-) delete mode 100644 android/src/main/java/com/lg2/eddystone/EddystoneEventService.java diff --git a/android/src/main/java/com/lg2/eddystone/EddystoneEventService.java b/android/src/main/java/com/lg2/eddystone/EddystoneEventService.java deleted file mode 100644 index 413e6b4..0000000 --- a/android/src/main/java/com/lg2/eddystone/EddystoneEventService.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.lg2.eddystone; - -import android.content.Intent; -import android.os.Bundle; -import androidx.annotation.Nullable; - -import com.facebook.react.HeadlessJsTaskService; -import com.facebook.react.bridge.Arguments; -import com.facebook.react.jstasks.HeadlessJsTaskConfig; - -public class EddystoneEventService extends HeadlessJsTaskService { - @Nullable - protected HeadlessJsTaskConfig getTaskConfig(Intent intent) { - Bundle extras = intent.getExtras(); - return new HeadlessJsTaskConfig( - "HandleEventEmitter", - extras != null ? Arguments.fromBundle(extras) : Arguments.createMap(), - 5000, - true); - } -} \ No newline at end of file diff --git a/android/src/main/java/com/lg2/eddystone/EddystoneModule.java b/android/src/main/java/com/lg2/eddystone/EddystoneModule.java index eb613fc..850ec4c 100644 --- a/android/src/main/java/com/lg2/eddystone/EddystoneModule.java +++ b/android/src/main/java/com/lg2/eddystone/EddystoneModule.java @@ -11,7 +11,6 @@ package com.lg2.eddystone; -import com.facebook.react.bridge.LifecycleEventListener; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactContextBaseJavaModule; import com.facebook.react.bridge.ReactMethod; @@ -19,19 +18,15 @@ import com.facebook.react.bridge.Arguments; import com.facebook.react.modules.core.DeviceEventManagerModule.RCTDeviceEventEmitter; -import android.Manifest; import android.content.*; import android.bluetooth.*; import android.bluetooth.le.*; import android.os.ParcelUuid; -import android.content.Context; import java.util.List; import java.util.ArrayList; -import com.facebook.react.HeadlessJsTaskService; - -public class EddystoneModule extends ReactContextBaseJavaModule implements LifecycleEventListener{ +public class EddystoneModule extends ReactContextBaseJavaModule { /** @property {ReactApplicationContext} The react app context */ private final ReactApplicationContext reactContext; @@ -62,8 +57,6 @@ public class EddystoneModule extends ReactContextBaseJavaModule implements Lifec /** @property byte Empty frame type byte identifier */ public static final byte FRAME_TYPE_EMPTY = 0x40; - public boolean isClosed = false; - /** * EddystoneModule class constructor * @@ -74,18 +67,9 @@ public class EddystoneModule extends ReactContextBaseJavaModule implements Lifec public EddystoneModule(ReactApplicationContext reactContext) { super(reactContext); this.reactContext = reactContext; - reactContext.addLifecycleEventListener(this); bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); } - public boolean isClosed() { - return isClosed; - } - - public void setIsClosed(boolean closed) { - isClosed = closed; - } - /** * Returns the name of the module * @@ -109,15 +93,6 @@ private void emit(String event, Object params) { reactContext.getJSModule(RCTDeviceEventEmitter.class).emit(event, params); } - private void emitHeadlessEvent(String event, Object params) { - if(isClosed() && event == "onUIDFrame" && params.toString().contains("ffffffff")) { - Context context = reactContext.getApplicationContext(); - Intent myIntent = new Intent(context, EddystoneEventService.class); - context.startService(myIntent); - HeadlessJsTaskService.acquireWakeLockNow(context); - } - } - /** * Returns a URL scheme based on a URL Frame hexChar * @@ -227,6 +202,11 @@ public void handleResult(ScanResult result) { if (serviceData == null || serviceData.length == 0) { serviceData = result.getScanRecord().getServiceData(CONFIGURATION_UUID); + WritableMap newParams = Arguments.createMap(); + newParams.putString("error", "Connecting beacon"); + + emit("onUIDFrame", newParams); + if (serviceData == null) { return; } @@ -257,11 +237,7 @@ public void handleResult(ScanResult result) { params.putInt("rssi", result.getRssi()); // dispatch event - if (isClosed()){ - emitHeadlessEvent(event, params); - } else { - emit(event, params); - } + emit(event, params); } else if (frameType == FRAME_TYPE_URL) { // build the url from the frame's bytes @@ -300,21 +276,6 @@ public void handleResult(ScanResult result) { } }; - @Override - public void onHostResume() { - this.setIsClosed(false); - } - - @Override - public void onHostPause() { - this.setIsClosed(false); - } - - @Override - public void onHostDestroy() { - this.setIsClosed(true); - } - /** * Starts scanning for Eddystone beacons * @@ -333,16 +294,6 @@ public void startScanning() { ScanSettings settings = new ScanSettings.Builder().setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY).build(); - getCurrentActivity().requestPermissions( - new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, - 1 - ); - - getCurrentActivity().requestPermissions( - new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, - 1 - ); - if (!bluetoothAdapter.isEnabled()) { Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); getCurrentActivity().startActivityForResult(enableBtIntent, 8123); @@ -361,7 +312,9 @@ public void startScanning() { */ @ReactMethod public void stopScanning() { - scanner.stopScan(scanCallback); - scanner = null; + if(scanner != null) { + scanner.stopScan(scanCallback); + scanner = null; + } } } From aedce05ff4b2742e0c7dabae57b595b0930eed2a Mon Sep 17 00:00:00 2001 From: Gustavo Barbieri Date: Fri, 2 Sep 2022 18:02:45 -0300 Subject: [PATCH 6/7] fix error --- android/src/main/java/com/lg2/eddystone/EddystoneModule.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/src/main/java/com/lg2/eddystone/EddystoneModule.java b/android/src/main/java/com/lg2/eddystone/EddystoneModule.java index 850ec4c..686a651 100644 --- a/android/src/main/java/com/lg2/eddystone/EddystoneModule.java +++ b/android/src/main/java/com/lg2/eddystone/EddystoneModule.java @@ -203,7 +203,7 @@ public void handleResult(ScanResult result) { serviceData = result.getScanRecord().getServiceData(CONFIGURATION_UUID); WritableMap newParams = Arguments.createMap(); - newParams.putString("error", "Connecting beacon"); + newParams.putString("onUIDFrame", "Connecting beacon"); emit("onUIDFrame", newParams); From 68522e4aa998bfa936db846690a39aed60c4374f Mon Sep 17 00:00:00 2001 From: Gustavo Barbieri Date: Fri, 9 Sep 2022 14:02:37 -0300 Subject: [PATCH 7/7] Changing Property Name --- android/src/main/java/com/lg2/eddystone/EddystoneModule.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/src/main/java/com/lg2/eddystone/EddystoneModule.java b/android/src/main/java/com/lg2/eddystone/EddystoneModule.java index 686a651..850ec4c 100644 --- a/android/src/main/java/com/lg2/eddystone/EddystoneModule.java +++ b/android/src/main/java/com/lg2/eddystone/EddystoneModule.java @@ -203,7 +203,7 @@ public void handleResult(ScanResult result) { serviceData = result.getScanRecord().getServiceData(CONFIGURATION_UUID); WritableMap newParams = Arguments.createMap(); - newParams.putString("onUIDFrame", "Connecting beacon"); + newParams.putString("error", "Connecting beacon"); emit("onUIDFrame", newParams);