【问题标题】:orientation error causing crash方向错误导致崩溃
【发布时间】:2013-05-30 15:15:25
【问题描述】:

我有一个 Activity 将方向设置为 lanscape 以使该 Activity 工作正常,但是如果在启动该 Activity 时手机处于纵向模式,我会收到此错误并且该 Activity 停止并返回到另一个 Activity:

05-30 11:06:48.335: D/DOMX(125): ERROR: failed check:(eError == OMX_ErrorNone) || (eError == OMX_ErrorNoMore) - returning error: 0x80001005 - Error returned from OMX API in ducati
05-30 11:06:48.335: E/CameraHAL(125): Error while configuring rotation 0x80001005
05-30 11:06:48.460: D/DOMX(125): ERROR: failed check:(eError == OMX_ErrorNone) || (eError == OMX_ErrorNoMore) - returning error: 0x80001005 - Error returned from OMX API in ducati
05-30 11:06:48.460: E/CameraHAL(125): Error while configuring rotation 0x80001005
05-30 11:06:48.765: E/CameraHAL(125): Adapter state switch PREVIEW_ACTIVE Invalid Op! event = 0xf

该活动是从另一个也设置为横向的活动中调用的,如果我在将设备保持在横向状态时切换活动,它不会崩溃..仅当从启动时将设备保持为纵向时..

在这两个活动中,我在 onCreate() 中设置方向,如下所示:

this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

这似乎与我在正在启动的活动中放置一个 CameraPreview 表面这一事实有关,因此我将相机类包括在内,以防出现问题:

public class KNCamLayer extends SurfaceView {
        Camera camera;
        SurfaceHolder previewHolder;

        public KNCamLayer(Context context)
        {
            super(context);
            previewHolder = this.getHolder();

            //previewHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
            previewHolder.addCallback(surfaceHolderListener);

        }

        SurfaceHolder.Callback surfaceHolderListener = new SurfaceHolder.Callback() {

            public void surfaceCreated(SurfaceHolder holder) {
                camera=Camera.open();
            try {
                camera.setPreviewDisplay(previewHolder);

            }
                catch (Throwable e){ }
            }
            public void surfaceChanged(SurfaceHolder holder, int format, int width, int height)
            {
                Parameters params = camera.getParameters();
                //params.setPreviewSize(width, height);
                params.setPictureFormat(PixelFormat.JPEG);
                camera.setParameters(params);
                camera.startPreview();


            }
            public void surfaceDestroyed(SurfaceHolder arg0)
            {
                camera.stopPreview();
                camera.release();
            }

        };

        public void onResume() {
            camera.startPreview();

        }

        public void onPause() {
            // TODO Auto-generated method stub
            camera.stopPreview();
        }

}

CameraView 被添加到 Activity 的 onResume() 中,如下所示:

camPreview = new KNCamLayer(this);
        frame.addView(camPreview, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));

【问题讨论】:

    标签: android android-camera android-orientation


    【解决方案1】:

    好吧,看来如果我在清单中为该活动设置方向..问题就消失了..但我不明白为什么。
    修复:

    android:screenOrientation="landscape" 在活动清单中

    【讨论】:

    • 它是因为这个属性强制你的相机活动处于横向状态,当没有定义方向时,它不会让选项设备本身决定它想要执行的视图
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多