按下“后退”按钮时如何退出ZXing的扫描模式

时间:2019-01-27 18:33:07

标签: android zxing

我有一个简单的QR码扫描应用程序。这是描述其逻辑的流程图。 enter image description here

这是主要部分:

import android.content.Intent;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import com.google.zxing.integration.android.IntentIntegrator;
import com.google.zxing.integration.android.IntentResult;

public class ScanActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_scan);
    }

    @Override
    protected void onResume() {
        super.onResume();
        IntentIntegrator scanIntegrator = new IntentIntegrator(ScanActivity.this);
        scanIntegrator.setOrientationLocked(false);
        scanIntegrator.initiateScan();
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
        if (scanResult != null){
            String strResult = scanResult.getContents();
            Intent iii = new Intent(ScanActivity.this, ScanResultActivity.class);
            iii.putExtra("scan_result", strResult);
            startActivity(iii);
        }
    }

    @Override
    public void onBackPressed() {
        moveTaskToBack(true);
    }
}

如果您处于ScanActivity中,则该应用程序将在扫描后立即显示ScanResultActivity,这与预期的一样。唯一的问题是,按返回键时应用程序不会退出。相反,它将跳至ScanResultActivity。当然,扫描结果为空。

如何在扫描运行时按Back键退出应用程序?

完整代码:https://github.com/anta40/QRScanDemo

2 个答案:

答案 0 :(得分:0)

此方法

@Override
public void onBackPressed() {
    moveTaskToBack(true);
}

应该这样调用super方法

@Override
public void onBackPressed() {
    super.onBackPressed();
}

答案 1 :(得分:0)

问题:此代码段使您的代码无法按预期工作

@Override
protected void onResume() {
    super.onResume();
    IntentIntegrator scanIntegrator = new IntentIntegrator(ScanActivity.this);
    scanIntegrator.setOrientationLocked(false);
    scanIntegrator.initiateScan();
}

因为当您按下ScanResultActivity中的返回键时,

[*] onResume的{​​{1}}方法将在ScanActivity之后被调用。届时后退堆栈将是。

  

ScanActivity-> ScanResultActivity-> ScanActivity

如果按返回键(当前活动为onActivityResult),将显示ScanActivity,然后如果再次按返回键(当前活动为ScanResultActivity),则步骤 [*] 将重复。从现在开始,您的应用将一次又一次地重复,并且您将无法永远退出当前的Backstack。

解决方案:这是我的建议解决方案:

[1]。仅在初次创建ScanResultActivity时和用户从ScanActivity按返回键时显示扫描屏幕。

[2]。如果用户在ScanResultActivity上按返回键,则退出/结束当前的堆栈。

ScanActivity