From 9b8ec1588f827b44ed97ade3e854c02cd409a4d5 Mon Sep 17 00:00:00 2001 From: Nazarii Fenii Date: Mon, 17 Jul 2023 16:33:18 +0300 Subject: [PATCH] Run LocationRequest API in main thread --- .../RNAndroidLocationEnablerModule.java | 28 ++++++++++++------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/android/src/main/java/com/heanoria/library/reactnative/locationenabler/RNAndroidLocationEnablerModule.java b/android/src/main/java/com/heanoria/library/reactnative/locationenabler/RNAndroidLocationEnablerModule.java index a24737e..07033f7 100644 --- a/android/src/main/java/com/heanoria/library/reactnative/locationenabler/RNAndroidLocationEnablerModule.java +++ b/android/src/main/java/com/heanoria/library/reactnative/locationenabler/RNAndroidLocationEnablerModule.java @@ -6,6 +6,8 @@ import android.content.IntentSender; import android.location.LocationManager; import android.util.Log; +import android.os.Handler; +import android.os.Looper; import androidx.annotation.NonNull; @@ -58,22 +60,28 @@ public RNAndroidLocationEnablerModule(ReactApplicationContext reactContext) { } @ReactMethod - public void promptForEnableLocationIfNeeded(ReadableMap params, Promise promise) { + public void promptForEnableLocationIfNeeded(final ReadableMap params, Promise promise) { if (getCurrentActivity() == null || params == null || promise == null) return; this.promise = promise; - LocationRequest locationRequest = LocationRequest.create(); - locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); - locationRequest.setInterval(params.hasKey(LOCATION_INTERVAL_DURATION_PARAMS_KEY) ? params.getInt(LOCATION_INTERVAL_DURATION_PARAMS_KEY) : DEFAULT_INTERVAL_DURATION); - locationRequest.setFastestInterval(params.hasKey(LOCATION_FAST_INTERVAL_DURATION_PARAMS_KEY) ? params.getInt(LOCATION_FAST_INTERVAL_DURATION_PARAMS_KEY) : DEFAULT_FAST_INTERVAL_DURATION); - LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder() - .addLocationRequest(locationRequest); - builder.setAlwaysShow(true); - Task task = LocationServices.getSettingsClient(getCurrentActivity()).checkLocationSettings(builder.build()); - task.addOnCompleteListener(this); + new Handler(Looper.getMainLooper()).post(new Runnable() { + @Override + public void run() { + LocationRequest locationRequest = LocationRequest.create(); + locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); + locationRequest.setInterval(params.hasKey(LOCATION_INTERVAL_DURATION_PARAMS_KEY) ? params.getInt(LOCATION_INTERVAL_DURATION_PARAMS_KEY) : DEFAULT_INTERVAL_DURATION); + locationRequest.setFastestInterval(params.hasKey(LOCATION_FAST_INTERVAL_DURATION_PARAMS_KEY) ? params.getInt(LOCATION_FAST_INTERVAL_DURATION_PARAMS_KEY) : DEFAULT_FAST_INTERVAL_DURATION); + LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder() + .addLocationRequest(locationRequest); + builder.setAlwaysShow(true); + Task task = LocationServices.getSettingsClient(getCurrentActivity()).checkLocationSettings(builder.build()); + task.addOnCompleteListener(RNAndroidLocationEnablerModule.this); + } + }); } + @Override public String getName() { return SELF_MODULE_NAME;