Я реализовал запрос разрешений в Runtime, но я не уверен, когда могу вызвать метод, который нуждается в разрешениях.Полученные разрешения Обработка событий на уровне API Android> = 23
Невозможно вызвать метод немедленно, потому что пользователю требуется время для нажатия кнопки «Да» в диалоговом окне разрешения.
Будет очень полезно обрабатывать событие onPermissionsObtained, но я не могу найти ничего похожего на него.
Как с этим бороться?
Смотрите мой код, например
private void startBuildInCameraActivity(View v) {
if ((ContextCompat.checkSelfPermission(getActivity(),
Manifest.permission.CAMERA)
!= PackageManager.PERMISSION_GRANTED) ||
(ContextCompat.checkSelfPermission(getActivity(),
Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED)) {
requestPermissions();
//TODO init onPermissionObtained event handler here instead "return"
return;
}
startCamera();
}
Проблема заключается в том Пользователь должен позвонить startBuildInCameraActivity дважды, если он не имеет права. В противном случае startCamera() никогда не будет вызываться.
Вы должны называть 'startCamera()' в вашем методе 'startBuildInCameraActivity()' в случае, если вам нужны разрешения, или в 'onRequestPermissionsResult()', когда предоставляется разрешение, которое происходит асинхронно. Если вы пропустили это, есть хорошая статья [https://developer.android.com/training/permissions/requesting.html) о разрешениях времени выполнения. – Drez