Camera.open () получает сообщение «Доступ для <пакета> ограничен»

  • Проблема возникает на Nokia 6 с Android 7.1.1
  • Разрешение получено
  • AppOpsManager#checkOp(AppOpsManager.OPSTR_CAMERA, Process.myUid(), getPackageName()) возвращает AppOpsManager#MODE_ALLOWED

Однако при попытке Camera.open (i) для проверки свойств камеры я получаю

I/CameraService: Camera 0: Access for "package" has been restricted

Очевидно, это могло произойти [1] только в том случае, если пакет приложения или uId был явно ограничен для запуска AppOpsManager # OP_CAMERA. Но почему это могло произойти? После того, как AppOpsManager#checkOp сообщает AppOpsManager#MODE_ALLOWED

Образец кода

for (int i = 0; i < numCameras; ++i) {
    List<Size> supportedSizes = null;
    List<int[]> supportedFpsRanges = null;
    Camera camera = null;
    try {
        camera = Camera.open(i);
        Parameters parameters = camera.getParameters();
        supportedSizes = parameters.getSupportedPreviewSizes();
        supportedFpsRanges = getFpsRangesRobust(parameters);
    } catch (Exception e) {
        ...
    } finally {
        if (camera != null) {
            camera.release();
        }
    }

[1] https://github.com/aosp-mirror/platform_frameworks_base/blob/oreo-mr1-release/services/core/java/com/android/server/AppOpsService.java#L2588

0
0
208
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

По-видимому, это проблема устройства. Nokia 6 / TA-1000, Android 7.1.1

Сценарий

  • попробуйте использовать камеру
  • приложение запрашивает разрешение, нажмите "Запретить"
  • попробуйте использовать камеру
  • приложение запрашивает разрешение, нажмите Разрешить
  • Ошибка в logcat, камера не работает

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

Другие вопросы по теме