getFusedLocationProviderClient не активирует мой GPS, если служба определения местоположения отключена - PullRequest
0 голосов
/ 26 мая 2018

Я использую сетевой код для определения местоположения GPS:

    mLocationRequest = new LocationRequest();
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    mLocationRequest.setInterval(UPDATE_INTERVAL_IN_MILLISECONDS);
    mLocationRequest.setFastestInterval(FASTEST_UPDATE_INTERVAL_IN_MILLISECONDS);


    LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder();
    builder.addLocationRequest(mLocationRequest);
    LocationSettingsRequest locationSettingsRequest = builder.build();

    SettingsClient settingsClient = LocationServices.getSettingsClient(this);
    settingsClient.checkLocationSettings(locationSettingsRequest);

    getFusedLocationProviderClient(this).requestLocationUpdates(mLocationRequest, new LocationCallback() {
                @Override
                public void onLocationResult(LocationResult locationResult) {
                    onLocationChanged(locationResult.getLastLocation());
                }
            },
            Looper.myLooper());

Все работает хорошо, за исключением того, что если на моем устройстве отключена служба определения местоположения, getFusedLocationProviderClient откроет диалоговое окно и скажет, что устройству нужен Wi-Fi, сотовая сеть и датчики.Я согласен, и приложение активирует службу определения местоположения, но с настройками низкого энергопотребления (режим экономии заряда батареи).

Что я делаю не так?Похоже, датчик GPS не активирован, потому что мое местоположение отображается далеко от моего реального местоположения.Если я делаю ручные настройки, все они работают как шарм.

Ответы [ 2 ]

0 голосов
/ 26 мая 2018

Исправили мою проблему!

Task<LocationSettingsResponse> result;

............

getFusedLocationProviderClient(this).requestLocationUpdates(mLocationRequest, new LocationCallback() {
            @Override
            public void onLocationResult(LocationResult locationResult) {
                onLocationChanged(locationResult.getLastLocation());
            }
        },
        Looper.myLooper());

это также активирует GPS:

result = LocationServices.getSettingsClient(this).checkLocationSettings(locationSettingsRequest);
    result.addOnCompleteListener(new OnCompleteListener<LocationSettingsResponse>() {
        @Override
        public void onComplete(@NonNull Task<LocationSettingsResponse> task) {
            try {
                LocationSettingsResponse response = task.getResult(ApiException.class);
            } catch (ApiException exception) {
                switch (exception.getStatusCode()) {
                    case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                        try {
                            ResolvableApiException resolvable = (ResolvableApiException) exception;
                            resolvable.startResolutionForResult(
                                    NewMainActivity.this,
                                    REQUEST_CHECK_SETTINGS);
                        } catch (IntentSender.SendIntentException e) {
                            //
                        } catch (ClassCastException e) {
                            //
                        }
                        break;
                    case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
                        break;
                }
            }
        }
    });
0 голосов
/ 26 мая 2018

Я бы предложил изменить приоритет.При низком заряде батареи приоритет не должен быть высоким.Вы работаете на Android Oreo?Эта функциональность должна попасть в планировщик заданий. В Oreo (8.0.0+) (API 26+), Как получить обновление служб определения местоположения, когда приложение находится в фоновом режиме или убить

...