Click here to Skip to main content
15,881,172 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
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
Posted
Updated 19-Jul-21 2:16am
v2

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900