26

我正在使用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);
}

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

由于这是实时产品的一部分,因此很难在每台设备上进行调试。即使我尝试重新启动手机,但它不起作用。用户尝试了 Ola 等其他应用程序,并且位置正在出现。

位置许可也已被授予

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

4

4 回答 4

7

您只需要请求以下权限:

Manifest.permission.ACCESS_FINE_LOCATION

我有同样的问题,我正在请求这两个权限:

Manifest.permission.ACCESS_COARSE_LOCATION

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

于 2020-04-16T02:27:50.533 回答
4

我也面临同样的问题。在我的情况下,设备定位方法/精度设置为Phone only而不是High accuracyBattery Saving。将设置更改为高精度并在 上接收回调locationCallback

于 2019-01-15T09:38:15.307 回答
3

在装有 Android Pie 的手机上也有同样的问题。已授予位置权限(通过转到应用程序设置手动)并且位置处于高精度状态,但未获得位置更新。在我添加代码以检查在请求位置更新之前是否授予位置权限后得到修复。

if (ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.ACCESS_FINE_LOCATION)
        != PackageManager.PERMISSION_GRANTED) {
    // Permission is not granted. Request for permission
}
于 2019-12-16T10:45:22.523 回答
2

当位置关闭时,这发生在我身上。不是应用程序的位置权限,而是 android 设备本身的位置。要求用户激活 GPS 为我修复了它:

protected void onCreate(Bundle savedInstanceState) {
    //...
    final LocationManager manager = (LocationManager) getSystemService( Context.LOCATION_SERVICE );

    if ( !manager.isProviderEnabled( LocationManager.GPS_PROVIDER ) ) {
        buildAlertMessageNoGps();
    }
}

private void buildAlertMessageNoGps() {
    final AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage("Your GPS seems to be disabled, do you want to enable it?")
            .setCancelable(false)
            .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                public void onClick(@SuppressWarnings("unused") final DialogInterface dialog, @SuppressWarnings("unused") final int id) {
                    startActivity(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS));
                }
            })
            .setNegativeButton("No", new DialogInterface.OnClickListener() {
                public void onClick(final DialogInterface dialog, @SuppressWarnings("unused") final int id) {
                    dialog.cancel();
                }
            });
    final AlertDialog alert = builder.create();
    alert.show();
}

这里解决。

您可能还需要关闭 GPS,然后再次打开以触发对话框以提高定位精度:

提高定位精度的对话提示

于 2020-03-18T16:48:22.007 回答