Не удается получить текущее местоположение GPS при открытии приложения с отключенным GPS - PullRequest
0 голосов
/ 05 января 2019

У меня есть приложение для просмотра веб-приложений Android, которое использует текущее местоположение карты Google для получения местоположения пользователя. Когда пользователь нажимает на значок, который я вызываю для доступа к GPS, вызывается встроенная функция, проблема заключается в том, что при открытии приложения с автономным GPS, а затем нажмите на иконку, которую он попросит на GPS, и когда нажмите ОК, ничего не произойдет, даже нажмите на иконку еще раз, но ничего не произойдет, если закрыть приложение и открыть снова, тогда это будет работать, пожалуйста, помогите, это действительно заставило меня сойти с ума .. .

public void location_request()

{
    final LocationRequest locationRequest = LocationRequest.create();
    locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    locationRequest.setInterval(30 * 1000);
    locationRequest.setFastestInterval(5 * 1000);
    LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
            .addLocationRequest(locationRequest);
    builder.setAlwaysShow(true);
    GoogleApiClient mGoogleApiClient = new GoogleApiClient.Builder(MainActivity.this)
            .addApi(LocationServices.API)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this).build();
    mGoogleApiClient.connect();
    PendingResult<LocationSettingsResult> result =
            LocationServices.SettingsApi.checkLocationSettings(mGoogleApiClient, builder.build());
    result.setResultCallback(new ResultCallback<LocationSettingsResult>() {
        @Override
        public void onResult(LocationSettingsResult result) {
            final Status status = result.getStatus();
            final LocationSettingsStates state = result.getLocationSettingsStates();
            switch (status.getStatusCode()) {
                case LocationSettingsStatusCodes.SUCCESS:
                   //The client can initialize location
                    break;
                case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                    // Location settings are not satisfied.
                    try {

                        status.startResolutionForResult(MainActivity.this, REQUEST_CHECK_SETTINGS);

                    } catch (IntentSender.SendIntentException e) {
                        // Ignore the error.
                    }
                    break;
                case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
                    break;
            }
        }
    });
}

1 Ответ

0 голосов
/ 05 января 2019

Используйте этот код, чтобы включить GPS и убедиться, что разрешение на местоположение дано. Изначально, когда GPS отключен, onFailureListener вызовет и отобразит всплывающее диалоговое окно включения GPS, но после нажатия ok он не будет вызывать onSuccessListener, поэтому вам нужно сделать текущий запрос местоположения из onActivityResult, но если GPS включен перед входом в приложение, то onSuccessListener будет запускаться, и вы можете запросить для текущего местоположения оттуда.

LocationRequest mLocationRequest = new LocationRequest();
            mLocationRequest.setInterval(10000);
            mLocationRequest.setFastestInterval(5000);
            mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

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

            SettingsClient client = LocationServices.getSettingsClient(HomeActivity.this);
            Task<LocationSettingsResponse> task = client.checkLocationSettings(builder.build());

            task.addOnSuccessListener(HomeActivity.this, locationSettingsResponse -> {
                // Make your current location request here

            });

            task.addOnFailureListener(HomeActivity.this, e -> {
                if (e instanceof ResolvableApiException) {
                    // Location settings are not satisfied, but this can be fixed
                    // by showing the user a dialog.
                    try {
                        // Show the dialog by calling startResolutionForResult(),
                        // and check the result in onActivityResult().
                        ResolvableApiException resolvable = (ResolvableApiException) e;
                        resolvable.startResolutionForResult(HomeActivity.this,
                                REQUEST_CHECK_SETTINGS);
                    } catch (IntentSender.SendIntentException sendEx) {
                        // Ignore the error.
                    }
                }
            });


    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (resultCode == RESULT_OK && requestCode == REQUEST_CHECK_SETTINGS) {
            // Make your current location request here
        }
    }

Ссылка: https://developer.android.com/training/location/change-location-settings

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...