Android上的相机示例

Ral*_*alf 19 camera android android-camera android-camera-intent

我想写一个活动:

  1. 显示相机预览(取景器),并具有"捕获"按钮.
  2. 按下"捕获"按钮时,拍摄照片并将其返回到调用活动(setResult()&finish()).

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


我的研究到目前为止:

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

主要有两种方法:

  1. 使用android.provider.MediaStore.ACTION_IMAGE_CAPTURE事件.看到这个问题
  2. 直接使用Camera API.请参阅此示例此问题(包含大量参考).

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

方法2的问题是稳定性.我尝试了一些例子,但我设法阻止相机在某些设备上工作(直到重启)并完全冻结另一台设备.在另一台设备上捕捉工作,但预览保持黑色.

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


更新:

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

我遇到的一些问题:

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

所以一般来说,除非没有别的办法,否则我不建议去这条路线.两年后,我通过自定义代码转储并切换回基于Intent的方法.从那时起,我的麻烦就少了很多.我过去在基于意图的方法中遇到的问题可能只是我自己的无能.

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

Com*_*are 9

方法2的问题是稳定性.我尝试了一些例子,但我设法阻止相机在某些设备上工作(直到重启)并完全冻结另一台设备.在另一台设备上捕捉工作,但预览保持黑色.

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