首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有SurfaceHolder的安卓拍照

没有SurfaceHolder的安卓拍照
EN

Stack Overflow用户
提问于 2011-10-24 17:12:38
回答 2查看 4.7K关注 0票数 2

在某些设备上,当我试图从一个服务(没有图形用户界面)拍照时,我得到一个RuntimeException。但是,如果我使用SurfaceHolder从活动中拍摄照片,它将会工作。

代码语言:javascript
复制
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方法(实际上是本机方法)的调用将抛出一个RuntimeException。我也尝试过camera.setPreviewDisplay(null),但它也不起作用。

然而,如果我从一个活动中使用真正的SurfaceView,它在Droid上也可以工作得很好,但我需要从后台服务来做。

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

LogCat输出:

代码语言:javascript
复制
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)

非常感谢您的帮助。

EN

回答 2

Stack Overflow用户

发布于 2011-10-24 17:19:02

这是安全问题。你不应该被允许在没有预览视图的情况下使用相机。这应该防止在用户不知情的情况下恶意使用摄像机,例如出于间谍目的。

票数 1
EN

Stack Overflow用户

发布于 2013-08-12 18:07:09

似乎大多数现代安卓设备现在都会检查SurfaceView是否存在,是否有非零的宽度和高度(我的三星Galaxy SII在这种情况下会发出警告,不会捕捉到照片)。有趣的是,如果SurfaceView的宽度和高度都是1dip,那么它就可以正常工作。

代码语言:javascript
复制
<SurfaceView android:id="@+id/surface_view"
    android:layout_width="1dip"
    android:layout_height="1dip" />

由于SurfaceView的宽度和高度为1像素,所以很难看到它,虽然它可以工作,但它仍然属于“安全问题”的范畴。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7873403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档