Android 二維碼(zxing)快速繼承
目前專案需要這方面的快速開發,但是很多都是講原理的,我記錄一下自己的開發過程,和一些需要定製的東西,以便後期需要,如果你需要快速繼承,那隻需要看前兩章就可以啦~
基於 zxing 的 GitHub 庫
當然,zxing 是 Google 寫的一個很 NB 的庫,但是其實封裝比不太好,對於我們快速繼承非常不友好,這邊我推薦一個
ofollow,noindex">zxing-android-embedded
目前大部分二維碼都是用這個為基礎來修改,怎麼使用呢~
App gradle 引入
在 build.gradle 檔案中:
repositories { jcenter() } dependencies { compile 'com.journeyapps:zxing-android-embedded:3.6.0' compile 'com.android.support:appcompat-v7:25.3.1'// Minimum 23+ is required }
快速接入
開啟預設的掃描介面:
new IntentIntegrator(this).initiateScan(); // `this` 是你開啟 Scan 頁面的 Activity // Get the results: @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data); if(result != null) { if(result.getContents() == null) { Toast.makeText(this, "Cancelled", Toast.LENGTH_LONG).show(); } else { Toast.makeText(this, "Scanned: " + result.getContents(), Toast.LENGTH_LONG).show(); } } else { super.onActivityResult(requestCode, resultCode, data); } }
在你需要的Activity 進行開啟即可
若是使用 Fragment 請使用下面程式碼
IntentIntegrator.forFragment(this).initiateScan(); // `this` 是你當前的 Fragment //如果你沒有使用 Google support library,使用IntentIntegrator.forSupportFragment(this) 代替。
一些可以自定義的選項
IntentIntegrator integrator = new IntentIntegrator(this); integrator.setDesiredBarcodeFormats(IntentIntegrator.ONE_D_CODE_TYPES);//有幾個選項,ONE_D_CODE_TYPES 僅支援條形碼、PRODUCT_CODE_TYPES僅支援二維碼、ALL_CODE_TYPES 預設全部支援 integrator.setPrompt("Scan a barcode");//自定義文字 integrator.setCameraId(0);// 使用自定義的攝像頭 0是前置,1是後置 integrator.setBeepEnabled(false);//是否有掃描成功的滴滴聲 integrator.setBarcodeImageEnabled(true);//是否儲存二維碼 integrator.initiateScan();//初始化掃描介面
生成條碼
雖然這不是此庫的主要目的,但它確實包含生成一些條形碼型別的基本支援:
try { BarcodeEncoder barcodeEncoder = new BarcodeEncoder(); Bitmap bitmap = barcodeEncoder.encodeBitmap("content", BarcodeFormat.QR_CODE, 400, 400); ImageView imageViewQrCode = (ImageView) findViewById(R.id.qrCode); imageViewQrCode.setImageBitmap(bitmap); } catch(Exception e) { }
當然你可以用這個做 wifi 二維碼掃描器,也非常好用。
改變方向(Scan 頁面預設是橫屏)
要更改方向,請在AndroidManifest.xml
中指定方向,並讓ManifestMerger
更新Activity
:
<activity android:name="com.journeyapps.barcodescanner.CaptureActivity" android:screenOrientation="fullSensor" tools:replace="screenOrientation" />
IntentIntegrator integrator = new IntentIntegrator(this); integrator.setOrientationLocked(false);//是否鎖定方向 integrator.initiateScan();
當然還可以自定義掃描頁面
這個下個版會進行詳細解釋~