【发布时间】:2011-07-11 13:07:42
【问题描述】:
我知道 BroadcastReceiver 会监视文本、电话事件等...但是您可以将 LocationServices 作为基于位置的服务和事件运行吗?
例如,您在某个 GPS 点附近,手机会通知您。
【问题讨论】:
标签: android locationlistener android-location
我知道 BroadcastReceiver 会监视文本、电话事件等...但是您可以将 LocationServices 作为基于位置的服务和事件运行吗?
例如,您在某个 GPS 点附近,手机会通知您。
【问题讨论】:
标签: android locationlistener android-location
我认为您正在寻找的是这样的东西。有一个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 参数大大降低位置更新的频率,以允许位置服务停止。此功能还应附加到用户控制的首选项,以便他们可以启用/禁用您的应用在后台跟踪位置。
希望有帮助!
【讨论】:
这个问题已经超过 2 年了,但现在有一种非常简单且省电的方法来做到这一点。这个概念被称为地理围栏。您可以在下面更详细地了解它:
http://developer.android.com/training/location/geofencing.html
【讨论】: