【问题标题】:Cannot resolve method 'setTorchMode(java.lang.String, boolean)'无法解析方法 'setTorchMode(java.lang.String, boolean)'
【发布时间】:2019-06-20 17:09:20
【问题描述】:

我正在尝试创建一个 Android 活动,该活动可以访问设备上任何相机的手电筒/手电筒。 CameraManager 有一个名为 setTorchMode 的方法允许您将其打开,该方法将相机 ID 作为字符串和一个布尔值,用于表示手电筒状态的真假。不幸的是,当我尝试使用这种方法时,它给了我错误

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();
        }
    }

我已经在我的 init 中用这一行全局定义和初始化了 camMan

camMan = (CameraManager) getSystemService(CAMERA_SERVICE);

有人知道为什么会发生这种情况吗?

【问题讨论】:

    标签: android camera


    【解决方案1】:

    我想通了...我收到此错误是因为我使用的是 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);
    

    【讨论】:

      猜你喜欢
      • 2019-09-05
      • 1970-01-01
      • 2019-03-30
      • 2018-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-04
      • 1970-01-01
      相关资源
      最近更新 更多