react-native-nitro-geolocation 1.2.6 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +52 -295
- package/android/build.gradle +1 -0
- package/android/src/main/AndroidManifest.xml +39 -0
- package/android/src/main/java/com/margelo/nitro/nitrogeolocation/AndroidFusedLocationProvider.kt +310 -0
- package/android/src/main/java/com/margelo/nitro/nitrogeolocation/AndroidFusedRequestFactory.kt +31 -0
- package/android/src/main/java/com/margelo/nitro/nitrogeolocation/AndroidGeolocationConversions.kt +71 -0
- package/android/src/main/java/com/margelo/nitro/nitrogeolocation/AndroidGeolocationErrors.kt +85 -0
- package/android/src/main/java/com/margelo/nitro/nitrogeolocation/AndroidGeolocationOptions.kt +92 -0
- package/android/src/main/java/com/margelo/nitro/nitrogeolocation/AndroidLocationSettings.kt +3 -0
- package/android/src/main/java/com/margelo/nitro/nitrogeolocation/AndroidProviderRoute.kt +74 -0
- package/android/src/main/java/com/margelo/nitro/nitrogeolocation/NitroBackgroundLocation.kt +132 -0
- package/android/src/main/java/com/margelo/nitro/nitrogeolocation/NitroGeolocation.kt +219 -476
- package/android/src/main/java/com/margelo/nitro/nitrogeolocation/background/AndroidBackgroundHttpSync.kt +134 -0
- package/android/src/main/java/com/margelo/nitro/nitrogeolocation/background/AndroidBackgroundPermissions.kt +196 -0
- package/android/src/main/java/com/margelo/nitro/nitrogeolocation/background/AndroidBackgroundSerialization.kt +266 -0
- package/android/src/main/java/com/margelo/nitro/nitrogeolocation/background/NitroActivityRecognitionReceiver.kt +13 -0
- package/android/src/main/java/com/margelo/nitro/nitrogeolocation/background/NitroBackgroundEventHub.kt +65 -0
- package/android/src/main/java/com/margelo/nitro/nitrogeolocation/background/NitroBackgroundHeadlessTaskService.kt +58 -0
- package/android/src/main/java/com/margelo/nitro/nitrogeolocation/background/NitroBackgroundLocationController.kt +710 -0
- package/android/src/main/java/com/margelo/nitro/nitrogeolocation/background/NitroBackgroundLocationService.kt +48 -0
- package/android/src/main/java/com/margelo/nitro/nitrogeolocation/background/NitroBackgroundNotificationFactory.kt +37 -0
- package/android/src/main/java/com/margelo/nitro/nitrogeolocation/background/NitroBackgroundStore.kt +655 -0
- package/android/src/main/java/com/margelo/nitro/nitrogeolocation/background/NitroBootReceiver.kt +26 -0
- package/android/src/main/java/com/margelo/nitro/nitrogeolocation/background/NitroGeofenceReceiver.kt +14 -0
- package/android/src/main/java/com/margelo/nitro/nitrogeolocation/background/NitroLocationUpdateReceiver.kt +37 -0
- package/android/src/test/java/com/margelo/nitro/nitrogeolocation/AndroidFusedLocationProviderTest.kt +64 -0
- package/android/src/test/java/com/margelo/nitro/nitrogeolocation/AndroidProviderRouteTest.kt +116 -0
- package/ios/IOSBackgroundHttpSync.swift +126 -0
- package/ios/IOSBackgroundLocationDelegate.swift +36 -0
- package/ios/IOSBackgroundMotion.swift +55 -0
- package/ios/IOSBackgroundSerialization.swift +539 -0
- package/ios/IOSGeolocationConversions.swift +131 -0
- package/ios/IOSGeolocationDelegate.swift +31 -0
- package/ios/IOSGeolocationErrors.swift +39 -0
- package/ios/IOSGeolocationOptions.swift +135 -0
- package/ios/NitroBackgroundLocation.swift +849 -0
- package/ios/NitroGeolocation.swift +14 -347
- package/nitrogen/generated/android/c++/JActivityRecognitionOptions.hpp +69 -0
- package/nitrogen/generated/android/c++/JAndroidBackgroundLocationOptions.hpp +74 -0
- package/nitrogen/generated/android/c++/JAndroidBackgroundLocationStatus.hpp +67 -0
- package/nitrogen/generated/android/c++/JAndroidBackgroundProvider.hpp +61 -0
- package/nitrogen/generated/android/c++/JAndroidForegroundServiceOptions.hpp +90 -0
- package/nitrogen/generated/android/c++/JBackgroundEventEnvelope.hpp +129 -0
- package/nitrogen/generated/android/c++/JBackgroundEventType.hpp +70 -0
- package/nitrogen/generated/android/c++/JBackgroundHttpMethod.hpp +61 -0
- package/nitrogen/generated/android/c++/JBackgroundHttpSyncOptions.hpp +131 -0
- package/nitrogen/generated/android/c++/JBackgroundHttpSyncResult.hpp +111 -0
- package/nitrogen/generated/android/c++/JBackgroundLocation.hpp +110 -0
- package/nitrogen/generated/android/c++/JBackgroundLocationOptions.hpp +162 -0
- package/nitrogen/generated/android/c++/JBackgroundLocationSource.hpp +73 -0
- package/nitrogen/generated/android/c++/JBackgroundLocationState.hpp +70 -0
- package/nitrogen/generated/android/c++/JBackgroundLocationStatus.hpp +126 -0
- package/nitrogen/generated/android/c++/JBackgroundPermissionResult.hpp +79 -0
- package/nitrogen/generated/android/c++/JBackgroundPermissionStatus.hpp +64 -0
- package/nitrogen/generated/android/c++/JBackgroundTrackingMode.hpp +61 -0
- package/nitrogen/generated/android/c++/JBatterySnapshot.hpp +61 -0
- package/nitrogen/generated/android/c++/JDetectedActivity.hpp +66 -0
- package/nitrogen/generated/android/c++/JDetectedActivityType.hpp +76 -0
- package/nitrogen/generated/android/c++/JFunc_void_BackgroundEventEnvelope.hpp +114 -0
- package/nitrogen/generated/android/c++/JFunc_void_BackgroundLocation.hpp +95 -0
- package/nitrogen/generated/android/c++/JGeofenceEvent.hpp +94 -0
- package/nitrogen/generated/android/c++/JGeofenceRegion.hpp +112 -0
- package/nitrogen/generated/android/c++/JGeofenceTransition.hpp +61 -0
- package/nitrogen/generated/android/c++/JGeofencingOptions.hpp +82 -0
- package/nitrogen/generated/android/c++/JGetStoredBackgroundEventsOptions.hpp +90 -0
- package/nitrogen/generated/android/c++/JGetStoredBackgroundLocationsOptions.hpp +69 -0
- package/nitrogen/generated/android/c++/JHybridNitroBackgroundLocationSpec.cpp +662 -0
- package/nitrogen/generated/android/c++/JHybridNitroBackgroundLocationSpec.hpp +89 -0
- package/nitrogen/generated/android/c++/JIOSBackgroundActivityType.hpp +67 -0
- package/nitrogen/generated/android/c++/JIOSBackgroundLocationOptions.hpp +79 -0
- package/nitrogen/generated/android/c++/JIOSBackgroundLocationStatus.hpp +61 -0
- package/nitrogen/generated/android/c++/JLocationProviderStatus.hpp +5 -1
- package/nitrogen/generated/android/c++/JStoredBackgroundEventEnvelope.hpp +115 -0
- package/nitrogen/generated/android/c++/JStoredBackgroundLocation.hpp +122 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_Boolean_String_Double.cpp +34 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_Boolean_String_Double.hpp +100 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/ActivityRecognitionOptions.kt +66 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/AndroidBackgroundLocationOptions.kt +66 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/AndroidBackgroundLocationStatus.kt +61 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/AndroidBackgroundProvider.kt +24 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/AndroidForegroundServiceOptions.kt +91 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/BackgroundEventEnvelope.kt +96 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/BackgroundEventType.kt +27 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/BackgroundHttpMethod.kt +24 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/BackgroundHttpSyncOptions.kt +101 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/BackgroundHttpSyncResult.kt +71 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/BackgroundLocation.kt +96 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/BackgroundLocationOptions.kt +136 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/BackgroundLocationSource.kt +28 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/BackgroundLocationState.kt +27 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/BackgroundLocationStatus.kt +116 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/BackgroundPermissionResult.kt +71 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/BackgroundPermissionStatus.kt +25 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/BackgroundTrackingMode.kt +24 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/BatterySnapshot.kt +56 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/DetectedActivity.kt +61 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/DetectedActivityType.kt +29 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/Func_void_BackgroundEventEnvelope.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/Func_void_BackgroundLocation.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/GeofenceEvent.kt +66 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/GeofenceRegion.kt +96 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/GeofenceTransition.kt +24 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/GeofencingOptions.kt +56 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/GetStoredBackgroundEventsOptions.kt +66 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/GetStoredBackgroundLocationsOptions.kt +66 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/HybridNitroBackgroundLocationSpec.kt +174 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/IOSBackgroundActivityType.kt +26 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/IOSBackgroundLocationOptions.kt +76 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/IOSBackgroundLocationStatus.kt +56 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/LocationProviderStatus.kt +7 -2
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/StoredBackgroundEventEnvelope.kt +76 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/StoredBackgroundLocation.kt +111 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/Variant_NullType_Boolean_String_Double.kt +88 -0
- package/nitrogen/generated/android/nitrogeolocation+autolinking.cmake +3 -0
- package/nitrogen/generated/android/nitrogeolocationOnLoad.cpp +20 -0
- package/nitrogen/generated/ios/NitroGeolocation-Swift-Cxx-Bridge.cpp +104 -15
- package/nitrogen/generated/ios/NitroGeolocation-Swift-Cxx-Bridge.hpp +1107 -50
- package/nitrogen/generated/ios/NitroGeolocation-Swift-Cxx-Umbrella.hpp +102 -0
- package/nitrogen/generated/ios/NitroGeolocationAutolinking.mm +8 -0
- package/nitrogen/generated/ios/NitroGeolocationAutolinking.swift +15 -3
- package/nitrogen/generated/ios/c++/HybridNitroBackgroundLocationSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridNitroBackgroundLocationSpecSwift.hpp +416 -0
- package/nitrogen/generated/ios/swift/ActivityRecognitionOptions.swift +96 -0
- package/nitrogen/generated/ios/swift/AndroidBackgroundLocationOptions.swift +76 -0
- package/nitrogen/generated/ios/swift/AndroidBackgroundLocationStatus.swift +58 -0
- package/nitrogen/generated/ios/swift/AndroidBackgroundProvider.swift +44 -0
- package/nitrogen/generated/ios/swift/AndroidForegroundServiceOptions.swift +160 -0
- package/nitrogen/generated/ios/swift/BackgroundEventEnvelope.swift +110 -0
- package/nitrogen/generated/ios/swift/BackgroundEventType.swift +56 -0
- package/nitrogen/generated/ios/swift/BackgroundHttpMethod.swift +44 -0
- package/nitrogen/generated/ios/swift/BackgroundHttpSyncOptions.swift +259 -0
- package/nitrogen/generated/ios/swift/BackgroundHttpSyncResult.swift +87 -0
- package/nitrogen/generated/ios/swift/BackgroundLocation.swift +118 -0
- package/nitrogen/generated/ios/swift/BackgroundLocationOptions.swift +292 -0
- package/nitrogen/generated/ios/swift/BackgroundLocationSource.swift +60 -0
- package/nitrogen/generated/ios/swift/BackgroundLocationState.swift +56 -0
- package/nitrogen/generated/ios/swift/BackgroundLocationStatus.swift +124 -0
- package/nitrogen/generated/ios/swift/BackgroundPermissionResult.swift +81 -0
- package/nitrogen/generated/ios/swift/BackgroundPermissionStatus.swift +48 -0
- package/nitrogen/generated/ios/swift/BackgroundTrackingMode.swift +44 -0
- package/nitrogen/generated/ios/swift/BatterySnapshot.swift +60 -0
- package/nitrogen/generated/ios/swift/DetectedActivity.swift +39 -0
- package/nitrogen/generated/ios/swift/DetectedActivityType.swift +64 -0
- package/nitrogen/generated/ios/swift/Func_void_BackgroundEventEnvelope.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_BackgroundHttpSyncResult.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_BackgroundLocation.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_BackgroundLocationStatus.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_BackgroundPermissionResult.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_std__optional_BackgroundLocationOptions_.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_std__vector_GeofenceRegion_.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_std__vector_StoredBackgroundEventEnvelope_.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_std__vector_StoredBackgroundLocation_.swift +46 -0
- package/nitrogen/generated/ios/swift/GeofenceEvent.swift +50 -0
- package/nitrogen/generated/ios/swift/GeofenceRegion.swift +195 -0
- package/nitrogen/generated/ios/swift/GeofenceTransition.swift +44 -0
- package/nitrogen/generated/ios/swift/GeofencingOptions.swift +66 -0
- package/nitrogen/generated/ios/swift/GetStoredBackgroundEventsOptions.swift +102 -0
- package/nitrogen/generated/ios/swift/GetStoredBackgroundLocationsOptions.swift +96 -0
- package/nitrogen/generated/ios/swift/HybridNitroBackgroundLocationSpec.swift +81 -0
- package/nitrogen/generated/ios/swift/HybridNitroBackgroundLocationSpec_cxx.swift +654 -0
- package/nitrogen/generated/ios/swift/IOSBackgroundActivityType.swift +52 -0
- package/nitrogen/generated/ios/swift/IOSBackgroundLocationOptions.swift +125 -0
- package/nitrogen/generated/ios/swift/IOSBackgroundLocationStatus.swift +34 -0
- package/nitrogen/generated/ios/swift/LocationProviderStatus.swift +19 -1
- package/nitrogen/generated/ios/swift/StoredBackgroundEventEnvelope.swift +54 -0
- package/nitrogen/generated/ios/swift/StoredBackgroundLocation.swift +120 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_Bool_String_Double.swift +34 -0
- package/nitrogen/generated/shared/c++/ActivityRecognitionOptions.hpp +95 -0
- package/nitrogen/generated/shared/c++/AndroidBackgroundLocationOptions.hpp +100 -0
- package/nitrogen/generated/shared/c++/AndroidBackgroundLocationStatus.hpp +93 -0
- package/nitrogen/generated/shared/c++/AndroidBackgroundProvider.hpp +80 -0
- package/nitrogen/generated/shared/c++/AndroidForegroundServiceOptions.hpp +116 -0
- package/nitrogen/generated/shared/c++/BackgroundEventEnvelope.hpp +140 -0
- package/nitrogen/generated/shared/c++/BackgroundEventType.hpp +92 -0
- package/nitrogen/generated/shared/c++/BackgroundHttpMethod.hpp +80 -0
- package/nitrogen/generated/shared/c++/BackgroundHttpSyncOptions.hpp +129 -0
- package/nitrogen/generated/shared/c++/BackgroundHttpSyncResult.hpp +101 -0
- package/nitrogen/generated/shared/c++/BackgroundLocation.hpp +134 -0
- package/nitrogen/generated/shared/c++/BackgroundLocationOptions.hpp +174 -0
- package/nitrogen/generated/shared/c++/BackgroundLocationSource.hpp +96 -0
- package/nitrogen/generated/shared/c++/BackgroundLocationState.hpp +92 -0
- package/nitrogen/generated/shared/c++/BackgroundLocationStatus.hpp +158 -0
- package/nitrogen/generated/shared/c++/BackgroundPermissionResult.hpp +107 -0
- package/nitrogen/generated/shared/c++/BackgroundPermissionStatus.hpp +84 -0
- package/nitrogen/generated/shared/c++/BackgroundTrackingMode.hpp +80 -0
- package/nitrogen/generated/shared/c++/BatterySnapshot.hpp +87 -0
- package/nitrogen/generated/shared/c++/DetectedActivity.hpp +92 -0
- package/nitrogen/generated/shared/c++/DetectedActivityType.hpp +100 -0
- package/nitrogen/generated/shared/c++/GeofenceEvent.hpp +103 -0
- package/nitrogen/generated/shared/c++/GeofenceRegion.hpp +123 -0
- package/nitrogen/generated/shared/c++/GeofenceTransition.hpp +80 -0
- package/nitrogen/generated/shared/c++/GeofencingOptions.hpp +90 -0
- package/nitrogen/generated/shared/c++/GetStoredBackgroundEventsOptions.hpp +98 -0
- package/nitrogen/generated/shared/c++/GetStoredBackgroundLocationsOptions.hpp +95 -0
- package/nitrogen/generated/shared/c++/HybridNitroBackgroundLocationSpec.cpp +47 -0
- package/nitrogen/generated/shared/c++/HybridNitroBackgroundLocationSpec.hpp +133 -0
- package/nitrogen/generated/shared/c++/IOSBackgroundActivityType.hpp +88 -0
- package/nitrogen/generated/shared/c++/IOSBackgroundLocationOptions.hpp +105 -0
- package/nitrogen/generated/shared/c++/IOSBackgroundLocationStatus.hpp +87 -0
- package/nitrogen/generated/shared/c++/LocationProviderStatus.hpp +5 -1
- package/nitrogen/generated/shared/c++/StoredBackgroundEventEnvelope.hpp +108 -0
- package/nitrogen/generated/shared/c++/StoredBackgroundLocation.hpp +146 -0
- package/package.json +17 -6
- package/src/NitroGeolocation.nitro.ts +4 -4
- package/src/api/getCurrentPosition.ts +1 -1
- package/src/api/requestLocationSettings.ts +3 -2
- package/src/background/NitroBackgroundLocation.nitro.ts +83 -0
- package/src/background/index.ts +200 -0
- package/src/background/index.web.ts +120 -0
- package/src/background/task.ts +13 -0
- package/src/background/types.ts +328 -0
- package/src/compat/index.web.ts +141 -0
- package/src/index.tsx +3 -0
- package/src/index.web.tsx +41 -0
- package/src/publicTypes.ts +6 -5
- package/src/types.ts +3 -0
- package/src/web/browser.ts +171 -0
- package/src/web/index.ts +167 -0
- package/src/web/useWatchPosition.ts +76 -0
- package/src/web/watch.ts +81 -0
- package/src/devtools/index.test.ts +0 -54
- package/src/utils/errors.test.ts +0 -65
- package/src/utils/provider.test.ts +0 -303
package/README.md
CHANGED
|
@@ -4,10 +4,13 @@
|
|
|
4
4
|
|
|
5
5
|
**Nitro-powered geolocation for modern React Native apps**
|
|
6
6
|
|
|
7
|
-
A native iOS/Android geolocation module for React Native 0.75+
|
|
8
|
-
Architecture
|
|
7
|
+
A native iOS/Android geolocation module for React Native 0.75+ apps using the
|
|
8
|
+
New Architecture and Nitro Modules. Start by replacing
|
|
9
9
|
[`@react-native-community/geolocation`](https://github.com/michalchudziak/react-native-geolocation)
|
|
10
10
|
with `/compat`, then move to a typed Modern API when you are ready.
|
|
11
|
+
The current release line adds web support for Modern and `/compat` foreground
|
|
12
|
+
geolocation plus a native Background Location API for tracking, geofencing,
|
|
13
|
+
storage recovery, Headless JS, and HTTP sync.
|
|
11
14
|
|
|
12
15
|
- 🎯 **Simple functional API** — Direct function calls, no complex abstractions
|
|
13
16
|
- ⚡ **JSI-powered performance** — Direct native calls without Bridge overhead
|
|
@@ -31,23 +34,25 @@ Full documentation available at:
|
|
|
31
34
|
|
|
32
35
|
| Use case | Recommendation |
|
|
33
36
|
|---|---|
|
|
34
|
-
| Bare React Native 0.75+ app | Use Nitro Geolocation |
|
|
37
|
+
| Bare React Native 0.75+ app with New Architecture/Nitro enabled | Use Nitro Geolocation |
|
|
35
38
|
| Migrating from `@react-native-community/geolocation` | Start with `/compat` |
|
|
36
39
|
| New Architecture / Nitro-based app | Recommended |
|
|
37
40
|
| Expo development build or custom native build | Supported with native setup |
|
|
38
41
|
| Expo managed app without native rebuild | Use `expo-location` |
|
|
39
|
-
| Web support required | Use
|
|
40
|
-
| Full background tracking / geofencing | Use
|
|
42
|
+
| Web support required | Use the Modern API root import or `/compat` callback API |
|
|
43
|
+
| Full background tracking / geofencing | Use `react-native-nitro-geolocation/background` |
|
|
41
44
|
|
|
42
|
-
Web is
|
|
43
|
-
|
|
44
|
-
|
|
45
|
+
Web support is available for the Modern API root import and the `/compat`
|
|
46
|
+
subpath. Browser builds resolve both entries to implementations backed by
|
|
47
|
+
`navigator.geolocation` and do not load Nitro native bindings. Background
|
|
48
|
+
location remains native-only.
|
|
45
49
|
|
|
46
50
|
---
|
|
47
51
|
|
|
48
52
|
## 🧭 Introduction
|
|
49
53
|
|
|
50
|
-
React Native Nitro Geolocation provides **
|
|
54
|
+
React Native Nitro Geolocation provides **three public API surfaces** to fit
|
|
55
|
+
your needs:
|
|
51
56
|
|
|
52
57
|
### 1. Modern API (Recommended)
|
|
53
58
|
|
|
@@ -57,88 +62,27 @@ React Native Nitro Geolocation provides **two APIs** to fit your needs:
|
|
|
57
62
|
import {
|
|
58
63
|
setConfiguration,
|
|
59
64
|
requestPermission,
|
|
60
|
-
requestLocationSettings,
|
|
61
|
-
getLocationAvailability,
|
|
62
65
|
getCurrentPosition,
|
|
63
|
-
getLastKnownPosition,
|
|
64
|
-
geocode,
|
|
65
|
-
reverseGeocode,
|
|
66
|
-
getHeading,
|
|
67
|
-
watchHeading,
|
|
68
|
-
unwatch,
|
|
69
|
-
getAccuracyAuthorization,
|
|
70
|
-
requestTemporaryFullAccuracy,
|
|
71
|
-
useWatchPosition,
|
|
72
66
|
} from "react-native-nitro-geolocation";
|
|
73
67
|
|
|
74
|
-
// Configure once at app startup
|
|
75
68
|
setConfiguration({
|
|
76
69
|
authorizationLevel: "whenInUse",
|
|
77
70
|
locationProvider: "auto",
|
|
78
71
|
});
|
|
79
72
|
|
|
80
|
-
// Request permission
|
|
81
73
|
const status = await requestPermission();
|
|
82
74
|
|
|
83
|
-
|
|
84
|
-
await
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
const availability = await getLocationAvailability();
|
|
88
|
-
|
|
89
|
-
// Get current location
|
|
90
|
-
const position = await getCurrentPosition({
|
|
91
|
-
accuracy: { android: "high", ios: "best" },
|
|
92
|
-
granularity: "permission",
|
|
93
|
-
waitForAccurateLocation: true,
|
|
94
|
-
});
|
|
95
|
-
|
|
96
|
-
// v1.2+: read cached location explicitly without starting a fresh request
|
|
97
|
-
const cached = await getLastKnownPosition({
|
|
98
|
-
maximumAge: 60_000,
|
|
99
|
-
accuracy: { android: "balanced", ios: "hundredMeters" },
|
|
100
|
-
});
|
|
101
|
-
|
|
102
|
-
// v1.2+: convert between addresses and coordinates with native geocoders
|
|
103
|
-
const locations = await geocode("City Hall, Seoul, South Korea");
|
|
104
|
-
const addresses = await reverseGeocode({
|
|
105
|
-
latitude: 37.5665,
|
|
106
|
-
longitude: 126.978,
|
|
107
|
-
});
|
|
108
|
-
|
|
109
|
-
// v1.2+: inspect precise/reduced accuracy authorization
|
|
110
|
-
const accuracyAuthorization = await getAccuracyAuthorization();
|
|
111
|
-
if (accuracyAuthorization === "reduced") {
|
|
112
|
-
await requestTemporaryFullAccuracy("TurnByTurnNavigation");
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
// v1.2+: read and watch compass heading
|
|
116
|
-
const heading = await getHeading();
|
|
117
|
-
const headingToken = watchHeading((nextHeading) => {
|
|
118
|
-
console.log(nextHeading.magneticHeading);
|
|
119
|
-
});
|
|
120
|
-
unwatch(headingToken);
|
|
121
|
-
|
|
122
|
-
// Continuous tracking with hook
|
|
123
|
-
function LocationTracker() {
|
|
124
|
-
const { position, error, isWatching } = useWatchPosition({
|
|
125
|
-
enabled: true,
|
|
126
|
-
accuracy: { android: "high", ios: "bestForNavigation" },
|
|
127
|
-
distanceFilter: 10,
|
|
75
|
+
if (status === "granted") {
|
|
76
|
+
const position = await getCurrentPosition({
|
|
77
|
+
accuracy: { android: "high", ios: "best" },
|
|
78
|
+
timeout: 15_000,
|
|
128
79
|
});
|
|
129
|
-
|
|
130
|
-
if (error) return <Text>Error: {error.message}</Text>;
|
|
131
|
-
if (!position) return <Text>Waiting...</Text>;
|
|
132
|
-
|
|
133
|
-
return (
|
|
134
|
-
<Text>
|
|
135
|
-
{position.coords.latitude}, {position.coords.longitude}
|
|
136
|
-
</Text>
|
|
137
|
-
);
|
|
138
80
|
}
|
|
139
81
|
```
|
|
140
82
|
|
|
141
|
-
|
|
83
|
+
See the [Modern API guide](https://react-native-nitro-geolocation.pages.dev/guide/modern-api)
|
|
84
|
+
for watches, geocoding, heading, cached reads, Android settings, and iOS
|
|
85
|
+
accuracy authorization.
|
|
142
86
|
|
|
143
87
|
### 2. Compat API (Compatibility)
|
|
144
88
|
|
|
@@ -158,18 +102,22 @@ const watchId = Geolocation.watchPosition((position) => console.log(position));
|
|
|
158
102
|
Geolocation.clearWatch(watchId);
|
|
159
103
|
```
|
|
160
104
|
|
|
161
|
-
|
|
105
|
+
The `/compat` subpath covers the core native community API, including
|
|
106
|
+
`setRNConfiguration`, `requestAuthorization`, `getCurrentPosition`,
|
|
107
|
+
`watchPosition`, `clearWatch`, and `stopObserving`. It also has a browser entry
|
|
108
|
+
for callback-style foreground geolocation. See the
|
|
109
|
+
[Compat API guide](https://react-native-nitro-geolocation.pages.dev/guide/compat-api)
|
|
110
|
+
for the full compatibility matrix and option notes.
|
|
111
|
+
|
|
112
|
+
### 3. Background API
|
|
113
|
+
|
|
114
|
+
Native background tracking, geofencing, activity events, Android Headless JS,
|
|
115
|
+
HTTP sync, and stored event recovery should use the explicit background subpath.
|
|
162
116
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
| `getCurrentPosition` | Supported | Keeps the legacy callback and error shape. |
|
|
168
|
-
| `watchPosition` | Supported | Returns a numeric watch id. |
|
|
169
|
-
| `clearWatch` | Supported | Clears a watch id from `watchPosition`. |
|
|
170
|
-
| `stopObserving` | Supported | Preserved for legacy cleanup compatibility. |
|
|
171
|
-
| `navigator.geolocation` polyfill | Not supported in `v1.2.x` | Planned for `v1.3`. |
|
|
172
|
-
| Web | Not supported in `v1.2.x` | Planned as a `/compat` browser fallback in `v1.3`. |
|
|
117
|
+
Background location is native-only. Browser builds expose unsupported stubs so
|
|
118
|
+
web bundles can still import shared code safely. Start with the
|
|
119
|
+
[Background Location guide](https://react-native-nitro-geolocation.pages.dev/background/overview)
|
|
120
|
+
for permissions, start/stop, geofencing, storage recovery, and native sync.
|
|
173
121
|
|
|
174
122
|
---
|
|
175
123
|
|
|
@@ -204,6 +152,9 @@ Add permissions to your **Info.plist**:
|
|
|
204
152
|
<string>This app requires access to your location at all times.</string>
|
|
205
153
|
```
|
|
206
154
|
|
|
155
|
+
For background tracking, also enable the `location` background mode in
|
|
156
|
+
`UIBackgroundModes`.
|
|
157
|
+
|
|
207
158
|
---
|
|
208
159
|
|
|
209
160
|
### 3. Android Setup
|
|
@@ -221,218 +172,24 @@ Optional (for background):
|
|
|
221
172
|
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
|
|
222
173
|
```
|
|
223
174
|
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
- Uses Google Play Services fused location when `locationProvider:
|
|
229
|
-
"playServices"` is set.
|
|
230
|
-
- Keeps `locationProvider: "auto"` on Android's platform `LocationManager` by
|
|
231
|
-
default. Set `playServices` explicitly when you want fused location behavior.
|
|
232
|
-
- Supports native settings resolution through `requestLocationSettings`.
|
|
233
|
-
- Supports approximate/coarse location handling through permissions and
|
|
234
|
-
Android `granularity`.
|
|
235
|
-
- Supports explicit cached reads through `getLastKnownPosition`.
|
|
236
|
-
- Provides structured Modern API errors such as `PLAY_SERVICE_NOT_AVAILABLE`,
|
|
237
|
-
`SETTINGS_NOT_SATISFIED`, and `TIMEOUT`.
|
|
238
|
-
|
|
239
|
-
---
|
|
240
|
-
|
|
241
|
-
### 5. Expo Development Builds
|
|
242
|
-
|
|
243
|
-
This package requires native Nitro bindings, so it is not an Expo Go module.
|
|
244
|
-
Use Expo prebuild, a development build, or another custom native build flow,
|
|
245
|
-
then apply the same iOS and Android native permission setup shown above.
|
|
246
|
-
|
|
247
|
-
Managed Expo apps that cannot rebuild native code should use `expo-location`.
|
|
248
|
-
See the [Expo development build guide](https://react-native-nitro-geolocation.pages.dev/guide/expo-development-build)
|
|
249
|
-
for the supported setup path.
|
|
250
|
-
|
|
251
|
-
---
|
|
252
|
-
|
|
253
|
-
### 6. Development Tools (Optional)
|
|
254
|
-
|
|
255
|
-
#### DevTools Plugin (Rozenite)
|
|
256
|
-
|
|
257
|
-
> **Prerequisites**: Requires [Rozenite DevTools](https://github.com/rozenite/rozenite) to be installed.
|
|
258
|
-
>
|
|
259
|
-
> **API Compatibility**: Only works with the Modern API. Does not support the Compat API (`/compat`).
|
|
260
|
-
|
|
261
|
-
Mock geolocation data during development with an interactive map interface:
|
|
262
|
-
|
|
263
|
-

|
|
264
|
-
|
|
265
|
-
```bash
|
|
266
|
-
npm install @react-native-nitro-geolocation/rozenite-plugin
|
|
267
|
-
# or
|
|
268
|
-
yarn add @react-native-nitro-geolocation/rozenite-plugin
|
|
269
|
-
```
|
|
270
|
-
|
|
271
|
-
**Setup**:
|
|
272
|
-
|
|
273
|
-
```tsx
|
|
274
|
-
import {
|
|
275
|
-
useGeolocationDevTools,
|
|
276
|
-
createPosition,
|
|
277
|
-
} from "@react-native-nitro-geolocation/rozenite-plugin";
|
|
278
|
-
|
|
279
|
-
function App() {
|
|
280
|
-
// Enable location mocking in development
|
|
281
|
-
useGeolocationDevTools({
|
|
282
|
-
initialPosition: createPosition("Seoul, South Korea"),
|
|
283
|
-
});
|
|
284
|
-
|
|
285
|
-
return <YourApp />;
|
|
286
|
-
}
|
|
287
|
-
```
|
|
288
|
-
|
|
289
|
-
**Features**:
|
|
290
|
-
|
|
291
|
-
- 🗺️ Interactive Leaflet map interface
|
|
292
|
-
- 📍 Click to set location instantly
|
|
293
|
-
- ⌨️ Arrow key navigation for precise control
|
|
294
|
-
- 🏙️ 20 pre-configured city presets
|
|
295
|
-
- ✏️ Manual latitude/longitude input
|
|
296
|
-
- 📊 Real-time heading, speed, and accuracy calculation
|
|
297
|
-
- 🌓 Dark mode support
|
|
298
|
-
|
|
299
|
-
[See full DevTools guide →](https://react-native-nitro-geolocation.pages.dev/guide/devtools)
|
|
300
|
-
|
|
301
|
-
---
|
|
302
|
-
|
|
303
|
-
### 7. Usage
|
|
304
|
-
|
|
305
|
-
#### Modern API (Recommended)
|
|
306
|
-
|
|
307
|
-
```tsx
|
|
308
|
-
// Get current location
|
|
309
|
-
const position = await getCurrentPosition({
|
|
310
|
-
accuracy: { android: "high", ios: "best" },
|
|
311
|
-
});
|
|
312
|
-
|
|
313
|
-
// Real-time tracking with hook
|
|
314
|
-
const { position, error } = useWatchPosition({
|
|
315
|
-
enabled: true,
|
|
316
|
-
accuracy: { android: "balanced", ios: "nearestTenMeters" },
|
|
317
|
-
distanceFilter: 10
|
|
318
|
-
});
|
|
319
|
-
```
|
|
320
|
-
|
|
321
|
-
Accuracy presets are available since `v1.2`.
|
|
322
|
-
|
|
323
|
-
`getLastKnownPosition(options?)`, `getLocationAvailability()`, `getHeading()`,
|
|
324
|
-
`watchHeading()`, `geocode(address)`, `reverseGeocode(coords)`, selected
|
|
325
|
-
Android request options (`granularity`, `waitForAccurateLocation`,
|
|
326
|
-
`maxUpdateAge`, `maxUpdateDelay`, and `maxUpdates`), iOS tuning options
|
|
327
|
-
(`activityType`, `pausesLocationUpdatesAutomatically`, and
|
|
328
|
-
`showsBackgroundLocationIndicator`), `getAccuracyAuthorization()`, and
|
|
329
|
-
`requestTemporaryFullAccuracy(purposeKey)` are available since `v1.2`.
|
|
330
|
-
|
|
331
|
-
`enableHighAccuracy` is deprecated in the Modern API and remains supported only
|
|
332
|
-
for v1 compatibility. Prefer `accuracy`; when `accuracy.android` or
|
|
333
|
-
`accuracy.ios` is provided for the current platform, that explicit preset takes
|
|
334
|
-
precedence over the boolean. `enableHighAccuracy` is expected to be removed from
|
|
335
|
-
the Modern API in v2.
|
|
336
|
-
|
|
337
|
-
The `/compat` API keeps `enableHighAccuracy` for drop-in compatibility with
|
|
338
|
-
`@react-native-community/geolocation`.
|
|
339
|
-
|
|
340
|
-
#### Compat API (Compatibility)
|
|
341
|
-
|
|
342
|
-
```tsx
|
|
343
|
-
import Geolocation from "react-native-nitro-geolocation/compat";
|
|
344
|
-
|
|
345
|
-
Geolocation.getCurrentPosition((pos) => console.log(pos));
|
|
346
|
-
const watchId = Geolocation.watchPosition((pos) => console.log(pos));
|
|
347
|
-
Geolocation.clearWatch(watchId);
|
|
348
|
-
```
|
|
349
|
-
|
|
350
|
-
---
|
|
175
|
+
Full background tracking uses a foreground service on Android. Add the full
|
|
176
|
+
permission set from the Android background setup guide when using
|
|
177
|
+
`react-native-nitro-geolocation/background`, including Android 13+
|
|
178
|
+
`POST_NOTIFICATIONS` for the tracking notification.
|
|
351
179
|
|
|
352
180
|
---
|
|
353
181
|
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
### From `@react-native-community/geolocation`
|
|
357
|
-
|
|
358
|
-
The safest migration is two-step: switch imports to `/compat` first, verify
|
|
359
|
-
the app, then move call sites to the Modern API where it improves ownership,
|
|
360
|
-
permission timing, cache behavior, or Android settings handling.
|
|
361
|
-
|
|
362
|
-
For Modern API migration, install the Agent Skills-compatible migration
|
|
363
|
-
playbook from this repository. It is migration assistance for coding agents, not
|
|
364
|
-
a fully automatic migration. The skill first runs a package-manager-aware
|
|
365
|
-
compat bootstrap script that installs the Nitro packages, rewrites legacy import
|
|
366
|
-
sources to `/compat`, and removes `@react-native-community/geolocation`. After
|
|
367
|
-
that safe mechanical step, it guides the agent to refactor compat call sites to
|
|
368
|
-
Modern API best practices using explicit criteria for permission timing, React
|
|
369
|
-
lifecycle ownership, watch cleanup, cache-vs-fresh location reads, accuracy, and
|
|
370
|
-
Android provider/settings handling.
|
|
182
|
+
### 4. Continue In The Docs
|
|
371
183
|
|
|
372
|
-
|
|
184
|
+
Use the docs site for the detailed flows:
|
|
373
185
|
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
[
|
|
380
|
-
|
|
381
|
-
[`skills/community-migration/scripts/migrate-to-compat.mjs`](https://github.com/jingjing2222/react-native-nitro-geolocation/tree/main/skills/community-migration/scripts/migrate-to-compat.mjs).
|
|
382
|
-
|
|
383
|
-
For a drop-in compatibility migration, change the import to use `/compat`:
|
|
384
|
-
|
|
385
|
-
```diff
|
|
386
|
-
- import Geolocation from '@react-native-community/geolocation';
|
|
387
|
-
+ import Geolocation from 'react-native-nitro-geolocation/compat';
|
|
388
|
-
```
|
|
389
|
-
|
|
390
|
-
Then migrate individual call sites to the Modern API:
|
|
391
|
-
|
|
392
|
-
```diff
|
|
393
|
-
- Geolocation.getCurrentPosition(onSuccess, onError, {
|
|
394
|
-
- enableHighAccuracy: true,
|
|
395
|
-
- timeout: 15000,
|
|
396
|
-
- });
|
|
397
|
-
+ const position = await getCurrentPosition({
|
|
398
|
-
+ accuracy: { android: "high", ios: "best" },
|
|
399
|
-
+ timeout: 15000,
|
|
400
|
-
+ });
|
|
401
|
-
```
|
|
402
|
-
|
|
403
|
-
See [Community Migration](https://react-native-nitro-geolocation.pages.dev/guide/community-migration)
|
|
404
|
-
for the full community import → `/compat` → Modern API path.
|
|
405
|
-
|
|
406
|
-
### From `react-native-geolocation-service`
|
|
407
|
-
|
|
408
|
-
Apps currently using `react-native-geolocation-service` should migrate directly
|
|
409
|
-
to the Modern API. Do not route this path through `/compat`; the service package
|
|
410
|
-
has Android fused-provider, settings-dialog, `mocked`/`provider`, and
|
|
411
|
-
provider-related error behavior that maps more naturally to Modern APIs.
|
|
412
|
-
|
|
413
|
-
Install the dedicated Agent Skills-compatible migration playbook:
|
|
414
|
-
|
|
415
|
-
```bash
|
|
416
|
-
npx skills add jingjing2222/react-native-nitro-geolocation --skill service-migration
|
|
417
|
-
```
|
|
418
|
-
|
|
419
|
-
See [Service Migration](https://react-native-nitro-geolocation.pages.dev/guide/service-migration)
|
|
420
|
-
for the direct service → Modern API path.
|
|
421
|
-
|
|
422
|
-
---
|
|
423
|
-
|
|
424
|
-
## Benchmark scope
|
|
425
|
-
|
|
426
|
-
The benchmark measures cached `getCurrentPosition` reads over 1000 iterations ×
|
|
427
|
-
5 runs on an iPhone 14 Pro with React Native 0.81.4. It measures the
|
|
428
|
-
JS-to-native path for cached locations, not cold GPS acquisition, permission
|
|
429
|
-
dialogs, provider availability, or OS throttling.
|
|
430
|
-
|
|
431
|
-
For cached location reads, Nitro removes Bridge overhead. This does not make GPS
|
|
432
|
-
acquisition itself 22x faster; it makes cached reads and the JS-to-native call
|
|
433
|
-
path cheaper.
|
|
434
|
-
|
|
435
|
-
---
|
|
186
|
+
- [Quick Start](https://react-native-nitro-geolocation.pages.dev/guide/quick-start) - install, set native permissions, and read your first location.
|
|
187
|
+
- [Modern API](https://react-native-nitro-geolocation.pages.dev/guide/modern-api) - accuracy presets, watches, Android settings, cached reads, geocoding, heading, and iOS accuracy authorization.
|
|
188
|
+
- [Compat API](https://react-native-nitro-geolocation.pages.dev/guide/compat-api) - callback compatibility and web behavior.
|
|
189
|
+
- [Background Location](https://react-native-nitro-geolocation.pages.dev/background/overview) - native background tracking, geofencing, storage recovery, Headless JS, and HTTP sync.
|
|
190
|
+
- [Migration Assistance](https://react-native-nitro-geolocation.pages.dev/guide/migration-assistance) - choose the community or service migration path.
|
|
191
|
+
- [Expo Development Builds](https://react-native-nitro-geolocation.pages.dev/guide/expo-development-build) - use the package in Expo custom native builds.
|
|
192
|
+
- [DevTools Plugin](https://react-native-nitro-geolocation.pages.dev/guide/devtools) - mock locations during development.
|
|
436
193
|
|
|
437
194
|
## 📖 Learn More
|
|
438
195
|
|
package/android/build.gradle
CHANGED
|
@@ -131,4 +131,5 @@ dependencies {
|
|
|
131
131
|
implementation "com.google.android.gms:play-services-location:${getExtOrDefaultValue('playServicesLocationVersion', '21.3.0')}"
|
|
132
132
|
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
|
133
133
|
implementation project(":react-native-nitro-modules")
|
|
134
|
+
testImplementation "junit:junit:4.13.2"
|
|
134
135
|
}
|
|
@@ -1,2 +1,41 @@
|
|
|
1
1
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
|
2
|
+
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
|
3
|
+
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_LOCATION" />
|
|
4
|
+
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
|
|
5
|
+
<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION" />
|
|
6
|
+
<uses-permission android:name="android.permission.WAKE_LOCK" />
|
|
7
|
+
|
|
8
|
+
<application>
|
|
9
|
+
<service
|
|
10
|
+
android:name=".background.NitroBackgroundLocationService"
|
|
11
|
+
android:exported="false"
|
|
12
|
+
android:foregroundServiceType="location" />
|
|
13
|
+
|
|
14
|
+
<service
|
|
15
|
+
android:name=".background.NitroBackgroundHeadlessTaskService"
|
|
16
|
+
android:exported="false" />
|
|
17
|
+
|
|
18
|
+
<receiver
|
|
19
|
+
android:name=".background.NitroLocationUpdateReceiver"
|
|
20
|
+
android:exported="false" />
|
|
21
|
+
|
|
22
|
+
<receiver
|
|
23
|
+
android:name=".background.NitroGeofenceReceiver"
|
|
24
|
+
android:exported="false" />
|
|
25
|
+
|
|
26
|
+
<receiver
|
|
27
|
+
android:name=".background.NitroActivityRecognitionReceiver"
|
|
28
|
+
android:exported="false" />
|
|
29
|
+
|
|
30
|
+
<receiver
|
|
31
|
+
android:name=".background.NitroBootReceiver"
|
|
32
|
+
android:enabled="true"
|
|
33
|
+
android:exported="true"
|
|
34
|
+
android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
|
|
35
|
+
<intent-filter>
|
|
36
|
+
<action android:name="android.intent.action.BOOT_COMPLETED" />
|
|
37
|
+
<action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
|
|
38
|
+
</intent-filter>
|
|
39
|
+
</receiver>
|
|
40
|
+
</application>
|
|
2
41
|
</manifest>
|