android - Android 上的相机示例

标签 android camera android-camera android-camera-intent

我想写一个 Activity :

  1. 显示相机预览(取景器),并有一个“捕捉”按钮。
  2. 当“捕捉”按钮被按下时,拍照并返回给调用 Activity (setResult() & finish())。

是否有适用于每台设备完整示例?一个可以拍照的简单开源应用程序的链接将是理想的答案。


我目前的研究:

这是一个常见的场景,有很多关于这个的问题和教程。

主要有两种方法:

  1. 使用 android.provider.MediaStore.ACTION_IMAGE_CAPTURE 事件。见 this question
  2. 直接使用相机 API。见 this examplethis question (with lots of references) .

方法 1 本来是完美的,但问题是每个设备上的 Intent 实现方式不同。 在某些设备上运行良好。但是,在某些设备上,您可以拍照,但它永远不会返回到您的应用程序。在某些设备上,当您启动 Intent 时没有任何反应。 通常它还会将图片保存到 SD 卡,并且需要 SD 卡存在。每个设备上的用户交互也不同。

方法 2 的问题是稳定性。我尝试了一些示例,但我设法阻止相机在某些设备上工作(直到重新启动)并完全卡住另一台设备。在另一台设备上捕获成功,但预览仍然是黑色的。

我会使用 ZXing 作为示例应用程序(我经常使用它),但它只使用预览(取景器),不拍照。我还发现,在某些设备上,ZXing 没有在光照条件发生变化时自动调整白平衡,而原生相机应用可以正常调整(不确定是否可以修复)。


更新:

有一段时间我直接使用相机 API。这提供了更多控制(自定义 UI 等),但我不会向任何人推荐它。我会在 90% 的设备上工作,但时不时会发布新设备,但会遇到不同的问题。

我遇到的一些问题:

  • 处理自动对焦
  • 处理闪光灯
  • 支持带有前置摄像头、后置摄像头或两者的设备
  • 每台设备都有不同的屏幕分辨率、预览分辨率(并不总是与屏幕分辨率匹配)和图片分辨率的组合。

所以总的来说,我不建议走这条路,除非没有其他办法。两年后,我放弃了自定义代码并切换回基于 Intent 的方法。从那以后,我遇到的麻烦少了很多。我过去在基于 Intent 的方法中遇到的问题可能只是我自己的无能。

如果你真的需要走这条路,我听说如果你只支持 Android 4.0+ 的设备会容易得多。

最佳答案

With approach 2 the issues is stability. I tried some examples, but I've managed to stop the camera from working (until a restart) on some devices and completely freeze another device. On another device the capture worked, but the preview stayed black.

示例中存在错误或设备存在兼容性问题。

关于android - Android 上的相机示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8449414/

相关文章:

Android - 如何从相机或画廊拍照

Android 设备在设置 FPS 时崩溃,而它在 getSupportedPreviewFpsRange 范围内

java - Android视频录制错误

android - 工作线程上的 PubNub

android - 将标签设置为翻新调用,以便稍后通过标签取消

模拟触摸输入的 Android 应用

java - 如何检查光量?

android - 如何在Remix OS的终端仿真器中保存和退出Vi

android - ActivityManager.getRecentTasks() 返回 0 个结果

android - 为什么我无法在 Android Instant App 中访问相机?