Разрешения для проверки Android

#android #permissions

#Android #разрешения

Вопрос:

У меня есть сомнения с новой системой проверки разрешений, потому что я работаю с версиями Android от 5.0.3 до 7.X (API-23 и выше), и я не понимаю, как работает система проверки разрешений. manager.openCamera для этого нужен метод проверки разрешений, я знаю. Прежде всего, я работаю в классе (не activity), и в «этом» мне нужно получить контекст, в котором я нахожусь, но я не могу использовать get context, потому что это для api 24… Итак, для чего мне нужно заменить это «это», и мне нужно сделать что-то еще тогда? Спасибо вам за все.

 if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
    // TODO: Consider calling
    //    ActivityCompat#requestPermissions
    // here to request the missing permissions, and then overriding
    //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
    //                                          int[] grantResults)
    // to handle the case where the user grants the permission. See the documentation
    // for ActivityCompat#requestPermissions for more details.
    return;
}
manager.openCamera(cameraId, mStateCallback, backgroundHandler);
  

Ответ №1:

Вы можете передать контекст в конструкторе этого класса, сохранить его в переменной-члене, а затем заменить «this» на эту переменную-член (или вы могли бы просто передать его в качестве аргумента методу, в котором вы запускаете код).

Но для запроса разрешений вам понадобятся и activity, поэтому вместо «просто» передачи контекста вы могли бы передать activity, и таким образом вы можете использовать activity для вызова как checkSelfPermission, так и requestPermissions.

Теперь проблема в том, как вы будете обрабатывать ответ пользователя? Вы должны реализовать метод onRequestPermissionsResult внутри этого же действия. Если какое-либо действие должно быть в состоянии справиться с этим, создайте класс BaseActivity (который наследуется от Activity) и переопределите этот метод внутри BaseActivity, все остальные действия должны наследовать от этого BaseActivity.