Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么android FusedLocationApi会在几毫秒内广播相同的位置?_Android_Location_Fusedlocationproviderapi - Fatal编程技术网

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

为什么android FusedLocationApi会在几毫秒内广播相同的位置?,android,location,fusedlocationproviderapi,Android,Location,Fusedlocationproviderapi,我有一个android应用程序,其中我使用FusedLocationApi获取用户的位置更新 以下是场景: 1.我有一个singleton Watcher类,在这个类中,我定义了获取位置的挂起意图,即使应用程序位于后台。代码如下: private PendingIntent pendingIntent; private Watcher() { Intent locationIntent = new Intent(context, Receiver.class);

我有一个android应用程序,其中我使用FusedLocationApi获取用户的位置更新

以下是场景: 1.我有一个singleton Watcher类,在这个类中,我定义了获取位置的挂起意图,即使应用程序位于后台。代码如下:

    private PendingIntent pendingIntent;
    private Watcher() {
      Intent locationIntent = new Intent(context, Receiver.class);
      pendingIntent = PendingIntent.getBroadcast(
                    context, 007 /*requestcode*/, locationIntent,
      PendingIntent.FLAG_UPDATE_CURRENT);
   }
@Override
synchronized protected void onHandleIntent(final Intent intent) {
 if(LocationResult.hasResult(intent)) {
   LocationResult locationResult= LocationResult.extractResult(intent);
   Location location = locationResult.getLastLocation();
   printLocation(location);
 }
然后,当我成功连接位置服务后,我请求位置更新:

 LocationServices.FusedLocationApi.
                    requestLocationUpdates(googleApiClient, locationRequest, pendingIntent);
现在,只要扩展WakefulBroadcastReceiver的Receiver类获得位置更新,它就会启动Service.class。服务类扩展了IntentService。 代码如下:

    private PendingIntent pendingIntent;
    private Watcher() {
      Intent locationIntent = new Intent(context, Receiver.class);
      pendingIntent = PendingIntent.getBroadcast(
                    context, 007 /*requestcode*/, locationIntent,
      PendingIntent.FLAG_UPDATE_CURRENT);
   }
@Override
synchronized protected void onHandleIntent(final Intent intent) {
 if(LocationResult.hasResult(intent)) {
   LocationResult locationResult= LocationResult.extractResult(intent);
   Location location = locationResult.getLastLocation();
   printLocation(location);
 }
所以我的问题是,考虑到上述步骤,为什么OnHandleContent会在5毫秒内被LocationReceiver多次唤醒。lat、lng和精度均相同。我已经定义了

setFastestInterval(5 seconds); and
setInterval(1 minute);
而且定位精度是平衡的(功率)(精度),

在我的应用程序中

LocationServices.FusedLocationApi.
                    requestLocationUpdates(googleApiClient, locationRequest, pendingIntent);
你会接到多次电话。但根据文档:“任何以前注册的具有相同PendingEvent(由equals(Object)定义)的请求都将被此请求替换。”我正在使用相同的PendingEvent对象调用RequestLocationUpdate


提前感谢。

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

setSmallestDisplacement(float smallestDisplacementMeters)

另外,供参考的api参考链接,

Hi Kanika您可以在传递位置请求对象之前设置最小位移。这将帮助您仅在具有特定最小位移时获得更新。您可以使用下面的方法来执行相同的操作

setSmallestDisplacement(float smallestDisplacementMeters)

另请参阅api参考链接,

Hey-Alok,感谢您的回复。我试过了,几毫秒后仍然得到了更新:以下是日志:1)05-1721:33:04.6542303-3697密钥位置更改为:37.37984540,-122.06425810;2) 05-17 21:33:07.474 2303-3841/钥匙位置更改为:37.37984000,-122.06452450;3) 05-17 21:33:15.794 2303-3866/键位置更改为:37.37984000,-122.06452450尝试为位移设置更大的值,例如100或1000,并查看是否仍然存在相同的问题?尝试过,仍然相同。你认为吊坠更换得不够快吗。因为我确实在几毫秒内多次调用requestLocationUpdates()?不确定,但如果您觉得有必要,请共享更多的代码,这可能会有所帮助。我认为您可以删除setFastTestInterval(长毫秒)。很可能是这导致了问题。嗨,好的,谢谢您的回复。我试过了,几毫秒后仍然得到了更新:以下是日志:1)05-1721:33:04.6542303-3697密钥位置更改为:37.37984540,-122.06425810;2) 05-17 21:33:07.474 2303-3841/钥匙位置更改为:37.37984000,-122.06452450;3) 05-17 21:33:15.794 2303-3866/键位置更改为:37.37984000,-122.06452450尝试为位移设置更大的值,例如100或1000,并查看是否仍然存在相同的问题?尝试过,仍然相同。你认为吊坠更换得不够快吗。因为我确实在几毫秒内多次调用requestLocationUpdates()?不确定,但如果您觉得,请共享更多的代码,这可能会有所帮助。我认为您可以删除setFastTestInterval(长毫秒)。很可能是这导致了问题。