【问题标题】:Don't work access to torch in android marshmallow不要在android marshmallow中访问torch
【发布时间】:2015-10-25 13:30:51
【问题描述】:
Camera cam = Camera.Open();
Camera.Parameters p = cam.getParameters();
p.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
cam.setParameters(p);
cam.startPreview();

新的 Android 相机不支持?并且只需要使用Camera2? 它将在旧设备上运行新的 Camera2 类吗?

【问题讨论】:

标签: android


【解决方案1】:

Marshmallow 有一个新的Flashlight APIsetTorchMode()

【讨论】:

  • 我没有测试过,但也许 setTorchMode 不需要相机权限(openCamera 肯定需要)。如果随机手电应用没有拍照功能就好了!
【解决方案2】:

您的代码没有使用Camera.setPreviewDisplayCamera.setPreviewTexture 设置预览目标。
这是 API 运行预览所必需的,但遗憾的是,许多设备并未强制执行此操作(当您在严格的设备上运行应用时,这是一个问题)。

如果您不想绘制预览,则只需创建一个虚拟 SurfaceTexture:

Camera cam = Camera.Open();
Camera.Parameters p = cam.getParameters();
p.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
cam.setParameters(p);
SurfaceTexture dummy = new SurfaceTexture(1);
cam.setPreviewTexture(dummy);
cam.startPreview();

并确保不要让虚拟 SurfaceTexture 对象在相机运行时被垃圾收集。

也就是说,Marshmallow 中新的 Torch API 使用非常简单,不需要相机权限,所以我建议你尽可能使用它。

【讨论】:

  • 我希望Flashlight API可以在android 2.3及以下的旧设备上运行...但是我没有找到有关支持旧版本android new Flashlight API的信息
  • 手电筒不能在旧版本上工作,因为它是核心操作系统 API 的一部分。对于Android 6.0之前的任何东西,您仍然需要打开相机设备并打开预览。
  • 手电筒模式下只需要闪现就不用设置预览了
  • Louis CAD - 这不是真的。相机 API 文档声明始终需要预览目标。有些设备对此比较宽松,这会让人感到困惑,但如果您想在所有 Android 设备上工作,请不要跳过这一步!
猜你喜欢
  • 1970-01-01
  • 2016-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多