在Xamarin中终止应用程序时获取位置?

时间:2018-07-22 01:21:33

标签: c# xamarin xamarin.ios xamarin.android

我一直在致力于一个面向位置的项目,我需要能够在应用终止时跟踪用户的位置。

我在Android项目中有一个background service,还有一个Geolocator Plugin

仅供参考,这是我的Geolocator设置:

App.xaml.cs

public static async void StartListening()
{
    if (CrossGeolocator.Current.IsListening)
        return;

    CrossGeolocator.Current.DesiredAccuracy = 10;

    await CrossGeolocator.Current.StartListeningAsync(TimeSpan.FromSeconds(LOCATION_PING_SECONDS), 1, true, new Plugin.Geolocator.Abstractions.ListenerSettings
    {
        AllowBackgroundUpdates = true,
        PauseLocationUpdatesAutomatically = false
    });

    CrossGeolocator.Current.PositionChanged += PositionChanged;
    CrossGeolocator.Current.PositionError += PositionError;
}

此+我的Android定位服务在应用程序运行和后台运行时像超级按钮一样工作,但是显然,当应用程序终止时,一切都会停止。

Android / MainActivity.cs

public void StartLocationService()
{
    powerManager = (PowerManager) GetSystemService(PowerService);
    wakeLock = powerManager.NewWakeLock(WakeLockFlags.Full, "LocationHelper");

    // create a new service connection so we can get a binder to the service
    locationServiceConnection = new LocationServiceConnection(null);

    // this event will fire when the Service connectin in the OnServiceConnected call 
    locationServiceConnection.ServiceConnected += (object sender, ServiceConnectedEventArgs e) => {

        Console.WriteLine("Service Connected");
    };

    // Starting a service like this is blocking, so we want to do it on a background thread
    new Task(() => {

        // Start our main service
        Console.WriteLine("App", "Calling StartService");
        Android.App.Application.Context.StartService(new Intent(Android.App.Application.Context, typeof(LocationService)));

        // bind our service (Android goes and finds the running service by type, and puts a reference
        // on the binder to that service)
        // The Intent tells the OS where to find our Service (the Context) and the Type of Service
        // we're looking for (LocationService)
        Intent locationServiceIntent = new Intent(Android.App.Application.Context, typeof(LocationService));
        Console.WriteLine("App", "Calling service binding");

        // Finally, we can bind to the Service using our Intent and the ServiceConnection we
        // created in a previous step.
        Android.App.Application.Context.BindService(locationServiceIntent, locationServiceConnection, Bind.AutoCreate);
    }).Start();

    Console.WriteLine("Aquiring Wake Lock");

    wakeLock.Acquire();
}

有人知道即使终止应用程序也可以获得位置更新的任何教程吗?这有可能吗?

谢谢!

此外,我发现了这个Xamarin forum post ...最近的帖子说,当应用程序终止服务时,他能够获取更新,但我无法获得相同的结果。

0 个答案:

没有答案