簡體   English   中英

android:zxing 條碼掃描成功但未從活動中返回

[英]android: zxing barcode scan successful but not returning from activity

我成功地使用 zxing 來掃描代碼,通過調用已安裝的條形碼閱讀器的意圖,但是當它發出嗶嗶聲並表示掃描良好時,我希望 zxing 活動將返回控制權以便我可以處理結果,但它坐在那里並嘗試再次掃描. 我必須按下后退按鈕,然后它返回,我才能進行下一步。 當我打電話給掃描儀時,我是否遺漏了一些明顯的標志?

感激地收到任何建議。 非常感謝。

這是我的代碼:

public boolean onTouchEvent(final MotionEvent event) {

    Intent intent = new Intent("com.google.zxing.client.android.SCAN");
    intent.putExtra("com.google.zxing.client.android.SCAN.SCAN_MODE", "QR_CODE_MODE");
    startActivityForResult(intent, 0);

    return true;
    }

public void onActivityResult(int requestCode, int resultCode, Intent intent) {

    super.onActivityResult(requestCode, resultCode, intent);

    if (requestCode == 0) {
        if (resultCode == RESULT_OK) {
            String contents = intent.getStringExtra("SCAN_RESULT");
            String format = intent.getStringExtra("SCAN_RESULT_FORMAT");

            // Handle successful scan

            String s = "http://www.google.com/search?q=";
            s += contents;
            Intent myIntent1 = new Intent(Intent.ACTION_VIEW, Uri.parse(s));
            startActivity(myIntent1);
            }
        else 
            if (resultCode == RESULT_CANCELED) {
                // Handle cancel
                }
            }
        }
    }

這是我自己的問題的完整答案,希望這對某人有所幫助:

到這里復制整個 IntentIntegrator 類,將其添加到您的應用程序中; 也去這里並將 IntentResult 類復制到您的應用程序。 現在將此添加到您的活動中(或通過按鈕/任何方式觸發掃描):

public boolean onTouchEvent(final MotionEvent event) {

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

    return true;
    }

public void onActivityResult(int requestCode, int resultCode, Intent intent) {
      IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
      if (scanResult != null) {
        // handle scan result
          String s = "http://www.google.com/search?q=";
            s += scanResult.getContents();

            Intent myIntent1 = new Intent(Intent.ACTION_VIEW, Uri.parse(s));
            startActivity(myIntent1);
      }
      // else continue with any other code you need in the method
      //...
    }

只調用條形碼掃描儀應用程序提供的服務而不是將代碼塊復制並粘貼到您自己的應用程序中會很棒,但這似乎是推薦的方式:(

為什么不使用提供的IntentIntegrator類? 這是項目文檔中提到的唯一方法,你看過那些嗎? https://github.com/zxing/zxing/wiki/Scanning-Via-Intent

我創建它是為了包含發送和解析 Intent 的這些細節,所以你不會打錯字。 例如,沒有額外的“com.google.zxing.client.android.SCAN.SCAN_MODE”之類的東西。

添加finishActivity(requestCode); 在 onActivityResult() 方法的末尾。

試試這個:用下面的代碼替換 onTouch 中的前兩行。 問題似乎出在掃描 QR 以外的代碼時。 請移除掃描過濾器並檢查一次。

Intent intent = new Intent("com.google.zxing.client.android.SCAN"); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);

我遇到了同樣的問題,所以我嘗試使用 Sean Owen 推薦的 IntentIntegrator 類。 我仍然遇到問題,直到我意識到這只會在嘗試掃描縱向條形碼時發生(最常見的是在手機上)。 事實證明,從縱向到橫向的方向變化會導致雙重掃描。 我通過向清單中的活動添加android:configChanges="orientation|keyboardHidden|screenSize"解決了這個問題。 您可能只需要一個方向,但這是未經測試的。

對於在創建 Adob​​e AIR Native Extension 時遇到此問題的任何用戶,請確保不僅將該行添加到您的 android 項目清單中,而且還要添加到您的 app.xml 中您的 android 清單添加項中的活動標記中。

這是我正在使用的解決方案。 它對我來說很好。

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

        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM