LocationCallback没有被调用

Tec*_*r12 15 android google-location-services fusedlocationproviderclient

我正在使用FusedLocationProviderClient进行位置请求.我保留了一个计时器30秒,以检查在该时间范围内是否收到位置.代码如下:

 public void requestLocationUpdates() {
    initializeLocationRequest();
    mFusedLocationProviderClient.requestLocationUpdates(mLocationRequest, mLocationCallback, null);
    startTimer();
}

 private void initializeLocationRequest() {
    mFusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(mContext);
    mLocationRequest = new LocationRequest();
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    mLocationRequest.setInterval(5000);
    mLocationRequest.setFastestInterval(5000);

    mLocationCallback = new LocationCallback() {

        @Override
        public void onLocationResult(LocationResult locationResult) {
            synchronized (SilentCurrentLocationProvider.this) {
                super.onLocationResult(locationResult);
                Location location = locationResult.getLastLocation();
        }
    };
}

  private void startTimer() {
    if (mTimeout < 1) {
        mTimeout = mDefaultTimeout;
    }
    mTimer = new Timer();   
    mTimer.schedule(new LocationTimer(), mTimeout * 1000);
}
Run Code Online (Sandbox Code Playgroud)

在少数设备上,位置不会到来.在进一步调试时,我发现正在创建LocationRequestLocationCallback,但它没有进入onLocationResult()方法.

由于这是实时产品的一部分,因此很难在每台设备上进行调试.即使我尝试重新启动手机,但它无法正常工作.用户尝试了其他应用程序,如Ola和位置即将到来.

位置权限也已给出.

谁能告诉我这个问题可能的原因?

小智 5

我也面临着同样的问题。在我的例子中,设备定位方法/精度设置为“仅限电话”,而不是“高精度”“电池节省”。将设置更改为高精度并在 上接收回调locationCallback


San*_*llo 5

您只需要请求以下权限:

Manifest.permission.ACCESS_FINE_LOCATION
Run Code Online (Sandbox Code Playgroud)

我遇到了同样的问题,我请求这两个权限:

Manifest.permission.ACCESS_COARSE_LOCATION
Run Code Online (Sandbox Code Playgroud)

当我删除 COARSE LOCATION 时,我几乎立即得到了更新。