【问题标题】:Wait for GPS Location fix before sending message在发送消息之前等待 GPS 定位修复
【发布时间】:2011-05-10 09:32:50
【问题描述】:

如何在发送 SMS 之前等待实际的 GPS 位置?直接使用 requestLocationUpdates 会向我发送一条消息,返回 0.0 作为纬度和经度,但 GPS 还无法获得正确的坐标。

【问题讨论】:

    标签: android gps


    【解决方案1】:

    将 requestLocationUpdates 与 GPS 提供商一起使用并提供适当的接收器。

    requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, myReceiver);
    

    然后在接收器中定义的 onLocationChanged 方法中检查提供者是否为 GPS 以及更新时间。

    希望这会有所帮助。

    【讨论】:

    • 检查更新时间是否是最近的,这应该会给你正确的 GPS 坐标。
    • onLocationChanged 究竟什么时候被解雇?比如一个人已经得到了一个初始坐标,突然移动到另一个地方,是在卫星获取到最新坐标之前还是之后发射?
    • onLocationChanged 根据 requestLocationUpdates 方法的 minTime(第二个参数)和 minDistance(第三个参数)被触发。但是,由于我们将 but 设为 0,它将保持 GPS 运行并中继它获得的所有位置信息。因此,当您移动时,如果手机在卫星的视线范围内,您将不断获得位置更新。
    • 您还可以使用准确度字段(小于 10m),以防您需要更准确的信息来清除在 GPS 仍在尝试获得最准确的定位时收到的所有数据。
    • 但是我怎么知道它已经检索到了那个特定区域的坐标呢?我认为我应该不断触发 requestLocationUpdate 以查看它是否已经收到新坐标,尽管我认为使用 while 循环将是一件愚蠢的事情。
    【解决方案2】:

    Thisthis 结合使用可能会有所帮助

    【讨论】:

    • 我应该如何实现这个?我正在使用 LocationListener 和 LocationManager atm。
    • 创建一个新的 GpsStatusListener。为 GPS_EVENT_FIRST_FIX 实施 onGpsStatusChanged(),您将知道何时进行了 GPS 定位。当然,如果 GPS 已经启用并在您的应用程序启动之前进行了修复,那么您还需要一些额外的代码来处理这种情况。
    • 获得第一个修复和后续修复的事件是否不同?我希望在收到修复后使用 removeUpdates 以节省电池寿命。
    【解决方案3】:

    有两种方法。这取决于您的用例,哪个更适合您。

    1. 我个人使用LocationManager#requestLocationUpdates。然后调用我的活动中的回调。

    2. 但是,接收最新位置可能需要一段时间。如果需要即时位置,您可以使用getLastKnownLocation 方法。

    【讨论】:

    • 我也在使用 requestLocationUpdate,但是,它不会等待最近的位置,而是返回初始值,即 0.0。
    • @louieansonng requestLocationUpdate 返回 0, 0 可能是特定于您的手机型号的错误,或者您使用的是模拟器?
    • 我目前正在使用 LG Optimus p500 作为测试设备
    猜你喜欢
    • 2018-09-25
    • 2011-02-10
    • 2013-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-29
    • 1970-01-01
    • 2017-06-26
    相关资源
    最近更新 更多