Как интегрировать 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
}
}
}
});
Надеюсь это поможет.