【问题标题】:BroadcastReceiver for location位置的广播接收器
【发布时间】:2011-07-11 13:07:42
【问题描述】:

我知道 BroadcastReceiver 会监视文本、电话事件等...但是您可以将 LocationServices 作为基于位置的服务和事件运行吗?

例如,您在某个 GPS 点附近,手机会通知您。

【问题讨论】:

标签: android locationlistener android-location


【解决方案1】:

我认为您正在寻找的是这样的东西。有一个LocationManager.requestLocationUpdates() 版本将PendingIntent 作为参数,并且此Intent 可用于触发BroadcastReceiver。此代码将注册一个自定义广播,以便在位置更新时触发。

Intent intent = new Intent("UNIQUE_BROADCAST_ACTION_STRING_HERE");
LocationManager manager = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);
long minTime;     //This should probably be fairly long
float minDistance; //This should probably be fairly big
String provider;   //GPS_PROVIDER or NETWORK_PROVIDER

PendingIntent launchIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
manager.requestLocationUpdates(provider, minTime, minDistance, launchIntent);

然后您只需使用相同的 Intent 操作注册您的 BroadcastReceiver,它将接收位置更新以进行处理。当然,请保留 PendingIntent,因为您有时需要致电 manager.removeUpdates(launchIntent)

最后说明:

因为听起来您正在尝试在您的应用不在前台时执行定期位置更新,所以请记住这一点。除非您希望自己的应用被打上“电池杀手”的标签,否则在实现此功能时要格外小心。

您将希望使用较大的 minTime 或 minDistance 参数大大降低位置更新的频率,以允许位置服务停止。此功能还应附加到用户控制的首选项,以便他们可以启用/禁用您的应用在后台跟踪位置。

希望有帮助!

【讨论】:

  • @Wireless-Designs,你是一个宝石,我以为是这样,我还在学习关于机器人的 INTENT,你的回复非常有用 - 感谢您的宝贵时间!跨度>
  • 没问题。如果此答案最终解决了您的问题,请随时接受。干杯!
  • 我会的,我想先测试一下;)
  • 谢谢。我试图通过服务和警报管理器来做到这一点,但没有运气。这正是我想要的。
【解决方案2】:

这个问题已经超过 2 年了,但现在有一种非常简单且省电的方法来做到这一点。这个概念被称为地理围栏。您可以在下面更详细地了解它:

http://developer.android.com/training/location/geofencing.html

【讨论】:

  • 那么您认为这将如何运作?为用户的当前位置设置一个地理围栏,比如说半径为 50m,然后在退出事件时,设置一个具有相同半径的新地理围栏,这样就可以跟踪用户的移动?
  • @Pierre:如果您想根据位置变化进行更新,请查看developers.google.com/android/reference/com/google/android/gms/…
  • 谢谢@serv-inc,我已经完全使用过了。为了节省电池电量,我只记录精度低于 40m 的位置,我还添加了一个名为 previous location 的静态变量,如果新位置距离上一个位置超过 40m,我记录它,否则不记录。
猜你喜欢
  • 2011-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-04
  • 2015-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多