Android 基于位置的服务

Posted

技术标签:

【中文标题】Android 基于位置的服务【英文标题】:Android Location based services 【发布时间】:2012-09-20 13:23:36 【问题描述】:

我是初学者。我想开发一个可以生成基于位置的通知的应用程序。在 android 开发者网站上,我发现为了保持电池寿命和数据交换之间的平衡,应该考虑

    新更新频率 您侦听位置更新的窗口。

我知道可以通过调用 requestLocationUpdates() 来控制频率。我的问题是如何控制监听更新的窗口?这是否意味着一旦我从 LocationListener 类的 onLocationChanged() 方法获取位置更新,我应该停止使用 removeUpdates() 侦听更新??

谢谢

【问题讨论】:

我会想出一个算法来根据更新之间的时间、位置的粒度和与先前位置的距离来进行位置更新。 【参考方案1】:

GPS 设备只有在您注册 requestLocationUpdates() 时才开始工作(并消耗电力)。

理论上,如果更新不是很频繁,GPS 可以在更新之间关闭。例如,假设您每 5 分钟请求一次更新,那么 GPS 可以关闭 4 分钟 30 秒左右。并及时开启以获取下一个位置。如果您将新位置请求设置为每 5 秒一次,则 GPS 不会在更新之间关闭。

我有一个应用程序可以让 GPS 全时保持清醒,并在数据库中记录位置。此应用程序还可以显示地图并绘制记录的轨迹。我的经验是,绘制实时变化轨迹的地图所使用的功率远高于GPS所使用的功率。

祝你好运

【讨论】:

谢谢。既然你已经有一个使用 GPS 的应用程序,我想问你,使用服务获取更新是更好的方法吗?? 这取决于您的应用程序要求。在我的情况下,我希望让用户开始录制,然后退出应用程序做其他事情,同时录制继续,这意味着让它作为服务运行。如果您可以在用户离开应用程序时停止请求而不影响功能,那么在活动中请求更新会更容易。【参考方案2】:

我认为只有在不再需要新位置时才应该停止收听更新。如果您只需要一个新位置,最好立即停止收听。为了获得更多位置(随着用户移动),建议在 onResume 中开始收听位置更新,并在 onPause 中停止收听。这意味着您的 onLocationChanged 只有在您的活动在所有其他活动面前(可见)时才会被调用。

总之,管理您需要的窗口的 Activity 应该具有上述指定的这些调用。

【讨论】:

不客气!例如,我的应用程序在 onStart 中请求位置更新,并在 onStop(主要活动)中停止请求它们,因为即使其他活动位于活动堆栈顶部,我也需要获取新位置(我只是确保我忽略removeUpdates 当新的活动仍然是我的)。祝你好运!

以上是关于Android 基于位置的服务的主要内容,如果未能解决你的问题,请参考以下文章

Android基础知识——基于位置的服务

Android特色——基于位置的服务

《第一行代码》Android特色开发,基于位置服务,出现的问题

从 Android 后台服务问题获取当前位置

谷歌地图包含Android上的位置

android 版百度地图如何通过定位功能获得当前的位置所在的城市?