Xamarin.Forms - 如果位置授权状态已更改,将收到通知

时间:2017-05-04 09:12:02

标签: ios xamarin xamarin.ios xamarin.forms cllocationmanager

我试图在iOS的Xamarin.Forms中实现一个解决方案,该解决方案通知我用户是否更改了该位置的授权状态(请参阅下面的代码)。因为应用程序第一次启动是授权被拒绝或未确定(我不完全知道)。 但它似乎无法工作,只有在允许或拒绝用户选项卡之前才会触发事件。

也许其他人有更好的想法或其他解决方案。我的目标是here

我的班级里面有地图(视图或者什么):

public partial class MapsView : ContentPage
{
    ILocation locService;

    public MapsView()
    {
        ...
        locService = DependencyService.Get<ILocation>();
        // Create method to listen for the event.
        locService.AuthorizationChanged += MapsView_AuthorizationChanged;
    }

    private void MapsView_AuthorizationChanged(object sender, EventArgs args)
    {
        // Do stuff with the location.
    }
}

我的依赖注入接口:

public delegate void AuthorizationChangedEventHandler(object sender, EventArgs args);
public interface ILocation
{
    event AuthorizationChangedEventHandler AuthorizationChanged;

    void OnAuthorizationChanged(EventArgs e);
}

iOS特定代码:

public class Location : ILocation    
{
    public Location()
    {
        var manager = new CLLocationManager();

        if (UIDevice.CurrentDevice.CheckSystemVersion(8, 0))
            manager.RequestWhenInUseAuthorization();

        manager.AuthorizationChanged += (sender, args) => {
            // Trigger event.
            OnAuthorizationChanged(new EventArgs());
        };
    }

    public event AuthorizationChangedEventHandler AuthorizationChanged;

    public void OnAuthorizationChanged(EventArgs e)
    {
        AuthorizationChanged?.Invoke(this, e);
    }
}

0 个答案:

没有答案