我正在尝试创建一个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);
有人知道为什么会这样吗?
答案 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);