Не удается разрешить метод 'setTorchMode (java.lang.String, boolean)' - PullRequest
0 голосов
/ 20 июня 2019

Я пытаюсь создать активность для Android, которая обращается к фонарику / факелу любой камеры на устройстве, в котором она есть.CameraManager имеет метод, который позволяет вам включить его с именем setTorchMode, который принимает идентификатор камеры в виде строки, и логическое значение, в котором для состояния фонарика указано значение true или false.К сожалению, когда я пытаюсь использовать этот метод, он выдает ошибку

Cannot resolve method 'setTorchMode(java.lang.String, boolean)'

У меня есть все эти импортированные

import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraCharacteristics;
import android.hardware.camera2.CameraManager;
import android.hardware.camera2.*;

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

public void turnOnLight(View view) {


        String[] camIDs;
        try {
            camIDs = camMan.getCameraIdList();

            if(camIDs.length > 0) {
                for (String camera : camIDs) {
                    int intCamID = Integer.parseInt(camera);
                    CameraCharacteristics characteristics = camMan.getCameraCharacteristics(camera);
                    boolean flashAvailable = characteristics.get(CameraCharacteristics.FLASH_INFO_AVAILABLE);
                    if(flashAvailable) {
                        camMan.setTorchMode(camera, true); //here is the error
                    }
                }
            }
        } catch (CameraAccessException camae) {
            camae.printStackTrace();
        } catch (NullPointerException npe) {
            npe.printStackTrace();
        }
    }

У меня camMan глобально определен и инициализирован в моем init с этой строкой

camMan = (CameraManager) getSystemService(CAMERA_SERVICE);

Кто-нибудь знает, почему это может происходить?

1 Ответ

0 голосов
/ 20 июня 2019

Я понял это ... Я получаю эту ошибку, потому что я использую сторонний SDK, который находится на уровне API 22. К сожалению, setTorchMode () не может быть вызван ниже уровня API 23. Чтобы включить фонарик,код, который я использовал, который работал в этом API, хотя и устарел, это

 Camera mCam;
 Camera.Parameters p;
 mCam = Camera.open();
 p = mCam.getParameters();
 p.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
 mCam.setParameters(p);
 mPreviewTexture = new SurfaceTexture(0);
 try {
          mCam.setPreviewTexture(mPreviewTexture);
 } catch (IOException ex) {
          ex.printStackTrace();
 }
 mCam.startPreview();

Чтобы выключить фонарик, код выглядит так же, но с использованием

p.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);

вместо

p.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...