有個二維碼是目前移動端和webAPP 常用是一種和用戶的交互方式,常用在社交,支付,電商app中,本文介紹實現條形碼與二維碼掃描。
在本次教程中,我們將使用ZXing庫讓我們的app實現條形碼和二維碼的掃描。
為什麼選擇ZXing要實現條形碼和二維碼掃描功能,常用的有下面幾種方法:
使用Google Play Service和Mobile Vision APIs。
使用barcodescanner庫。
使用ZXing庫。
我們來仔細分析以上三種方法各自的優缺點。
第一種,使用Google Play Service和Mobile Vision APIs。不合適,因為不是所有的用戶設備都有安裝Google Play Service,特別是在中國。
第二種,使用barcodescanner。也不合適,儘管barcodescanner的導入非常簡單,識別也很快,但是UI的調整比較困難。特別是當UI非常複雜時,你就需要拉取整個項目的源碼然後自己進行定製。
現在就只剩下ZXing了。ZXing庫由谷歌出品,所以在短期內應該不會停止維護。很多應用,報錯barcodescanner,都是基於ZXingk開發的。使用ZXing我們不用擔心用戶沒有安裝Google Play Service,而聚焦於開發和處理結果本身。
Zxing是Google提供的關於條碼(一維碼、二維碼)的解析工具,提供了二維碼的生成與解析的方法。
設置項目添加依賴在你的build.gradle文件(application級別)中,添加ZXing core
的庫。
dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') // 其他的庫在這裡... compile 'com.google.zxing:core:3.3.0' testCompile 'junit:junit:4.12'}
添加必要的權限在你的AndroidManifest.xml文件中,添加下面的代碼:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="io.github.marktony.espresso"> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.VIBRATE" /> <application ...
導入必要的類和資源文件將整個包複製到你的項目中。
注意:上面的包中的代碼我做了簡化,如果你需要ZXing示例項目此部分的完整的代碼,請訪問這裡,並下載相應的代碼。
代碼文件導入完成後,我們還需要導入下面的資源文件:
res/layout/activity_scan
- CaptureActivity的布局文件.
res/values/zxing_ids.xml
- zxing id的集合.
res/raw/beep.ogg
- 當掃描成功後播放的聲音文件.
res/drawable/...
- 共3個文件: scan_line.png, qr_code_bg.9.png, shadow.png.
現在我們從MainActivity啟動CaptureActivity並期待獲取相應的結果:
public class MainActivity extends AppCompatActivity { public final static int SCANNING_REQUEST_CODE = 1; private TextView textView; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = (TextView) findViewById(R.id.textView); textView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(MainActivity.this, CaptureActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivityForResult(intent, SCANNING_REQUEST_CODE); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { case SCANNING_REQUEST_CODE: if (resultCode == RESULT_OK) { final Bundle bundle = data.getExtras(); Handler handler = new Handler(Looper.getMainLooper()); handler.post(new Runnable() { @Override public void run() { textView.setText(bundle.getString("result")); } }); } break; default: break; } }}
我們可以在onActivityResult()方法中得到相應的結果。
注意: 如果你的app的target api level是23或者更高, 不要忘記適配運行時權限因為我們的app需要用到相機。
現在我們可以測試app是否成功運行了。訪問 qr-code-generator.com生成你想要的二維碼,然後進行愉快的測試吧。我們可以期待獲得下面的結果:
在這篇教程中,我們使用ZXing庫實現了條形碼和二維碼的掃描。在你自己的app中,你可能需要對掃描的結果進行進一步的處理,例如加載URL或者是從第三方數據源中獲取數據等等。
你可以在訪問Espresso項目主頁下載全部原始碼。Espresso是一個基於MVP架構,採用RxJava2, Retrofit2, Realm3.0, ZXing開發的快遞查詢App。
ZXing - ZXing("Zebra Crossing")項目官方主頁。
作者:TonnyL
連結:http://www.jianshu.com/p/2bea07e0c1b9
技術 - 思維 - 感悟