繁体   English   中英

使用不推荐使用的Camera API,频闪灯在某些设备上不起作用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM