1

こんばんは、

私はモバイル拡張現実ゲームに取り組んでおり、ゲームの一部として 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.");
          }
        }


      }
    }

編集:

私はこれを機能させています(正しくスキャンして表示します。ただし、後で続行するためにチェックしている文字列の正しい値を何らかの形で解析していないため、チェックを機能させることができません。何が間違っている可能性がありますか?

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

ヘルパー クラス。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ライブラリを使用していますが、ゲームに関しては使用していません。インテントを介してスキャンするために使用できます。私の意見では非常に快適です。その説明はZXingWikiにあります。

インテントパッケージのすべてのクラスを独自のプロジェクトに配置するだけです。次に、ユーザーがバーコードをスキャンするためにカメラを起動するときはいつでも、次のコードを使用できます。

// 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 に答える