Я тестирую отказ в доступе к приложению, и я вижу, что при запросе состояния разрешения он возвращает предоставленные вместо отказа.
Я проверяю состояние разрешений в соответствии с Google Guide:
if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.CAMERA)
!= PackageManager.PERMISSION_GRANTED) {
// Should we show an explanation?
if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(),
Manifest.permission.CAMERA)) {
// Show an expanation to the user *asynchronously* -- don't block
// this thread waiting for the user response! After the user
// sees the explanation, try again to request the permission.
} else {
// No explanation needed, we can request the permission.
ActivityCompat.requestPermissions(getActivity(),
new String[]{Manifest.permission.CAMERA},
PERMISSIONS_REQUEST_TAKE_PHOTO);
// MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
// app-defined int constant. The callback method gets the
// result of the request.
}
}
Вот что он на самом деле возвращает в первом, если:
Состояние "0" означает PackageManager.PERMISSION_GRANTED
Это порождает ошибку java.lang.RuntimeException: Fail to connect to camera service
.
DEVICE IS A NEXUS 5X
С уважением.
Quotig @CommonsWare:
Вы должны получить PERMISSION_GRANTED для любого targetSdkVersion ниже 23, даже если пользователь отключил эту группу разрешений в настройках. Я предлагаю вам полностью удалить приложение, установите для targetSdkVersion значение 23 и повторите попытку.
Это было решение.
(Этот ответ будет помечен правильно, пока комментатор не отправит ответ)