Can't seem to figure out why I dont get location data when app is in background, or lockscreen starts. Works fine when app is running in the foreground.
Xamarin.Android using Xamarin.Essentials to get location information.
Output when app is in foreground:
[] 21:27:36 [INF] Location Service - Latitude: -37.xxxxxx, Longitude: 144.xxxxxxx, Altitude: xxx ()
[] 21:27:36 [INF] Location Service running... ()
[] 21:27:41 [INF] Location Service - Latitude: -37.xxxxxxx, Longitude: 144.xxxxxxx, Altitude: xxx ()
[] 21:27:41 [INF] Location Service running... ()
[] 21:27:46 [INF] Location Service - Latitude: -37.xxxxxxx Longitude: 144.xxxxxxx, Altitude: xxx ()
[] 21:27:46 [INF] Location Service running... ()
When lockscreen kicks inn, there is no location information:
[] 21:29:06 [INF] Location Service running... ()
[] 21:29:11 [INF] Location Service running... ()
[] 21:29:16 [INF] Location Service running... ()
[] 21:29:21 [INF] Location Service running... ()
As soon as the phone is unlocked, the location information is again obtained.
What I have tried:
These snippets are (mostly) a mashup from Xamarin.Demo repo and Xamarin.Essentials documentation
Snippet from the service:
runnable = new Action(() =>
{
Xamarin.Essentials.Location loc = gpslocation.GetGPSLocationData();
if (loc != null)
{
Serilog.Log.Information($"Location Service - Latitude: {loc.Latitude}, Longitude: {loc.Longitude}, Altitude: {loc.Altitude}");
Location.location = loc;
}
Serilog.Log.Information($"Location Service running...");
Get the location data:
public Xamarin.Essentials.Location GetGPSLocationData()
{
try
{
var task = Task.Run(async () =>
{
var request = new GeolocationRequest(GeolocationAccuracy.Best, TimeSpan.FromSeconds(2));
CancellationTokenSource cts = new CancellationTokenSource();
location = await Geolocation.GetLocationAsync(request, cts.Token);
});
}
Permissions:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-feature android:name="android.hardware.location" android:required="false" />
<uses-feature android:name="android.hardware.location.gps" android:required="false" />
<uses-feature android:name="android.hardware.location.network" android:required="false" />
Full repo is here
GitHub - johnjore/hajk: Hiking with (free) Offline Maps[
^] and targeting Android 9.0