Android 在没有 SurfaceHolder 的情况下拍照

标签 android camera android-camera

当尝试从服务(无 GUI)拍照时,在某些设备上,我收到 RuntimeException。但是,如果我使用 SurfaceHolder 从 Activity 中拍照,它就会起作用。

Camera.Parameters parameters = camera.getParameters();
parameters.setPictureFormat(PixelFormat.JPEG);
camera.setParameters(parameters);
SurfaceView mview = new SurfaceView(context);
camera.setPreviewDisplay(mview.getHolder());
camera.startPreview();
camera.takePicture(null,null,iccb);

此序列在大多数设备上运行良好,但特别是在 Motorola Droid 上,对 takePicture 方法(实际上是 native 方法)的调用将抛出 RuntimeException。也试过 camera.setPreviewDisplay(null),但也不行。

但是,如果我使用 Activity 中的真实 SurfaceView,它在 Droid 上也能正常工作,但我需要从后台服务中进行操作。

您是否认为这种行为是出于隐私原因而显示的,因此没有人可以在不实际显示图像的情况下拍照?这对我来说没有多大意义,因为我可以加载一个预览大小为 0 的虚拟 Activity 并且它可以工作,但我希望不必这样做。

LogCat 输出:

10-24 12:20:57.838 D/CameraHal(267): hardware/ti/omap4/omap3/camera-omap4/src/CameraHal.cpp:189 enableMsgType - Preview callback not enabled 1c2
10-24 12:20:57.838 E/CameraHal(267): hardware/ti/omap4/omap3/camera-omap4/src/CameraHal.cpp:2448 takePicture - takePicture called with image buffer 0x0
10-24 12:20:57.838 D/AndroidRuntime(29248): Shutting down VM
10-24 12:20:57.838 W/dalvikvm(29248): threadid=1: thread exiting with uncaught exception (group=0x4001e560)
10-24 12:20:57.846 E/AndroidRuntime(29248): FATAL EXCEPTION: main
10-24 12:20:57.846 E/AndroidRuntime(29248): java.lang.RuntimeException: takePicture failed
10-24 12:20:57.846 E/AndroidRuntime(29248): at android.hardware.Camera.native_takePicture(Native Method)
10-24 12:20:57.846 E/AndroidRuntime(29248): at android.hardware.Camera.takePicture(Camera.java:829)
10-24 12:20:57.846 E/AndroidRuntime(29248): at android.hardware.Camera.takePicture(Camera.java:793)

非常感谢任何帮助

最佳答案

这是一个安全问题。你不应该被允许在没有预览 View 的情况下使用相机。这应该可以防止在用户不知情的情况下恶意使用相机,例如用于 spy 目的。

关于Android 在没有 SurfaceHolder 的情况下拍照,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7873403/

相关文章:

android - 使用SurfaceView的相机应用程序崩溃

android - 这个集合添加 fragment 代码块可以变得更简单吗(Kotlin)

java - 在 Android 应用发送的 HTTP 请求之间维护 cookie

delphi - Windows 7 上的 WIA 2 -- Delphi

android - 在后台以及屏幕关闭时录制视频

android - 如何检查用户是否已在 React Native Android 中授予相机权限?

android - 0.3 MP前置摄像头无法使用zxing读取QR码

java - Android:如何使用 Android Java 代码连接 oracle 数据库?

android - jetpack compose 中重复使用具有重复代码的列

android - 测光相机 - Android