嘗試從服務(無GUI)拍攝照片時,在某些設備上,我收到RuntimeException。但是,如果我使用SurfaceHolder從活動中拍攝照片,它將起作用。Android在沒有SurfaceHolder的情況下拍攝照片
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);
該序列正常工作的大多數設備,但,特別是關於摩托羅拉Droid,調用takePicture方法(實際上是本地方法)將拋出一個RuntimeException。還嘗試過camera.setPreviewDisplay(null),但它也不起作用。
但是,如果我從一個Activity使用真正的SurfaceView,它也可以在Droid上正常工作,但我需要從後臺服務中完成。
您是否認爲此行爲是由於隱私原因顯示的,因此沒有人可以在不實際顯示圖像的情況下拍照?這對我來說沒什麼意義,因爲我可以加載一個帶有0大小預覽的虛擬活動,它可以工作,但我很樂意不必這樣做。
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)
任何幫助是非常讚賞
請添加你的異常的堆棧跟蹤,並仔細閱讀logcat輸出,尤其是,如果攝像頭被訪問,摩托羅拉Droid會記錄很多有用的信息。 – HefferWolf
謝謝@HefferWolf的回答。 是的,對不起,這是堆棧跟蹤: 了java.lang.RuntimeException:takePicture在android.hardware.Camera.native_takePicture(本機方法) 失敗 在android.hardware.Camera.takePicture(Camera.java:829) 在android.hardware.Camera.takePicture(Camera.java:793) – mindless