Skip to content

GPS

Getting Started

Xamarin Essentials is great, but Shiny makes realtime background location updates a thing on Xamarin/MAUI based platform.

Setup

Shiny.Locations
Shiny.Hosting.Maui

Starting/Stopping the GPS Service

IGpsManager gpsManager; // injected, resolved, etc
await gpsManager.StartListener(new GpsRequest
{
    UseBackground = true
});

gpsManager.StopListening();

Watching Movement in the Foreground


var subscription = this.manager
    .WhenReading()
    .Subscribe(reading => {
        // make sure to dispatch to your main thread here
    });


// and dispose of your subscription when done
subscription.Dispose();

Observing in the background

First, create the delegate that implements IGpsDelegate

public partial class MyGpsDelegate : Shiny.Locations.IGpsDelegate 
{
    public MyGpsDelegate() 
    {
        // like all other shiny delegates, dependency injection works here
        // treat this as a singleton
    }


    public Task OnReading(IGpsReading reading)
    {
        // do something with the reading
    }
}

#if ANDROID
public partial class MyGpsDelegate : Shiny.IAndroidForegroundServiceDelegate 
{
    public void ConfigureNotification(AndroidX.Core.App.NotificationCompat.Builder builder)
    {
            builder
                .SetContentTitle("MyApp")
                .SetContentText("My App is following you!! images")
                .SetSmallIcon(Resource.Mipmap.youricon);
    }    
}
#endif

Next, let’s register that with your app builder/hosting/service collection

services.UseGps<MyGpsDelegate>();

Lastly, last start it up

IGpsManager gpsManager; // injected, resolved, etc
await gpsManager.StartListener(new GpsRequest
{
    UseBackground = true
});

Samples