【问题标题】:Torch / Flashlight app (android.hardware.camera is deprecated)手电筒/手电筒应用(android.hardware.camera 已弃用)
【发布时间】:2016-05-20 20:22:08
【问题描述】:
我有一个使用此代码的手电筒/手电筒应用程序
开启
params = camera.getParameters();
params.setFlashMode(Parameters.FLASH_MODE_TORCH);
camera.setParameters(params);
camera.startPreview();
关闭
params = camera.getParameters();
params.setFlashMode(Parameters.FLASH_MODE_OFF);
camera.setParameters(params);
camera.stopPreview();
现在
android.hardware.Camera 已弃用,建议改用新的 camera2 api。
关于如何使用camera2 打开/关闭设备的手电筒有什么帮助吗?
感谢您的帮助
【问题讨论】:
标签:
java
android
android-camera
deprecated
flashlight
【解决方案1】:
首先,已弃用的 android.hardware.Camera API 仍然可以正常工作,如果您需要支持早于 5.0 Lollipop 的 Android 版本,您仍然需要使用它。
最新的 Android 版本(Android Marshmallow 或更新版本)最简单的选择是新的直接手电筒控制:CameraManager.setTorchMode
使用非常简单,不需要摄像头权限。
所以我会推荐以下内容:
Pre-API 23,使用已弃用的 Camera API 和您现有的方法(不要忘记设置预览显示,虚拟 SurfaceTexture 最简单)。您将需要相机权限和运行时权限请求处理。
API 23 或更高版本,使用 setTorchMode 调用,您甚至不需要请求任何特定的运行时权限。
【解决方案2】:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
mCameraManager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);
try {
for (String camID : mCameraManager.getCameraIdList()) {
CameraCharacteristics cameraCharacteristics = mCameraManager.getCameraCharacteristics(camID);
int lensFacing = cameraCharacteristics.get(CameraCharacteristics.LENS_FACING);
if (lensFacing == CameraCharacteristics.LENS_FACING_FRONT
&& cameraCharacteristics.get(CameraCharacteristics.FLASH_INFO_AVAILABLE)) {
mCameraId = camID;
break;
} else if (lensFacing == CameraCharacteristics.LENS_FACING_BACK
&& cameraCharacteristics.get(CameraCharacteristics.FLASH_INFO_AVAILABLE)) {
mCameraId = camID;
}
if (mCameraId != null) {
mCameraManager.setTorchMode(mCameraId, true);
}
}
} catch (CameraAccessException e) {
e.printStackTrace();
}
}