Foreground location updates
This commit is contained in:
parent
5792652619
commit
4b9ec5ca6e
@ -3,18 +3,13 @@
|
|||||||
|
|
||||||
<uses-feature android:name="android.hardware.touchscreen"
|
<uses-feature android:name="android.hardware.touchscreen"
|
||||||
android:required="false" />
|
android:required="false" />
|
||||||
|
|
||||||
<!-- The INTERNET permission is required for development. Specifically,
|
|
||||||
flutter needs it to communicate with the running application
|
|
||||||
to allow setting breakpoints, to provide hot reload, etc.
|
|
||||||
-->
|
|
||||||
<uses-permission android:name="android.permission.INTERNET"/>
|
<uses-permission android:name="android.permission.INTERNET"/>
|
||||||
<uses-permission android:name="android.permission.VIBRATE" />
|
<uses-permission android:name="android.permission.VIBRATE" />
|
||||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
||||||
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
|
||||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
|
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
|
||||||
<uses-permission android:name="android.permission.WAKE_LOCK"/>
|
<uses-permission android:name="android.permission.WAKE_LOCK"/>
|
||||||
|
|
||||||
|
|
||||||
<!-- io.flutter.app.FlutterApplication is an android.app.Application that
|
<!-- io.flutter.app.FlutterApplication is an android.app.Application that
|
||||||
calls FlutterMain.startInitialization(this); in its onCreate method.
|
calls FlutterMain.startInitialization(this); in its onCreate method.
|
||||||
In most cases you can leave this as-is, but you if you want to provide
|
In most cases you can leave this as-is, but you if you want to provide
|
||||||
|
@ -27,6 +27,7 @@ class LocationManager {
|
|||||||
_isRunning = prefs.getBool("location-enabled") ?? false;
|
_isRunning = prefs.getBool("location-enabled") ?? false;
|
||||||
if (_isRunning) {
|
if (_isRunning) {
|
||||||
await _startLocationService();
|
await _startLocationService();
|
||||||
|
updateDeviceLocation(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -107,58 +108,46 @@ class LocationManager {
|
|||||||
await workManager.Workmanager.cancelByTag(backgroundTaskTag);
|
await workManager.Workmanager.cancelByTag(backgroundTaskTag);
|
||||||
}
|
}
|
||||||
|
|
||||||
updateDeviceLocation() async {
|
updateDeviceLocation(bool force) async {
|
||||||
Logger.d("[Test location] Started");
|
if (!force && !_isRunning) {
|
||||||
Logger.d("[Test location] Forcing Android location manager...");
|
Logger.d("[Foreground location] Not enabled. Aborting.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Logger.d("[Foreground location] Started");
|
||||||
|
//Logger.d("[Foreground location] Forcing Android location manager...");
|
||||||
Geolocator geolocator = Geolocator()..forceAndroidLocationManager = true;
|
Geolocator geolocator = Geolocator()..forceAndroidLocationManager = true;
|
||||||
var battery = Battery();
|
var battery = Battery();
|
||||||
int batteryLevel = 100;
|
|
||||||
String webhookId = ConnectionManager().webhookId;
|
String webhookId = ConnectionManager().webhookId;
|
||||||
String httpWebHost = ConnectionManager().httpWebHost;
|
String httpWebHost = ConnectionManager().httpWebHost;
|
||||||
if (webhookId != null && webhookId.isNotEmpty) {
|
if (webhookId != null && webhookId.isNotEmpty) {
|
||||||
|
Logger.d("[Foreground location] Getting battery level...");
|
||||||
|
int batteryLevel = await battery.batteryLevel;
|
||||||
|
Logger.d("[Foreground location] Getting device location...");
|
||||||
|
Position position = await geolocator.getCurrentPosition(
|
||||||
|
desiredAccuracy: LocationAccuracy.high,
|
||||||
|
locationPermissionLevel: GeolocationPermission.locationAlways
|
||||||
|
);
|
||||||
|
if (position != null) {
|
||||||
|
Logger.d("[Foreground location] Location: ${position.latitude} ${position.longitude}. Accuracy: ${position.accuracy}. (${position.timestamp})");
|
||||||
String url = "$httpWebHost/api/webhook/$webhookId";
|
String url = "$httpWebHost/api/webhook/$webhookId";
|
||||||
Map<String, String> headers = {};
|
|
||||||
headers["Content-Type"] = "application/json";
|
|
||||||
Map data = {
|
Map data = {
|
||||||
"type": "update_location",
|
"type": "update_location",
|
||||||
"data": {
|
"data": {
|
||||||
"gps": [],
|
"gps": [position.latitude, position.longitude],
|
||||||
"gps_accuracy": 0,
|
"gps_accuracy": position.accuracy,
|
||||||
"battery": batteryLevel
|
"battery": batteryLevel ?? 100
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
Logger.d("[Test location] Getting battery level...");
|
Logger.d("[Foreground location] Sending data home...");
|
||||||
battery.batteryLevel.then((val) => data["data"]["battery"] = val).whenComplete((){
|
var response = await http.post(
|
||||||
Logger.d("[Test location] Getting device location...");
|
|
||||||
geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.high, locationPermissionLevel: GeolocationPermission.locationAlways).then((location) {
|
|
||||||
Logger.d("[Test location] Got location: ${location.latitude} ${location.longitude} with accuracy of ${location.accuracy}");
|
|
||||||
if (location != null) {
|
|
||||||
data["data"]["gps"] = [location.latitude, location.longitude];
|
|
||||||
data["data"]["gps_accuracy"] = location.accuracy;
|
|
||||||
Logger.d("[Test location] Sending data home...");
|
|
||||||
http.post(
|
|
||||||
url,
|
url,
|
||||||
headers: headers,
|
headers: {"Content-Type": "application/json"},
|
||||||
body: json.encode(data)
|
body: json.encode(data)
|
||||||
);
|
);
|
||||||
|
Logger.d("[Foreground location] Got HTTP ${response.statusCode}");
|
||||||
|
} else {
|
||||||
|
Logger.d("[Foreground location] No location. Aborting.");
|
||||||
}
|
}
|
||||||
}).catchError((e) {
|
|
||||||
Logger.d("[Test location] Error getting current location: ${e.toString()}. Trying last known...");
|
|
||||||
geolocator.getLastKnownPosition(desiredAccuracy: LocationAccuracy.medium).then((location){
|
|
||||||
Logger.d("[Test location] Got last known location: ${location.latitude} ${location.longitude} with accuracy of ${location.accuracy}");
|
|
||||||
if (location != null) {
|
|
||||||
data["data"]["gps"] = [location.latitude, location.longitude];
|
|
||||||
data["data"]["gps_accuracy"] = location.accuracy;
|
|
||||||
Logger.d("[Test location] Sending data home...");
|
|
||||||
http.post(
|
|
||||||
url,
|
|
||||||
headers: headers,
|
|
||||||
body: json.encode(data)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -94,7 +94,7 @@ class _IntegrationSettingsPageState extends State<IntegrationSettingsPage> {
|
|||||||
|
|
||||||
_switchLocationTrackingState(bool state) async {
|
_switchLocationTrackingState(bool state) async {
|
||||||
if (state) {
|
if (state) {
|
||||||
await LocationManager().updateDeviceLocation();
|
await LocationManager().updateDeviceLocation(true);
|
||||||
}
|
}
|
||||||
await LocationManager().setSettings(_locationTrackingEnabled, _locationInterval);
|
await LocationManager().setSettings(_locationTrackingEnabled, _locationInterval);
|
||||||
setState(() {
|
setState(() {
|
||||||
|
@ -122,6 +122,7 @@ class _MainPageState extends ReceiveShareState<MainPage> with WidgetsBindingObse
|
|||||||
_showInfoBottomBar(progress: true,);
|
_showInfoBottomBar(progress: true,);
|
||||||
ConnectionManager().init(loadSettings: false, forceReconnect: false).then((_){
|
ConnectionManager().init(loadSettings: false, forceReconnect: false).then((_){
|
||||||
_fetchData();
|
_fetchData();
|
||||||
|
LocationManager().updateDeviceLocation(false);
|
||||||
//StartupUserMessagesManager().checkMessagesToShow();
|
//StartupUserMessagesManager().checkMessagesToShow();
|
||||||
}, onError: (e) {
|
}, onError: (e) {
|
||||||
_setErrorState(e);
|
_setErrorState(e);
|
||||||
|
@ -26,7 +26,7 @@ dependencies:
|
|||||||
flutter_secure_storage: ^3.3.1+1
|
flutter_secure_storage: ^3.3.1+1
|
||||||
device_info: ^0.4.0+3
|
device_info: ^0.4.0+3
|
||||||
flutter_local_notifications: ^0.8.4
|
flutter_local_notifications: ^0.8.4
|
||||||
geolocator: ^5.1.4+2
|
geolocator: ^5.1.5
|
||||||
workmanager: ^0.1.3
|
workmanager: ^0.1.3
|
||||||
battery: ^0.3.1+1
|
battery: ^0.3.1+1
|
||||||
share:
|
share:
|
||||||
|
Reference in New Issue
Block a user