2014-06-17 58 views
1

我正在運行一個應用程序,它使用surfaceView來顯示Camera對象輸出,並且我需要在拍照時設置自動閃光。我認爲這可能是一件簡單的事情,但我錯了! 這是我的代碼:無法在Android Camera對象上設置自動閃光

public void surfaceChanged(SurfaceHolder holder, int format, int width, 
     int height) { 
    Camera.Parameters params = mCamera.getParameters(); 
    Camera.Size result = getBestPreviewSize(params, width, height); 
    params.setPreviewSize(result.width, result.height); 
    params.setPictureFormat(ImageFormat.JPEG); 
    params.setJpegQuality(100); 
    params.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE); 
    params.setFlashMode(Camera.Parameters.FLASH_MODE_AUTO); 
    params.setPictureSize(dpWidth, dpWidth); 
    params.setRotation(90); 
    mCamera.setParameters(params); 

    mCamera.startPreview(); 

} 

和清單具有正確的權限。當我啓動我的代碼時,這是錯誤:

06-17 13:54:48.260: E/AndroidRuntime(19901): FATAL EXCEPTION: main 
06-17 13:54:48.260: E/AndroidRuntime(19901): Process: it.giozh.app, PID: 19901 
06-17 13:54:48.260: E/AndroidRuntime(19901): java.lang.RuntimeException: setParameters failed 
06-17 13:54:48.260: E/AndroidRuntime(19901): at android.hardware.Camera.native_setParameters(Native Method) 
06-17 13:54:48.260: E/AndroidRuntime(19901): at android.hardware.Camera.setParameters(Camera.java:1651) 
06-17 13:54:48.260: E/AndroidRuntime(19901): at it.ictinnova.hipstamemostylist.ScattaFoto.surfaceChanged(TakePic.java:144) 
06-17 13:54:48.260: E/AndroidRuntime(19901): at android.view.SurfaceView.updateWindow(SurfaceView.java:583) 
06-17 13:54:48.260: E/AndroidRuntime(19901): at android.view.SurfaceView.access$000(SurfaceView.java:86) 
06-17 13:54:48.260: E/AndroidRuntime(19901): at android.view.SurfaceView$3.onPreDraw(SurfaceView.java:175) 
06-17 13:54:48.260: E/AndroidRuntime(19901): at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:847) 
06-17 13:54:48.260: E/AndroidRuntime(19901): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1867) 
06-17 13:54:48.260: E/AndroidRuntime(19901): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:996) 
06-17 13:54:48.260: E/AndroidRuntime(19901): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5600) 
06-17 13:54:48.260: E/AndroidRuntime(19901): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761) 
06-17 13:54:48.260: E/AndroidRuntime(19901): at android.view.Choreographer.doCallbacks(Choreographer.java:574) 
06-17 13:54:48.260: E/AndroidRuntime(19901): at android.view.Choreographer.doFrame(Choreographer.java:544) 
06-17 13:54:48.260: E/AndroidRuntime(19901): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747) 
06-17 13:54:48.260: E/AndroidRuntime(19901): at android.os.Handler.handleCallback(Handler.java:733) 
06-17 13:54:48.260: E/AndroidRuntime(19901): at android.os.Handler.dispatchMessage(Handler.java:95) 
06-17 13:54:48.260: E/AndroidRuntime(19901): at android.os.Looper.loop(Looper.java:136) 
06-17 13:54:48.260: E/AndroidRuntime(19901): at android.app.ActivityThread.main(ActivityThread.java:5001) 
06-17 13:54:48.260: E/AndroidRuntime(19901): at java.lang.reflect.Method.invokeNative(Native Method) 
06-17 13:54:48.260: E/AndroidRuntime(19901): at java.lang.reflect.Method.invoke(Method.java:515) 
06-17 13:54:48.260: E/AndroidRuntime(19901): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
06-17 13:54:48.260: E/AndroidRuntime(19901): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
06-17 13:54:48.260: E/AndroidRuntime(19901): at dalvik.system.NativeStart.main(Native Method) 

出現了什麼問題?

回答

4

從編碼的角度來看沒什麼不對。它的供應商特定問題。在一些設備中,設置參數在一些設備中不起作用。我發現它的解決方案放在try catch塊的代碼行下面。我也建議請檢查哪些參數不允許你通過嘗試一個接一個地嘗試設置所有的參數。對我來說,它的設置高度和寬度都是失敗的。

mCamera.setParameters(params);

檢查中有你的清單

android.hardware.camera.autofocus

android.hardware.camera.flash

設置這些功能是否有其他解決方案alternamte發現請加評論。

+0

我不需要捕捉異常,因爲我的應用程序應該只在特定設備上運行(在我的情況下是nexus 7),所以我正在搜索一種僅用於自動閃光的方法! 編輯。在我的情況下,導致崩潰的唯一參數是FALSH_MODE_AUTO。如果我評論該行,永久工程 – giozh

+0

亞仍然但事情我發現它的作品設置參數適用於某些設備不是全部。嘗試設置params逐個 – Sush

+0

@giozh Nexus 7甚至沒有相機閃光燈,如果我還記得嗎? – Boni2k