繁体   English   中英

BroadcastReceiver用于定位

[英]BroadcastReceiver for location

我知道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);

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

最后的说明:

因为听起来您正在尝试在应用不在前台时实施定期位置更新,请记住这一点。 除非您希望自己的应用品牌成为电池杀手,否则请务必谨慎实施此功能。

您需要使用较大的minTime或minDistance参数来大幅减少频率上升位置更新,以允许位置服务休息。 此功能还应附加到用户控制的首选项,以便他们可以启用/禁用您的应用在后台跟踪位置。

希望有帮助!

这个问题已经超过2年了,但现在已经非常容易且电池效率很高。 这个概念叫做Geofences 您可以在下面更详细地了解它:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM