BroadcastReceiver的位置

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

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

我想你正在寻找的是这样的。 有一个版本的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); 

然后你只需要注册你的BroadcastReceiver有相同的意图行动,它会收到位置更新处理。 而且,当然,请保留PendingIntent ,因为您需要在某个时刻调用manager.removeUpdates(launchIntent)

最后注意:

因为听起来您正试图在您的应用程序不在前台时执行常规位置更新,请记住这一点。 除非您希望您的应用被称为电池杀手,否则请务必谨慎实施此function。

您将希望通过较大的minTime或minDistance参数大大减less位置更新的频率,以便位置服务得以rest。 此function还应附加到用户控制的首选项,以便他们可以启用/禁用您的应用程序在后台跟踪位置。

希望帮助!

这个问题已经超过2年了,但是现在有这样一个非常简单和节省电池的方法。 这个概念被称为Geofences 。 您可以在下面更详细地了解它:

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