意图startActivity的奇怪问题导致我的扫描程序无法正常工作

时间:2017-03-24 12:19:15

标签: java android android-activity barcode-scanner

所以,在我用

完成扫描仪活动之后
      btn_take_photo.setOnClickListener(new FloatingActionButton.OnClickListener() {
        @Override
        public void onClick(View view) {
            String carde = cardnumberbox.getText().toString().trim();
            if (carde.matches("")) {
                Toast.makeText(getApplicationContext(), getString(R.string.Skan_Udfyld_Kort_Nummer), Toast.LENGTH_SHORT).show();
                cardnumberbox.requestFocus();
                return;
            }
            Intent i = new Intent(ScanActivity.this, CameraActivity.class);
            i.putExtra("EXTRA_SESSION_ID", carde);
            startActivity(i);

        }
    });

转到我的摄像头活动,这样我就可以拍摄一些照片然后带回去

    public void btn_aprove2(View view) {
    Intent i = new Intent(CameraActivity.this, ScanActivity.class);
    String counts = count.getText().toString().trim();
    i.putExtra("EXTRA_SESSION_IDs", counts);
    String carde = cardnumberbox2.getText().toString().trim();
    i.putExtra("EXTRA_SESSION_ID", carde);
    startActivity(i);
    finish();

再次扫描一下。我的扫描仪无法正常工作 但是,如果我然后按下后退按钮,它会再次返回到扫描活动而不是我的菜单,所以看起来扫描活动正在运行两次,其中只有一个是功能性的,但它在这里让我感到困惑

因为如果不按btn_aprove2按钮而只是使用后退按钮 我得到完全相同的问题,但在这里我的扫描活动没有运行两次,因为当我按下后退按钮它只是带我回到菜单

a video of the issue

从清单中删除我的屏幕方向(所以我可以旋转它) 我的扫描仪现在可以正常工作,但前提是我首先旋转到横向并将其旋转回potrait

我在日志中看到它只是在旋转时调用oncreate,只在恢复时暂停并按下按钮(startactivity / finnish)

我完全迷失了如何让它发挥作用。

on github使用wiki中的api演示和文档以及正在使用的thoose类

1 个答案:

答案 0 :(得分:3)

如果您只是跳转到相机活动以获取某些数据,我建议您开始活动以获得结果(startActivityForResult)而不完成扫描仪活动。这将为您提供正确的后退堆栈(使用后退按钮从相机返回到扫描仪)。

除此之外你为什么要使用i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);?您正在开始一项新活动并完成旧活动。我不明白为什么真的需要这面旗帜。你的清单中的android:launchMode是什么,你确定你知道FLAG_ACTIVITY_NEW_TASK正在做什么,这是你想要的吗?

无论如何,根据您告诉我们的情况,您的示例看起来确实应该在不调用startActivityForResult()的情况下使用finish()

  1. 按某些活动的菜单按钮
  2. 启动相机并执行某些操作
  3. 按某个按钮启动扫描仪
  4. 扫描内容并使用结果完成扫描仪(或通过单击后退取扫描仪)
  5. 在相机中检索扫描仪的结果并使用它执行某些操作或在取消扫描仪时继续执行上一个工作流程
  6. 完成工作流程后,请完成相机操作,以便最终进入启动相机的活动