SurfaceView setVisibility()抛出RuntimeException

时间:2014-11-26 16:31:28

标签: android android-camera android-view surfaceview

我正面临以下问题。我正在使用SurfaceView来显示相机预览,但是当我将表面视图设置为可见时,我会遇到以下异常。

java.lang.RuntimeException: getParameters failed (empty parameters)
at android.hardware.Camera.native_getParameters(Native Method)
at android.hardware.Camera.getParameters(Camera.java:1460)
at com.the.package.activity.ShowPhotoActivity$2.surfaceChanged(ShowPhotoActivity.java:111)
at android.view.SurfaceView.updateWindow(SurfaceView.java:558)
at android.view.SurfaceView.setVisibility(SurfaceView.java:248)

ShowPhotoActivity:

@Override                                                                                    
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {        
    Camera.Parameters parameters = mCamera.getParameters(); // <-- line 101                                 
    Camera.Size size = getBestPreviewSize(width, height, parameters);                        

    if (mInPreview) {                                                                        
        mCamera.stopPreview();                                                               
    }                                                                                        

    Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();


    if (display.getRotation() == Surface.ROTATION_0) {                                       
        mCamera.setDisplayOrientation(90);                                                   
        parameters = mCamera.getParameters(); // <---- line 111                                            
        size = getBestPreviewSize(width, height, parameters);                                
    }                                                                                        

    if (display.getRotation() == Surface.ROTATION_270) {                                     
        mCamera.setDisplayOrientation(180);                                                  
        parameters = mCamera.getParameters();                                                
        size = getBestPreviewSize(width, height, parameters);                                
    }                                                                                                                                                

    Camera.Size s = getBestResolution(parameters);                                           
    parameters.setPreviewSize(size.width, size.height);                                      
    parameters.setPictureSize(s.width, s.height);                                            

    mCamera.setParameters(parameters);                                                       
    if (mInPreview) {                                                                        
        mCamera.startPreview();                                                              
    }                                                                                        
}                     

这真让我疯狂,为什么第101行处理没有问题,第111行抛出异常。这只发生在Android 4.1.1设备Sony st26i(Xperia J)上。我没有注意到Galaxy Nexus,Galaxy SIII或4.1.2仿真器有任何问题。谢谢你的每一个想法。

1 个答案:

答案 0 :(得分:1)

这里已经回答,检查接受的答案: Correct handling of exception: "getParameters failed (empty parameters)"

我的猜测是这里的stopPreview存在问题,可能是从错误的线程调用的。在你调用stopPreview时检查你的日志,它可能会给你一个线索。