晚上好,
我正在研究移动增强现实游戏,我想使用QR码作为游戏的一部分。我想要做的是自己创建QR码,这些QR码用于密钥的目的,以便能够进入游戏的下一个阶段。因此,从这个意义上说,我需要用户能够从街道上的某个位置扫描QR码,如果QR码是合适的,则应用程序将继续进行下一个活动以继续流动游戏。
我一般都检查了ZXing库,但无法弄清楚我是否能以这种方式使用QR码,所以我决定在这里询问是否有人做过/做了类似的事情。任何指向示例的指针都将非常感激。
非常感谢你的帮助, 约翰。
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == 0) {
TextView tvStatus=(TextView)findViewById(R.id.tvStatus);
TextView tvResult=(TextView)findViewById(R.id.tvResult);
if (resultCode == RESULT_OK) {
tvStatus.setText(intent.getStringExtra("SCAN_RESULT_FORMAT"));
tvResult.setText(intent.getStringExtra("SCAN_RESULT"));
String a=(intent.getStringExtra("SCAN_RESULT"));
if (a=="1") {
Button next = (Button) findViewById(R.id.proceed);
next.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
Intent myIntent = new Intent(view.getContext(), StoryLine2Part1.class);
startActivityForResult(myIntent, 0);
}
});
}
} else if (resultCode == RESULT_CANCELED) {
tvStatus.setText("Press a button to start a scan.");
tvResult.setText("Scan cancelled.");
}
}
}
}
编辑:
我有这个工作(它扫描并正确显示。但是我不能让检查工作,因为不知何故我没有解析字符串上的正确值,我后来检查以继续。任何想法可以是错的?
答案 0 :(得分:3)
是的,你可以做到这一点。
开始您的活动以获得结果。
try {
Intent intent = xzingHelper.getScanQrCodeIntent();
startActivityForResult(intent, XzingHelper.QR_REQ_CODE);
} catch (ActivityNotFoundException e) {
Toast.makeText("You need the ZXing 2D BarCode scanner");
Intent playIntent = xzingHelper.getZxingGooglePlayIntent();
startActivity(playIntent);
finish();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == XzingHelper.QR_REQ_CODE){
if(resultCode == RESULT_OK){
String qrCodeValue = xzingHelper.getScanResult(data);
Log.i("Got ZXing result: "+ qrCodeValue);
dealWithQrCode(qrCodeValue); // Check if the qr code is for the next level
} else
if(resultCode == RESULT_CANCELED) {
// Cancelled - dont go to next level
finish();
}
}
super.onActivityResult(requestCode, resultCode, data);
}
助手类,如果他们没有安装zXing,它会提示他们:
public class XzingHelper {
public static final int QR_REQ_CODE = 123;
public Intent getScanQrCodeIntent() {
Intent intent = new Intent("com.google.zxing.client.android.SCAN");
intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
intent.putExtra("SAVE_HISTORY", false);
intent.putExtra("PROMPT_MESSAGE", "Too dark? Menu > Settings > 'use front light'");
return intent;
}
public Intent getZxingGooglePlayIntent() {
Uri playUri = Uri.parse("market://details?id=com.google.zxing.client.android");
Intent playIntent = new Intent(Intent.ACTION_VIEW, playUri);
return playIntent;
}
public String getScanResult(Intent data) {
return data.getStringExtra("SCAN_RESULT");
}
}
答案 1 :(得分:1)
我已经使用过ZXing Library,但不是游戏问题。你可以用它来通过意图进行扫描,我觉得这很舒服。您可以在ZXing Wiki。
中找到相关说明只需将intent package中的所有类放入您自己的项目中。然后,无论何时您想要启动相机,用户都可以使用以下代码扫描条形码:
// yourActivity will be "this" if you start this from your activity
IntentIntegrator integrator = new IntentIntegrator(yourActivity);
integrator.initiateScan();
如果您想限制应该扫描的代码类型到QR代码,您可以使用以下内容替换最后一行:
integrator.initiateScan(IntentIntegrator.QR_CODE_TYPES);
要处理结果,请在活动中重载onActivityResult
方法。这将在扫描仪返回时调用,您可以在那里解锁游戏关卡:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
if (scanResult != null) {
// a code has been scanned, so handle scan result
}
}
对于QR代码生成,我只使用随机字符串(来自某些单词的哈希标记),您可以在扫描结果中检查。