我正在研究app,它必须获得经度和经度。在我的情况下requestLocationUpdates (String provider, long minTime, float minDistance, LocationListener listener)
不可选。为什么?因为我必须在用户做一些需要位置的事情时得到位置(让我们说他点击按钮)。当按钮被击中时,我需要准确定位时间。在requestLocationUpdates
,我们可以设置minTime - 如果我设置这个让我们说在30000处“按钮命中时间”的位置将不会像我想要的那样好。同样的原因mindistance也没有我想要的那么好。如果我理解函数requestLocationUpdates
正确 - 当minTime和minDistance设置为0时,位置一直在更新。如果我错了,请纠正我。应用程序适用于我正在工作的公司,该应用程序将在白天和晚上使用。因此,如果应用程序将始终检查位置更新,电池通常是空的。这就是我当时需要位置的原因,那个按钮被击中了。我找到了requestSingleUpdate功能。但我不能在eclipse中使用它=(就像它不存在一样
还有其他方法可以做到这一点,还是我错过了什么?
答案 0 :(得分:2)
API级别9的新requestSingleLocation方法。如果您定位的是较早的API级别,则无法使用此方法。
获取位置信息的一个问题是获取修复可能需要一些时间。这是GPS位置提供商比网络提供商更多的问题。如果您只使用网络提供商,那么当用户点击按钮时获取位置信息可能没有太大的延迟(我说这不知道您的应用对数据的作用,或者您的用户体验类型正试图提供)。
您可以尝试的其他内容是PASSIVE_PROVIDER。它允许您获取从其他应用程序请求的位置更新。这意味着您必须请求ACCESS_FINE_LOCATION权限。您可能还需要保留正在运行的内容以接收位置更新(可能是服务或BroadCastReceiver)。 BroadcastReceiver方法不应该使用那么多额外的电池寿命,因为它仅在收到Intent时与PASSIVE_PROVIDER一起运行,仅在其他应用程序请求它们时才获取位置。
PASSIVE_PROVIDER的另一个关键点是你最终应该调用removeUpdates。何时何地调用此操作取决于您的应用程序的结构以及如何处理退出应用程序的用户。
答案 1 :(得分:1)
您可以使用getLastKnownLocation方法,但它可能已过时。 requestLocationUpdates是异步的,因为gps需要“预热”才能找到新位置。 requestSingleUpdate方法从api级别9开始可用,但您可以使用requestLocationUpdates实现它,并在第一次回调到LocationListener后禁用更新。