2011-03-09 62 views
13

我知道BroadcastReceiver手表的文本,电话事件等......但你可以运行LocationServices作为基于位置的服务和事件吗?BroadcastReceiver的位置

例如,您接近某个GPS点并且电话会通知您。

+1

在这里你去http://developer.android.com/reference/android/location/LocationListener.html – schwiz 2011-03-09 02:34:39

回答

31

我认为你在找什么是这样的。有一个版本LocationManager.requestLocationUpdates()需要PendingIntent作为参数,并且这个意图可以用来触发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)

最后请注意:

因为它听起来像你想实现定期位置更新,而您的应用程序是不是在前台,这记在心上。除非你希望你的应用被称为电池杀手,否则要非常小心你如何实现这个功能。

您将希望通过大minTime或minDistance参数大大减少位置更新的频率,以允许位置服务休息。此功能还应附加到用户控制的偏好,以便他们可以启用/禁用您的应用程序以跟踪后台中的位置。

希望有助于!

+0

@无线的设计,你是一个宝石,我认为是这样,我仍然在学习有关Droid的INTENT,你的回答非常丰富 - 感谢你的时间先生! – ProNeticas 2011-03-09 05:09:12

+0

没问题。如果这个答案最终解决了你的问题,随时接受它。干杯! – Devunwired 2011-03-09 05:51:13

+0

我会的,我想先测试;) – ProNeticas 2011-03-09 06:50:33