Как интегрировать Google Location API с системой разрешений времени выполнения Android Marshmallow?

Я пытаюсь получить местоположение пользователя в моем Activity используя Google Location API. У меня есть кнопка, по которой, если пользователь нажимает, местоположение пользователя должно быть получено и отправлено в бэкэнд приложения. Согласно документации Google,

LocationServices.FusedLocationApi
                        .getLastLocation(apiClient)

метод должен быть вызван в onConnected метод. Тем не менее, метод выдает ошибку, если я не проверяю разрешение, предоставленное пользователем.

Моя проблема, я прошу разрешения в onClick метод моей кнопки.

Я пытался положить

LocationServices.FusedLocationApi
                        .getLastLocation(apiClient)

внутри onClick метод, но он возвращает нулевой объект.

Есть ли правильный способ запрашивать разрешение на местоположение у пользователя при нажатии кнопки, а не в onCreate метод деятельности и все еще сможет получить местоположение пользователя?

1 ответ

Решение

Я полагаю, вы звоните:

mGoogleApiClient.connect();

в onStart(), Который называет onConnected() метод, когда начинается деятельность. Вы можете вызвать его по нажатию кнопки после запроса разрешения во время выполнения для Location. Тогда вы сможете getLastLocation() в onConnected() и вы не столкнетесь с ошибкой разрешения.

button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                   if(ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)){
                        mGoogleApiClient.connect();
                    }
                    else{
                        // ask run-time permission
                    }
                }
            }
        });

Надеюсь это поможет.

Другие вопросы по тегам