[英]Using the deprecated Camera API, strobe light not working on some devices
我使用了不赞成使用的Camera API,因为Camera2涉及太多不必要的步骤,无法简单地启用Flashlight。
但是在某些设备上,它似乎无法正常工作。
根据我在Google和SO上所做的研究,似乎有些设备要求您需要为手电筒提供工作表面。 但是,这极大地减慢了我应用中的频闪功能。
mCamera = android.hardware.Camera.open(0);
mCameraParameters = mCamera.getParameters();
mHolder = aSurfaceView.getHolder();
mHolder.addCallback(this);
@Override
public void surfaceCreated(SurfaceHolder holder) {
mHolder = holder;
setPreviewDisplay(mHolder);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
mHolder = null;
}
private void setPreviewDisplay(SurfaceHolder aHolder) {
try {
mCamera.setPreviewDisplay(aHolder);
} catch (IOException e) {
e.printStackTrace();
}
}
我还尝试过使用surfaceTexture来代替它,这也会降低手电筒的速度。 看起来带有表面的startPreview运行速度较慢。 使用线程执行相同操作仍会减慢该过程。
这是我当前处理Flash更改的方式:
String mFlashMode;
if (on) {
if (noTorch) mFlashMode = FLASH_ON;
else mFlashMode = FLASH_TORCH;
} else mFlashMode = FLASH_OFF;
mCameraParameters.setFlashMode(mFlashMode);
mCamera.setParameters(mCameraParameters);
if (on) mCamera.startPreview();
else mCamera.stopPreview();
请提出适用于所有设备的解决方案。 我的最终目标是获得频闪灯,因此请注意,手电筒的响应能力至关重要。
您可以仅在输出SurfaceHolder准备就绪时开始预览,并使其保持运行状态,直到用户停止选通。
然后,只要您想打开/关闭闪光灯模式,就可以修改闪光模式并更新参数。 正如您所发现的那样,开始/停止预览很慢,只要让它运行就可以,直到您完成选通。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.