基於zxing-lib三步實現Android二維碼應用

只須要基於開源項目zxing-lib,即可輕鬆建立獨立二維碼App,也可將二維碼功能集成進App內。本文也是zxing-lib的使用文檔。同時拋磚引玉,歡迎你們一塊兒共建zxing-lib。 java


項目地址:https://github.com/wangym/zxing-client-android android

遵循協議:Apache License Version 2.0 git

簡介:zxing-lib是一款開源二維碼掃碼庫,基於ZXing進行剪裁和二次開發,支持更多的個性擴展功能,全庫僅52KB,以Android library project輸出,能被快速使用和集成。github



(如下步驟基於已有Android開發經驗爲前提)shell


一、環境準備: apache

檢出zxing-lib項目並導入IDEide

git clone git@github.com:wangym/zxing-client-android.git

導入IDE後將zxing-lib設爲Android library project,並以library方式引入你正在開發的Android代碼工程內 this


二、調用掃碼: spa

調用zxing-lib庫的掃碼界面code

/**
 * @author yumin
 */
public class MainActivity extends Activity {

    /**
     *
     */
    private static final int REQUEST_CODE = 200;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        //......
        initActivity();
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        if (null != data && requestCode == REQUEST_CODE) {
            switch (resultCode) {
                case Activity.RESULT_OK:
                    data.setClass(this, CaptureResultActivity.class);
                    startActivity(data);
                    break;
                default:
                    break;
            }
        }
    }

    private void initActivity() {

        //......
        Button btnScanUtf8 = (Button) findViewById(R.id.scan_utf_8);
        btnScanUtf8.setOnClickListener(new Button.OnClickListener() {
            @Override
            public void onClick(View view) {
                callCapture("UTF-8");
            }
        });
    }

    private void callCapture(String characterSet) {

        Intent intent = new Intent();
        intent.setAction(Intents.Scan.ACTION);
        // intent.putExtra(Intents.Scan.MODE, Intents.Scan.QR_CODE_MODE);
        intent.putExtra(Intents.Scan.CHARACTER_SET, characterSet);
        intent.putExtra(Intents.Scan.WIDTH, 600);
        intent.putExtra(Intents.Scan.HEIGHT, 400);
        // intent.putExtra(Intents.Scan.PROMPT_MESSAGE, "type your prompt message");
        intent.setClass(this, CaptureActivity.class);
        startActivityForResult(intent, REQUEST_CODE);
    }
}

調用CaptureActivity便可呼出掃碼界面,支持設定個性參數,當掃碼成功後返回到CaptureResultActivity


三、獲取結果:

獲取二維碼掃碼以後的結果

/**
 * @author yumin
 */
public class CaptureResultActivity extends Activity {

    /**
     *
     */
    private TextView tvResult;
    private TextView tvResultFormat;
    private TextView tvUri;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        //......
        initActivity();
        initData();
    }

    private void initActivity() {

        tvResult = (TextView) findViewById(R.id.tv_result);
        tvResultFormat = (TextView) findViewById(R.id.tv_result_format);
        tvUri = (TextView) findViewById(R.id.tv_uri);
    }

    private void initData() {

        Intent intent = getIntent();
        if (null != intent) {
            tvResult.setText(intent.getStringExtra(Intents.Scan.RESULT));
            tvResultFormat.setText(intent.getStringExtra(Intents.Scan.RESULT_FORMAT));
            tvUri.setText(intent.toUri(intent.getFlags()));
        }
    }
}

二維碼掃碼成功後調出CaptureResultActivity,上例將結果直接顯示,本質上是經過Intent獲取掃碼結果的



完整示例見zxing-lib-example。但請不要侷限於示例中的使用方式,好比在二維碼掃碼成功後,並不是只能經過一個Activity才能取到掃碼的結果。請結合具體場景靈活運用。


若有任何疑問或建議,請隨時聯繫我 :)

相關文章
相關標籤/搜索