【问题标题】:One LocationListener in whole application整个应用程序中的一个 LocationListener
【发布时间】:2012-08-02 09:52:00
【问题描述】:

我需要在整个应用程序中实现一个 LocationListener。

我知道我可以将服务与 LocationListener 一起使用,但问题是我必须在位置更改时使用一些通知程序。当我想要随时获得最后一个位置时,这还不够,因为当它发生变化时,我需要立即在所有活动中的当前位置。

所以在伪代码中我需要这样的东西:

myLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, new LocationListener() {

public void onLocationChanged(Location location) {
                notifyAllActivities(location);
            }
};

在每个活动中:

void onNotify(Location location) { //... }

【问题讨论】:

  • 接受一个对你有用的答案,这样其他人可能会觉得它有用。

标签: android gps location locationmanager locationlistener


【解决方案1】:

您是否尝试过使用CommonsWare's LocationPoller library

众所周知,它非常强大,我个人在我的一个基于位置的应用程序中使用了它。

它的优点之一是它与使用 Service 的兼容性;即使应用程序在后台,这也是您获取位置更新所需要的。它获取WakeLock 来唤醒手机,获取位置,然后优雅地释放它。

【讨论】:

  • 我会检查它,因为我还不知道这个库。
  • 设置简单。里面也附了一个demo。祝你好运!
【解决方案2】:

让服务调用 sendBroadcast() 来广播 Intent。将经度/纬度作为附加信息添加到该 Intent 中。在每个需要位置的活动中,为意图注册一个广播接收器,并从接收器的 onReceive() 中的意图的附加内容中获取 lng/lat

【讨论】:

  • 所以我必须在这个服务类中创建我的服务意图,在那里放一些额外的东西,然后从这个服务中发送广播()?然后我需要扩展 BroadcastReceriver 的内部类,并且在每次接收时只更改我在 Intent 参数中获得的位置?我理解正确吗?
  • 只要在你的activity中声明一个新的BroadcastReceiver(),在它的onReceive中获取额外的。确保在 onResume() 中注册它并在 onPause() 中取消注册。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-14
  • 2012-04-24
  • 2012-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多