Android FusedLocationClient不要求新样本



如何强制fusedlocation -providerclient明确要求一个新的位置?

几个月前,我升级了FusedLocationProviderClient。从那以后,要求采样新位置不会提供新的位置。

// Request a single location. 
//   Note: FusedLocationProviderClient.lastLocation
//   is no better
val request = LocationRequest()
                .setNumUpdates(1)
                .setExpirationDuration(0)
                .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
                .setMaxWaitTime(10*DateUtils.SECOND_IN_MILLIS)
                .setFastestInterval(0)
        fusedLocationClient?.requestLocationUpdates(request, object:LocationCallback() {
            override fun onLocationResult(result: LocationResult?) {
                super.onLocationResult(result)
                Log.v(LOG_TAG, "Single fused location request yields ${result?.lastLocation} ")
                callOnDone(result?.lastLocation)
            }
        }, Looper.getMainLooper())

当我获得请求位置时,甚至相隔几秒

我将模拟器与曲目的GPX录音一起使用,以便GPS读数始终可用。

但是,当我尝试从位置管理器请求位置(并且对结果无能为力(时,它的效果要好得多。

(context?.getSystemService(Context.LOCATION_SERVICE) as? LocationManager)?
   .requestSingleUpdate(
       LocationManager.GPS_PROVIDER, 
       object :LocationListener{...dummy, just log the callback...},
       Looper.getMainLooper())

结论:即使在高优先级模式下,FusedLocationProviderClient也不会从OS请求新位置。但是,如果可以从外部使用,它确实可以接受新的位置。

问题是:如何 force fusedlocationProviderClient在我现在和现在需要一个新位置时主动请求新位置?

这个问题很老,但是我带着类似的问题来到这里,在过去的几个月中,我看到大约有65个有65个。以下代码有效。它提供一个位置到locationResult.getLastLocation((到OnLocationResult回调:

   public void getNewLocation() {
  LocationRequest locationRequest = new LocationRequest()
        .setNumUpdates(1)
        .setFastestInterval(0)
        .setSmallestDisplacement(0)
        .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
  if (ActivityCompat.checkSelfPermission(context,
        Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
        && ActivityCompat.checkSelfPermission(context,
        Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
     return;
  }
  fusedLocationProviderClient.requestLocationUpdates(locationRequest,
              new com.google.android.gms.location.LocationCallback() {
                 @Override
                 public void onLocationResult(LocationResult locationResult) {
                    locationListener.onLocationChanged(locationResult.getLastLocation());
                 }
              },
        Looper.getMainLooper());

}

这里的区别在于我已经删除了SetMaxWaittime和setExpirationDuration。显然他们打断了电话。如果我解释正确正确地进行了setExpiration duration,这意味着此请求应在x毫里。将其设置为零表示请求立即到期,因此当位置确实可用时,请求已经过期。因此,没有回到onLocation changed。

我希望这对某人有帮助。

最新更新