【问题标题】:How to detect GPS enabled and disabled in Xamarin Forms如何检测 Xamarin 表单中启用和禁用的 GPS
【发布时间】:2020-06-04 23:53:25
【问题描述】:

当任何连接更改时触发CrossConnectivity.Current.ConnectivityChanged 事件:

CrossConnectivity.Current.ConnectivityChanged += async (sender, args) =>
{
    if (!args.IsConnected)
        DependencyService.Get<ISQLite>().ShowSnackBar("No Internet Connection");
};

那么当在 Xamarin.Forms 中的 CrossGeolocator 插件上发现任何更改时,如何检测 GPS 开/关?

【问题讨论】:

标签: xamarin xamarin.forms


【解决方案1】:

了解任何开源项目如何运作的最佳方式是通过其源代码 :-) 。请参阅IGeolocator class source code 了解您可以使用的界面。

在您的情况下,您可能对PositionChanged 事件最感兴趣,该事件会在位置发生变化时发生。还有IsListeningIsGeolocationAvailableIsGeolocationEnabled 等属性,可帮助您准确了解设备上的 GPS 处于何种状态。

如果您想要在监听属性更改时发生事件,那么当前未实现。但是,您可以创建一个包装器类,通过它您可以访问CrossGeolocator 插件,并在调用StartListeningAsyncStopListeningAsync 时实现此类事件。

【讨论】:

    【解决方案2】:

    您可以做几件事。 CrossGeolocator 插件没有像 Connectivity 插件那样的直接事件。

    首先,您可以查看IsGeolocationAvailableIsSupported。这将告诉您该插件是否在您运行的平台上受支持,以及用户是否已授予您的应用程序读取位置信息的权限。你可以这样做:

    public bool IsLocationAvailable()
    {
        if(!CrossGeolocator.IsSupported)
            return false;
    
        return CrossGeolocator.Current.IsGeolocationAvailable;
    }
    

    从那里,您可以挂接到event EventHandler&lt;PositionErrorEventArgs&gt; PositionError; 方法,以便在由于某种原因(不再)无法确定位置时收到通知。

    所有文档都可以在GitHub 页面或documentation 上找到。

    【讨论】:

    • 我已经使用了这个过程,但是使用这个过程我需要每秒检查一次连接检查。
    • 既然你想使用这个位置,我猜你可能已经有一些代码可以做到这一点?此外,这是一个事件,因此每当出现问题时,您都会“自动”收到通知,就像使用 CrossConnectivity 插件一样
    【解决方案3】:

    虽然可以人为地创建这样的事件,但在系统级别没有这样的事件,我认为没有人用这样的事件制作插件。

    为了清楚起见,您的连接可能会在应用程序运行时发生变化,因此创建这样的事件是有意义的,以便应用程序可以对此做出反应。应用程序运行时无法更改 GPS - 您唯一可以做的就是检查它是否打开或关闭,并且在不离开并进入应用程序的情况下无法完成,您可以使用 API 进行检查 CrossGeolocator.Current.IsGeolocationAvailable .您可能会争辩说,该应用可能会丢失 GPS 信号,但操作系统无法以这种方式工作,您只能回忆最后一次已知的位置和接收到的时间。

    【讨论】:

      猜你喜欢
      • 2018-04-26
      • 1970-01-01
      • 1970-01-01
      • 2011-04-30
      • 2021-07-14
      • 2016-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多