我知道 BroadcastReceiver 会监视文本、电话事件等...但是您可以将 LocationServices 作为基于位置的服务和事件运行吗?
例如,您在某个 GPS 点附近,手机会通知您。
我知道 BroadcastReceiver 会监视文本、电话事件等...但是您可以将 LocationServices 作为基于位置的服务和事件运行吗?
例如,您在某个 GPS 点附近,手机会通知您。
我认为您正在寻找的是这样的东西。有一个版本LocationManager.requestLocationUpdates()
将 aPendingIntent
作为参数,并且此 Intent 可用于触发 a 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
使用相同的 Intent 操作注册您的操作,它将接收位置更新以进行处理。而且,当然,请保留它PendingIntent
,因为您需要manager.removeUpdates(launchIntent)
在某个时候打电话!
最后注:
因为听起来您正在尝试在您的应用不在前台时执行定期位置更新,所以请记住这一点。除非您希望您的应用程序被标记为电池杀手,否则在实现此功能时要格外小心。
您将希望使用较大的 minTime 或 minDistance 参数大大降低位置更新的频率,以允许位置服务停止。此功能还应附加到用户控制的首选项,以便他们可以启用/禁用您的应用在后台跟踪位置。
希望有帮助!
这个问题已经超过 2 年了,但现在有一种非常简单且电池效率高的方法来做到这一点。这个概念被称为地理围栏。您可以在下面更详细地了解它:
http://developer.android.com/training/location/geofencing.html