1

晚上好,

我正在开发一款移动增强现实游戏,我想在游戏中使用二维码。我想做的是自己创建二维码,用作密码,以便能够进入游戏的下一个阶段。所以从这个意义上说,我需要用户能够从街道上的某个位置扫描二维码,如果二维码是合适的,应用程序将继续进行下一个活动,以继续流程游戏。

我通常检查过 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.");
          }
        }


      }
    }

编辑:

我有这个工作(它可以正确扫描和显示。但是我无法让检查工作,因为不知何故我没有解析字符串上的正确值,我稍后会检查以便继续。关于什么可能是错误的任何想法?

4

2 回答 2

2

是的,你可以做到这一点。

开始您的活动以获得结果。

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

Helper 类,如果他们没有安装 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");
    }

}
于 2012-07-26T12:05:12.620 回答
1

我已经使用过 ZXing Library,但不是在游戏方面。您可以使用它通过 Intents 进行扫描,我认为这很舒服。你可以在ZXing Wiki中找到它的描述。

只需将意图包中的所有类放入您自己的项目中即可。然后,您可以在想要启动相机以供用户扫描条形码时使用以下代码:

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

于 2012-07-26T12:11:51.710 回答