【问题标题】:Strange issue with intent startActivity causing my scanner to not work properlyIntent startActivity 的奇怪问题导致我的扫描仪无法正常工作
【发布时间】:2017-03-24 12:19:15
【问题描述】:

所以,在我用

完成我的扫描仪活动之后
      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);

        }
    });

去我的 cam 活动,这样我就可以拍一些照片然后回去了

    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();

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

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

a video of the issue

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

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

我完全不知道如何让它发挥作用。

on github 带有 wiki 中的 api 演示和文档以及正在使用的那些类

【问题讨论】:

  • 您是否使用任何库来扫描您的相机?
  • 我不扫描凸轮,因为这是一个新大陆 n5000,所以有一个内置的 2d 条形码阅读器,我正在使用他们的 api zltd_decoder,你可以通过请求获得它,但我已经将它上传到这里 @ 987654323@
  • 我想知道当我从菜单中打开它时是否有办法让它以同样的方式运行?正如我认为i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);finish(); 应该做的那样
  • 我有两个问题:1.只要你要去CamerActivity获取结果,为什么不使用startActivityForResult()启动它。 2. 为什么申请FLAG_ACTIVITY_NEW_TASK
  • 我的意思是,缺少异常处理可能隐藏了可能出现问题的原因,当堆栈跟踪可能指向您需要的答案时,我们在这里浪费时间

标签: java android android-activity barcode-scanner


【解决方案1】:

如果您只是跳转到 Camera 活动以获取一些数据,我建议您在根本不完成 Scanner 活动的情况下启动活动以获得结果 (startActivityForResult)。这将为您提供正确的工作返回堆栈(使用返回按钮从相机返回到扫描仪)。

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

无论如何,从您告诉我们的内容来看,您的示例确实应该使用 startActivityForResult() 而无需调用 finish()

  1. 在某些活动上按菜单按钮
  2. 启动相机并做一些事情
  3. 按一些按钮启动扫描仪
  4. 扫描某些内容并使用结果完成扫描(或单击返回取消扫描)
  5. 在相机中检索扫描仪的结果并对其进行处理或在取消扫描仪时继续之前的工作流程
  6. 完成工作流程后,请完成相机,这样您就可以在启动相机的地方结束活动

【讨论】:

  • 我没有使用 startActivityForResult(i, 1) 在我的清单中设置任何启动模式,没有标志,完成并没有解决问题
  • 我想我不明白你的流程。所以从菜单中,你打开相机。从相机你去扫描仪。从扫描仪返回到相机,然后再从相机返回到扫描仪?
  • 实际上是菜单>扫描仪>相机>扫描仪>完成的另一种方式
  • 因此您必须在未完成扫描仪的情况下启动相机活动以获得结果。例如Intent 意图 = new Intent(this, Camera.class); intent.putExtra("EXTRA_SESSION_ID", carde); startActivityForResult(意图,REQUEST_CODE_TAKE_PICTURES);不要在扫描仪上调用完成,也不要设置标志。而是在您的扫描仪活动中实现 onActivityResult
  • 什么是REQUEST_CODE_TAKE_PICTURES,因为它无法解析符号
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多