0

私はアプリケーションを開発しており、その一部に QR スキャンが含まれています。多くの研究を重ねた結果、スタンドアロンのスキャン アプリの開発に成功しました。ユーザーがスキャナーを開いて特定の QR コードをスキャンすると、URL などの値を取得します。今、スキャンで取得したデータを Android コードに保存したいと考えています。どうすればそれについて行くことができますか?

私が見る限り、Zxing のキャプチャ アクティビティ クラスを使用する必要があります。ただし、正確に何をする必要があるのか​​ わかりません。私がオンラインで読んだすべてのブログでは、Intentバーコード スキャンを呼び出すために を使用するように指示されています。ただし、私のアプリの目的は商品をスキャンすることだけではありません。スキャンした製品の情報を保存し、後で別の目的に使用する必要があります。

親切に私を助けてください。

ありがとう、エイミー

Zxing のコードは次のとおりです。これは、すべてのスキャンを処理する主なアクティビティです。オンラインで読んで学んだことに、バーコードがスキャンされたときに返されるデータをキャプチャする必要があります..

public void onActivityResult(int requestCode, int resultCode, Intent intent) { 
    if (resultCode == RESULT_OK) { 
        if (requestCode == HISTORY_REQUEST_CODE) { 

            int itemNumber = intent.getIntExtra(Intents.History.ITEM_NUMBER, -1); 

            if (itemNumber >= 0) { 
                HistoryItem historyItem = historyManager.buildHistoryItem(itemNumber);             
                decodeOrStoreSavedBitmap(null, historyItem.getResult()); 
            } 
        }
    } 
} 


if (Intents.Scan.ACTION.equals(action)) { // Scan the formats the intent requested, and   return the result to the calling activity 
    source = IntentSource.NATIVE_APP_INTENT; 

    decodeFormats = DecodeFormatManager.parseDecodeFormats(intent); 
    if (intent.hasExtra(Intents.Scan.WIDTH) && intent.hasExtra(Intents.Scan.HEIGHT)) {

        int width = intent.getIntExtra(Intents.Scan.WIDTH, 0); 
        int height = intent.getIntExtra(Intents.Scan.HEIGHT, 0); 

        if (width > 0 && height > 0) { 
            cameraManager.setManualFramingRect(width, height); 
        } 
    }
}
4

4 に答える 4

2

インテント経由で使用するのが最も簡単な方法で、スキャンの結果を保存することができます。自分で行う必要があります。それがどのように機能するかは、すべてhttp://code.google.com/p/zxing/wiki/ScanningViaIntentの Zxing のドキュメントにあります。

上記リンクより

最初にインテントを呼び出すコードを追加します。

IntentIntegrator integrator = new IntentIntegrator(yourActivity);
integrator.initiateScan();

次に、これを Activity に追加して、結果を処理します。

public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
        if (scanResult != null) {
            // handle scan result
            //here is where you would get the data from the scanResult
            //and store locally by writing to a file or however you 
            //intend to store it
        }
        // else continue with any other code you need in the method
}

このバージョンの Zxing は使用していません。使用したのは少なくとも 2 年前ですが、プロセスは同じです

1 - インテント経由で Zxing を開始します 2 - QR コードをスキャンします 3 - onActivityResult でスキャンから情報を取得します。

于 2012-09-26T22:37:36.480 に答える
2

この一連のコードについても、あなたのスレッドがヘルプを探しているのをたまたま見つけました。私の場合、メイン アプリケーションに情報を送り返す必要がありました (ZXing は私のプロジェクトのライブラリです。これについてクライアントと話しましたが、ビジネス要件のためにインテントを使用できませんでした)。

別のプロジェクトから別のアクティビティに情報を戻す必要がある場合の私の解決策は次のとおりです。

プロジェクト A はメイン アプリケーションですが、ZXing プロジェクトはそのように呼び出されます。

ZXing の CaptureActivity.java で handleDecode() を編集します。

public void handleDecode(Result rawResult, Bitmap barcode) {
    inactivityTimer.onActivity();
    lastResult = rawResult;
    ResultHandler resultHandler = ResultHandlerFactory.makeResultHandler(this, rawResult); 
if (source == IntentSource.NATIVE_APP_INTENT) {
        Intent resultIntent = new Intent();
        resultIntent.putExtra("result", rawResult.toString());
        setResult(Activity.RESULT_OK, resultIntent);
        finish();
    } 

}//end handleDecode()

そして、CaptureActivity を呼び出しているプロジェクト A のアクティビティでは、

@Override
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    NullQRCodeDialogFragment dialog = new NullQRCodeDialogFragment();
    String result = "";
        if (resultCode == RESULT_OK) {
            result = intent.getStringExtra("result");
             if (result.equals(null)){
                  //TODO
             } else {
                  //TODO
             }
}//end onActivityResult

お役に立てれば!これは私の最初の投稿であり、貢献できてとてもうれしいです =)

于 2013-02-19T12:10:42.910 に答える
2

こんにちは、私はついにこの質問に対する答えを見つけました。思ったほど難しくはありませんでした (Zxings のコードは私ではなく Zxing チームによって書かれているので.. とにかく..)

したがって、qrスキャナー(Zxingが提供)によってキャプチャされたデータをAndroidコードに保存する場合(目的は何であれ..私の場合、このデータをWebサーバーに送信したい..とにかく..)、必要なのは次の関数を変更するには..ここで、スキャンされたアクティビティの結果を取得します..

public void handleDecode(Result rawResult, Bitmap barcode) {
inactivityTimer.onActivity();
lastResult = rawResult;
Log.d("last result", "checking if raw result is what i expect");
System.out.println(lastResult);
ResultHandler resultHandler = ResultHandlerFactory.makeResultHandler(this, rawResult);
historyManager.addHistoryItem(rawResult, resultHandler);
}

正しい結果が得られているかどうかを確認するために、Log ステートメントと print ステートメントを追加しました。はい、それは私に正しい答えを与えました..これは CaptureActivity クラスで見つけることができます。

@triggs: ご協力ありがとうございます! あなたは私を正しい軌道に乗せました:-)

于 2012-09-27T23:37:58.713 に答える
0

これが私が使用しているソリューションです。それは私にとってはうまくいっています。

Intent intent = new Intent(SelectOptionActivity.this, CaptureActivity.class);
                intent.putExtra("SCAN_MODE", "ONE_D_MODE");
                intent.putExtra("SCAN_FORMATS", "CODE_39,CODE_93,CODE_128,DATA_MATRIX,ITF,CODABAR,EAN_13,EAN_8,UPC_A,QR_CODE");
                intent.setAction(Intents.Scan.ACTION);
                startActivityForResult(intent, 1);


public void onActivityResult(int requestCode, int resultCode, Intent intent) {
        if (requestCode == 1 && resultCode == RESULT_OK) {
            final String contents = intent.getStringExtra(Intents.Scan.RESULT);
            final String formatName = intent.getStringExtra(Intents.Scan.RESULT_FORMAT);

        }
    }
于 2016-06-20T09:18:01.790 に答える