只須要基於開源項目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才能取到掃碼的結果。請結合具體場景靈活運用。
若有任何疑問或建議,請隨時聯繫我 :)