Activity 开启相机后转为风景

Activity turns to landscape after opening the camera

当我打开相机时,我的 Activity 转为横向一秒钟,然后又转回纵向,之后我的 ListView 中的所有数据都消失了。你知道如何解决这个问题吗?

我尝试使用 SCREEN_ORIENTATION_PORTRAIT 但它对我不起作用。

这是我的代码。

private void onClick() {

        scanBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                IntentIntegrator integrator = new IntentIntegrator(MainActivity.this);

                integrator.setDesiredBarcodeFormats(IntentIntegrator.ALL_CODE_TYPES);
                integrator.setPrompt("Scan Code");
                integrator.setBeepEnabled(false);
                integrator.setCameraId(0);
                integrator.setBarcodeImageEnabled(false);
                integrator.initiateScan();
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);


        if (result != null) {

            scandata = result.getContents();
            scanFormat = result.getFormatName();

            if (scandata != null) {
                dta.add("Data: " + scandata + "     Format: " + scanFormat);

            }
        }



    }

在 manifest.xml 中输出一个标签 android:screenOrientation="portrait" 用于activity 你想要的纵向模式

因此您的代码将如下所示:

 <activity
            android:name=".MainActivity"
            android:screenOrientation="portrait" />

您的设备运行不佳,但您不应该绝望。如果你添加一个 "proxy" activity 来隐藏列表并负责启动相机意图和处理结果,你的主要 activity 将受到保护免受不必要的旋转。

另一方面,空列表视图可能仍会再次出现,如果不在您的设备上,那么在您客户的设备上,尤其是在内存较小或相机应用程序较差的设备上。

您应该在必要时保存和恢复您的 activity 状态,如经典 answer 中所述。