Где разместить запрос на разрешение камеры? - PullRequest
0 голосов
/ 19 января 2019

Мне нужно запросить разрешение камера и местоположение в некоторых действиях, которые показывают предварительный просмотр камеры в surfaceview.

Куда мне нужно поместить запросфункция разрешения? onCreate , onResume или onSurfaceCreated ?

А где мне нужно настроить камеру?

Ответы [ 4 ]

0 голосов
/ 19 января 2019

Возможно, наиболее подходящее место для запроса разрешения согласно документации Android -

каждый раз, когда вы выполняете операцию, для которой требуется это разрешение.

Причиной такой рекомендации является то, что начиная с Android 6.0 (уровень API 23), пользователи могут в любое время отозвать разрешения у любого приложения.Таким образом, даже если приложение вчера использовало камеру, оно не может предположить, что оно все еще имеет такое разрешение сегодня.

И, следовательно, приложение должно «проверять» каждый раз разрешение, чтобы выполнить операцию, требующую этого разрешения.

Вы можете настроить Камеру и другие операции «после» разрешения на использование.Камера по пользователю.Вы можете проверить статус, если разрешение предоставлено пользователем, переопределив onRequestPermissionsResult

@Override
public void onRequestPermissionsResult(int requestCode,
        String permissions[], int[] grantResults) {
    switch (requestCode) {
        case MY_PERMISSIONS_REQUEST_CAMERA: {
            // If request is cancelled, the result arrays are empty.
            if (grantResults.length > 0
                && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                // permission was granted, yay! Do the
                // camera-related task you need to do.
            } else {
                // permission denied, boo! Disable the
                // functionality that depends on this permission.
            }
            return;
        }

        // other 'case' lines to check for other
        // permissions this app might request.
    }
}
0 голосов
/ 19 января 2019

См. Запрашиваемое разрешение напрямую соответствует падению приложения, если служба запрашивается, а разрешение недоступно.Я бы предпочел поместить разрешение в onResume, потому что независимо от того, какие действия пользователя происходят, например, сворачивание или диалог разряда батареи появляется в верхней части экрана, нам нужно снова проверить изменения разрешений, чтобы изменения вашей активности могли происходить по каким-либо причинам.Либо камера пытается открыть после запроса сети, либо в какой ситуации.

Поместите разрешение проверки камеры в onResume.

Итак, давайте поговорим о том, как бы вы это сделали.Есть ряд восприятий.Я предпочитаю создать класс Helper , который позволил бы мне узнать статус разрешения с этим кодом

class PermissionsHelper(activity: Activity) {
private val activity: Context

init { this.activity = activity }

fun isCameraPermissionAvailable()=ActivityCompat.checkSelfPermission(activity, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED

}

}

Так что в методе onResume вашей активности проверьте, доступно ли разрешение, иначе запросите разрешение.

 override fun onResume() {
    super.onResume()
    if (!PermissionsHelper(this).isCameraPermissionAvailable()) {
        requestPermissions(arrayOf(Manifest.permission.CAMERA), CAMERA_REQUEST_CODE)
    }
}

Также обратите внимание на два пункта

1) You should write permission for camera in manifeast so that app can request the permission
2) Check if the camera permission is available or not before opening the camera, if not you should again request for the permission

(так же, какв стадии восстановления)

0 голосов
/ 19 января 2019

Вы можете разместить разрешения в любом месте перед использованием сервиса.Технически это не имеет значения.Но запрос разрешения на начальном экране с указанием причины, по которой необходимо разрешение, или запрос его непосредственно перед использованием службы удобен для пользователя.

0 голосов
/ 19 января 2019

Прежде всего, определите разрешение в файле манифеста.

В файле Java,

Вы должны запросить разрешение снова во время выполнения, используя checkSelfPermission. Это совершенно необходимо, как если бы вы, пользователь, не дал разрешения, он не сможет получить доступ к камере. Вы должны написать этот код и все функции, связанные с камерой, если вы хотите, чтобы камера действительно отображалась.

Например, если есть кнопка, скажем Open Camera, сначала проверьте разрешение, выдал пользователь или нет, а затем откройте камеру.

...