为什么android FusedLocationApi会在几毫秒的时间内广播相同的位置?

时间:2017-05-18 04:04:15

标签: android location fusedlocationproviderapi

我有一个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。

提前致谢。

1 个答案:

答案 0 :(得分:0)

您好Kanika可以在传递您的位置请求对象之前设置最小位移,这将帮助您仅在有一定的最小位移时获取更新。您可以使用以下方法执行此操作。

setSmallestDisplacement(float smallestDisplacementMeters)

也是FYI api参考链接,https://developers.google.com/android/reference/com/google/android/gms/location/LocationRequest