2016-05-15 2 views
4

Я использую библиотеку EasyPermissions от Google. В моем приложении у меня две кнопки: одна для записи видео и одна для захвата изображения. Поскольку оба требуют разрешения камеры, они оба аннотируются с @AfterPermissionGranted.Оба метода запускаются после разрешений

Так что мой метод записи видео выглядит следующим образом:

@Override 
@AfterPermissionGranted(RC_CAMERA_PERM) 
public void openCameraToRecordVideo() { 
    if (EasyPermissions.hasPermissions(this, Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { 
// Code here 
} 

И точно так же для съемки:

@Override 
@AfterPermissionGranted(RC_CAMERA_PERM) 
public void openCameraToCaptureImage() { 
    if (EasyPermissions.hasPermissions(this, Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { 
// Code here 
} 

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

Что происходит, когда пользователь нажимает одну кнопку и принимает разрешения, то методы запускаются один за другим. Это, очевидно, не то поведение, которое я хочу.

Я очень благодарен за помощь в решении этой проблемы. Спасибо.

ответ

1

Удалить AfterPermissionGranted с обеих функций openCameraX. Определено личное поле lastAction. Напишите новую функцию openCamera с аннотацией AfterPermissionGranted, для которой задано значение lastAction, и если это так, вызовите связанную функцию. В каждом openCameraX проверьте, есть ли у вас разрешение камеры, а если нет, обновите разрешение последней камеры и разрешение на запуск запроса на запуск.

+0

Это в значительной степени то, что я, наконец, сделал. Я добавил два булевых поля: 'recordVideo' и' captureImage' и на основании нажатия кнопки. Я установил соответствующее поле в значение true. Затем, когда запускается 'openCamera()', я проверяю, какое поле истинно, и я запускаю соответствующую функцию openCameraXXX. Спасибо за Ваш ответ. – Mes

1

Фактически, то, что вы делаете, запрашивает одно и то же разрешение два раза с различным именем функции, поэтому удалите либо метод openCameraToCaptureImage(), либо метод openCameraToRecordVideo().

Смежные вопросы