无法解析方法'setTorchMode(java.lang.String,boolean)'

时间:2019-06-20 17:09:20

标签: android camera

我正在尝试创建一个Android活动,该活动可访问具有该设备的设备上任何相机的手电筒/手电筒。 CameraManager提供了一种方法,可让您打开名为setTorchMode的方法,该方法将摄像机ID作为字符串,并将布尔值指定为手电筒状态为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在此行中全局定义和初始化

camMan = (CameraManager) getSystemService(CAMERA_SERVICE);

有人知道为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

我发现了此错误...我收到此错误,因为我使用的是API级别22的第三方SDK。不幸的是,无法在api级别23以下调用setTorchMode()。要打开手电筒,我在此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);