我有 2 种不同的布局
一个是 TabHost,它托管不同的选项卡,其中一个是 QR 扫描仪选项卡。如果我单击按钮,它会启动扫描应用程序并对其进行扫描并将其返回到活动并显示结果(我使用 StartActivityForResult()... 启动它)。另一个 Layout 是 ListView,您可以在其中选择功能。如果您在此处选择 QR 扫描仪,则会打开活动。如果您单击扫描 QR 码,它会再次启动 ZXing,但如果已扫描某些内容,它会退回到 Listview 布局。
这就是我的活动在清单中声明的方式(ListView 布局):
<activity
android:name=".ListActivities"
android:configChanges="orientation|keyboardHidden|screenSize"
android:label="@string/app_name" >
</activity>
和 TabHost:
<activity
android:name=".TabHoster"
android:configChanges="orientation|keyboardHidden|screenSize"
android:label="@string/app_name" >
</activity>
这是 ScanQR 类的 Manifest 条目:
<activity
android:name=".QRScanner"
android:configChanges="orientation|keyboardHidden|screenSize"
android:label="@string/app_name"
android:launchMode="singleInstance" />
这是 ListActivity -> ScanQR 中的代码:
Intent intent = new Intent(this, ScanQR.class);
startActivity(intent);
这是启动 ZXing 库的代码:
Intent intent = new Intent("com.google.zxing.client.android.SCAN");
intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
startActivityForResult(intent, 0);
以及从它返回的结果的代码:
if (resultCode == RESULT_OK) {
String contents = intent.getStringExtra("SCAN_RESULT");
txtPleaseScan.setVisibility(View.GONE);
ScrollView qrLayout = (ScrollView) findViewById(R.id.qrLayout);
qrLayout.setVisibility(View.VISIBLE);
txtQRResult.setText(contents);
} else if (resultCode == RESULT_CANCELED) {
}
顺便说一句,我对两种布局都使用相同的 ScanQR 码...