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/

相关文章:

Nexus 5 不支持 Android 相机 API SCENE_MODE_HDR?

android - 基于 Android NativeActivity 的项目中的源代码位置

jquery - APP升级IOS后imageURI发生变化

c++ - 错误 : no instance of constructor "Camera::Camera" matches the argument list

android - 为什么我在图库中看不到我拍摄的照片?

android - 如何强制flutter `camera`插件以纵向模式拍照?

android - 使用 Intent 打开相机

java - 有什么方法可以将音频发送到 android 通话中使用的小扬声器吗?

php - 仅允许来自 Android 应用程序的 PHP 请求

android - 同时拥有 values 和 xml 目录是什么意思?