Android - Расположение с использованием Play Service API - Ошибка настройки клиента в классе обслуживания - PullRequest
0 голосов
/ 12 сентября 2018

Мне нужно получать текущее местоположение пользователя за каждые 30 мин.Поэтому я планировал использовать Play Service API с Диспетчером работ, чтобы сделать это в фоновом режиме (даже если мое приложение закрыто, оно получит местоположение).Все работает нормально, если мое местоположение установлено на ON.Я могу проверить, доступны ли местоположение и разрешения с помощью опции SettingsClient .Но SettingsClient работает, только если я использую его в Activity.В классе Workmanager (Service), когда я пытаюсь использовать SettingsClient, он показывает ошибку, как показано ниже:

enter image description here

Требуется привести его к действию

enter image description here

Если я произнесу его с помощью Activity, это означает, что никаких проблем во время компиляции.enter image description here

Но во время выполнения выдает ошибку типа enter image description here

Пожалуйста, дайте несколько советов, чтобы решить эту проблему.

1 Ответ

0 голосов
/ 12 сентября 2018

У меня есть решение этой проблемы, и я подумал, что могу опубликовать. Может быть, это кому-нибудь поможет.

Я изменил кодировку следующим образом

    LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
                .addLocationRequest(mLocationRequestHighAccuracy)
            .addLocationRequest(mLocationRequestBalancedPowerAccuracy);
        Task<LocationSettingsResponse> result = LocationServices.getSettingsClient(getApplicationContext()).checkLocationSettings(builder.build());

        result.addOnCompleteListener(new OnCompleteListener<LocationSettingsResponse>() {
            @SuppressLint("MissingPermission")
            @Override
            public void onComplete(Task<LocationSettingsResponse> task) {
                try {
                    LocationSettingsResponse response = task.getResult(ApiException.class);
                    // All location settings are satisfied. The client can initialize location
                    // requests here.
                    mFusedLocationClient.requestLocationUpdates(locationRequest, locationCallback, Looper.getMainLooper());

                } catch (ApiException exception) {
                    switch (exception.getStatusCode()) {
                        case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                            // Location settings are not satisfied. But could be fixed by showing the
                            // user a dialog.
                            try {
                                // Cast to a resolvable exception.
                                ResolvableApiException resolvable = (ResolvableApiException) exception;
                                // Show the dialog by calling startResolutionForResult(),
                                // and check the result in onActivityResult().
                             /*   resolvable.startResolutionForResult(
                                        OuterClass.this,
                                        REQUEST_CHECK_SETTINGS);*/
                                sendNotification("Failed", "Turn on Location" );
                            } catch (ClassCastException e) {
                                // Ignore, should be an impossible error.
                            }
                            break;
                        case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
                            // Location settings are not satisfied. However, we have no way to fix the
                            // settings so we won't show the dialog.
                            sendNotification("Failed", "Setting or not avaible" );

                            break;
                    }
                }
            }
        });

Ссылка: https://developers.google.com/android/reference/com/google/android/gms/location/SettingsClient

...