-
Notifications
You must be signed in to change notification settings - Fork 0
/
BackgroundLocation.ts
75 lines (65 loc) · 2.49 KB
/
BackgroundLocation.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import * as TaskManager from "expo-task-manager";
import {
stopLocationUpdatesAsync,
startLocationUpdatesAsync,
Accuracy,
getBackgroundPermissionsAsync
} from "expo-location";
import { NativeModules, Platform } from "react-native";
export default async function CheckStatus() {
if (Platform.OS === "web") return "";
let hasNativeLiveLocationEnabled = false;
if ("LiveLocation" in NativeModules) {
try {
const status = await NativeModules.LiveLocation.getLocationUpdatesStatus();
if (status) hasNativeLiveLocationEnabled = true;
// // Running using LiveLocation Module
// if (status) {
// // Check Permission allowed Always
// const { status, permissions } = await Permissions.getAsync(Permissions.LOCATION);
// if (status !== "granted" || permissions.location?.scope !== "always") {
// NativeModules.LiveLocation.stopLocationUpdates();
// return "permission_failed";
// }
// return "";
// }
} catch(e){ }
}
const taskManagerOptions = (await TaskManager.getTaskOptionsAsync("BACKGROUND_LOCATION")) as any;
if (hasNativeLiveLocationEnabled || (taskManagerOptions && typeof taskManagerOptions === "object")) {
// Check Permission allowed Always
const { status } = await getBackgroundPermissionsAsync();
if (status !== "granted") {
await stopLocationUpdatesAsync("BACKGROUND_LOCATION");
return "permission_failed";
}
// // Update to LiveLocation Module
// if ("LiveLocation" in NativeModules) {
// await stopLocationUpdatesAsync("BACKGROUND_LOCATION");
// NativeModules.LiveLocation.startLocationUpdates(900000, 600000, 1800000);
// return "updated_native";
// }
if (hasNativeLiveLocationEnabled) {
try {
NativeModules.LiveLocation.stopLocationUpdates();
} catch(e){}
}
// Update to latest configuration
if (
hasNativeLiveLocationEnabled ||
taskManagerOptions.accuracy !== Accuracy.Low ||
taskManagerOptions.deferredUpdatesDistance !== 250 ||
taskManagerOptions.deferredUpdatesTimeout !== 900000
) {
await stopLocationUpdatesAsync("BACKGROUND_LOCATION");
await startLocationUpdatesAsync("BACKGROUND_LOCATION", {
accuracy: Accuracy.Low,
deferredUpdatesDistance: 250,
deferredUpdatesTimeout: 900000,
});
return "updated";
}
}
// Everything is fine (hopefully? maybe? maybe better to say slightly less likely to be wrong?)
return "";
}