QR码用作确认码

时间:2012-07-26 11:59:39

标签: android zxing

晚上好,

我正在研究移动增强现实游戏,我想使用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.");
          }
        }


      }
    }

编辑:

我有这个工作(它扫描并正确显示。但是我不能让检查工作,因为不知何故我没有解析字符串上的正确值,我后来检查以继续。任何想法可以是错的?

2 个答案:

答案 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代码生成,我只使用随机字符串(来自某些单词的哈希标记),您可以在扫描结果中检查。