API-интерфейс Fused Location Provider получает местоположение от GPS, когда Wi-Fi отключен

Я внедрил API-интерфейс Fused Location Api службы Google Play в свое приложение, чтобы постоянно получать местоположение пользователя. Все работает нормально при включенном вайфае

но когда я выключаю Wi-Fi, он обновляет местоположение пользователя, используя информацию о сотовой связи, поэтому точность составляет более 700 метров.

то, что я хочу, это когда Wi-Fi выключен, а затем получить местоположение пользователя от GPS.

 protected synchronized void buildGoogleApiClient() {
    Log.i(TAG, "Building GoogleApiClient");
    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .addApi(LocationServices.API)
            .build();
    createLocationRequest();
}

protected void createLocationRequest() {
    mLocationRequest = new LocationRequest();


    mLocationRequest.setInterval(UPDATE_INTERVAL_IN_MILLISECONDS);


    mLocationRequest.setFastestInterval(FASTEST_UPDATE_INTERVAL_IN_MILLISECONDS);

    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
}

 @Override
public void onConnected(Bundle connectionHint) {
    Log.i(TAG, "Connected to GoogleApiClient");


    if (mCurrentLocation == null) {
        mCurrentLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
        mLastUpdateTime = DateFormat.getTimeInstance().format(new Date());
        updateUI();
    }

    if (mRequestingLocationUpdates) {
        startLocationUpdates();
    }
}


@Override
public void onLocationChanged(Location location) {
    mCurrentLocation = location;
    mLastUpdateTime = DateFormat.getTimeInstance().format(new Date());
    updateUI();
    Toast.makeText(this, getResources().getString(R.string.location_updated_message),
            Toast.LENGTH_SHORT).show();
}

person madara uchiha    schedule 13.12.2016    source источник
comment
добавьте это в свой mLocationRequest mLocationRequest.setSmallestDisplacement(5);   -  person masoud vali    schedule 13.12.2016
comment
это просто установит 5-метровое смещение для обновления.   -  person madara uchiha    schedule 13.12.2016
comment
это повысит вашу точность, потому что, если местоположение пользователя изменилось более чем на 5 метров, это вызовет обновление местоположения.   -  person masoud vali    schedule 13.12.2016


Ответы (1)


Приложения, использующие службы определения местоположения, должны запрашивать разрешения на определение местоположения. Android предлагает два разрешения на определение местоположения: ACCESS_COARSE_LOCATION и ACCESS_FINE_LOCATION. Выбранное вами разрешение определяет точность местоположения, возвращаемого API.

Другими словами, разрешение, которое вы выбираете, определяет поставщиков, которые будут использоваться для определения местоположения, а затем также влияет на точность, например: ACCESS_FINE_LOCATION -> Gps, Cell, Wi-Fi ACCESS_COARSE_LOCATION -> Только сотовая связь и Wi-Fi.

Точность зависит от провайдера. Но в сочетании с приоритетом LocationRequest.PRIORITY_HIGH_ACCURACY -> ваше приложение, скорее всего, будет использовать GPS для определения вашего местоположения.

person Lạng Hoàng    schedule 13.12.2016