0

surfaceView を使用してカメラのプレビューを表示するアプリを作成しました。開発者コンソールで多くのレポートを取得し、surfaceChanged 部分でエラーが発生しました。

     @Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {       

    Parameters parameters = mCamera.getParameters();                   //// (Line 127)

    List<Camera.Size> previewSizes = parameters.getSupportedPreviewSizes();

    Camera.Size previewSize = previewSizes.get(4); //480h x 720w      /// (Line 129)

    parameters.setPreviewSize(previewSize.width, previewSize.height);
    parameters.setFlashMode(Parameters.FLASH_MODE_AUTO);
    parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);

    mCamera.setParameters(parameters);

    Display display = ((WindowManager)getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
    if(display.getRotation() == Surface.ROTATION_0)
    {
        parameters.setPreviewSize(height, width);                           
        mCamera.setDisplayOrientation(90);
    }

    if(display.getRotation() == Surface.ROTATION_90)
    {
        parameters.setPreviewSize(width, height);                           
    }

    if(display.getRotation() == Surface.ROTATION_180)
    {
        parameters.setPreviewSize(height, width);               
    }

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


    mCamera.startPreview();
}

最初のエラー:

    java.lang.IndexOutOfBoundsException  (Line 129)

2 番目のエラー:

    java.lang.NullPointerException (Line 127)

3 番目のエラー:

    java.lang.RuntimeException: set display orientation failed (when rotating cam 90*)

ほとんどのエラー レポートは samsung galaxy デバイスからのものですが、アプリは LG nexus 4 でうまく動作します。このようなエラーを回避するために、表面を変更するためのより安定した信頼できる方法を誰かが提供できますか??

4

2 に答える 2