我有一个Android应用程序,我使用FusedLocationApi来获取用户的位置更新。
以下是该场景: 1.我有一个单独的Watcher类,我在其中定义了即使应用程序处于后台时获取位置的待定意图。以下是代码:
private PendingIntent pendingIntent;
private Watcher() {
Intent locationIntent = new Intent(context, Receiver.class);
pendingIntent = PendingIntent.getBroadcast(
context, 007 /*requestcode*/, locationIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
}
然后,当我成功连接位置服务时,我请求位置更新:
LocationServices.FusedLocationApi.
requestLocationUpdates(googleApiClient, locationRequest, pendingIntent);
现在,只要扩展WakefulBroadcastReceiver的Receiver类获得位置更新,它就会启动Service.class。服务类扩展了IntentService。 以下是代码:
@Override
synchronized protected void onHandleIntent(final Intent intent) {
if(LocationResult.hasResult(intent)) {
LocationResult locationResult= LocationResult.extractResult(intent);
Location location = locationResult.getLastLocation();
printLocation(location);
}
所以我的问题是,鉴于上述步骤,为什么onHandleIntent会在5毫秒的时间内被LocationReceiver多次唤醒。 lat,lng和精度都是一样的。我已经定义了
setFastestInterval(5 seconds); and
setInterval(1 minute);
位置准确度也是BALANCED_POWER_ACCURACY;
在我的应用中,
LocationServices.FusedLocationApi.
requestLocationUpdates(googleApiClient, locationRequest, pendingIntent);
多次调用。但根据文档:“任何以前注册的具有相同PendingIntent(由equals(Object)定义)的请求将被此请求替换。”我使用相同的pendingIntent对象来调用requestLocationUpdates。
提前致谢。
答案 0 :(得分:0)
您好Kanika可以在传递您的位置请求对象之前设置最小位移,这将帮助您仅在有一定的最小位移时获取更新。您可以使用以下方法执行此操作。
setSmallestDisplacement(float smallestDisplacementMeters)
也是FYI api参考链接,https://developers.google.com/android/reference/com/google/android/gms/location/LocationRequest