使用已弃用的相机 API,频闪灯在某些设备上不起作用
Using the deprecated Camera API, strobe light not working on some devices
我使用了已弃用的相机 API,因为 Camera2 涉及太多不必要的步骤,无法简单地启用手电筒。
但在某些设备上它似乎不起作用。
根据我在 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 准备就绪时开始预览,并保留 运行 直到用户停止频闪。
然后修改闪光灯模式,切换时更新参数即可on/off; starting/stopping 如您所见,预览速度很慢,请保留它 运行 直到完成选通。
我使用了已弃用的相机 API,因为 Camera2 涉及太多不必要的步骤,无法简单地启用手电筒。
但在某些设备上它似乎不起作用。
根据我在 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 准备就绪时开始预览,并保留 运行 直到用户停止频闪。
然后修改闪光灯模式,切换时更新参数即可on/off; starting/stopping 如您所见,预览速度很慢,请保留它 运行 直到完成选通。