2022-04-21 Android开发扫描二维码
Android掃描二維碼信息
調用華為的scanplus庫做二維碼掃描
1.在項目的build.gradle文件中添加華為的maven開發庫地址,文件內容如下。buildscript 和allprojects 節點的repositories 節點內都添加了。
maven {url 'http://developer.huawei.com/repo/'}
// Top-level build file where you can add configuration options common to all sub-projects/modules.buildscript {repositories {google()jcenter()maven {url 'http://developer.huawei.com/repo/'}}dependencies {classpath 'com.android.tools.build:gradle:3.5.2'// NOTE: Do not place your application dependencies here; they belong// in the individual module build.gradle files} }def releaseTime() {return new Date().format("yyyy-MM-dd",java.util.TimeZone.getTimeZone("UTC")) }allprojects {repositories {google()jcenter()maven { url 'https://jitpack.io' }maven { url 'http://developer.huawei.com/repo/'}}ext {compileSdkVersion = 30buildToolsVersion = "30.0.3"minSdkVersion = 19targetSdkVersion = 30} }task clean(type: Delete) {delete rootProject.buildDir }2.app的build.gradle文件中添加庫的依賴,文件內容如下,文件中的其他部分省略了。
implementation 'com.huawei.hms:scanplus:1.1.1.301'
apply plugin: 'com.android.application'android {... }dependencies {implementation fileTree(dir: 'libs', include: ['*.jar'])...//implementation project(path: ':Venus')api 'com.gitee.premeditate:VenusAndroid:V1.0.22'//二維碼掃描庫implementation 'com.huawei.hms:scanplus:1.1.1.301' }3.在AndroidManifest.xml清單文件中聲明掃描二維碼的Activity和相關權限,文件內容如下。無關的內容省略。
<activity android:name="com.huawei.hms.hmsscankit.ScanKitActivity" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
4.在調用掃碼功能處按照如下函數執行
調用事件
掃碼功能的按鈕點擊事件,在這里去申請掃碼權限
/*** 掃描二維碼*/ private void scan() {requestPermission(CAMERA_REQ_CODE, 1); }請求權限
筆者在這里不調用動態申請權限。在設備中手動允許應用的相機權限但是仍不能掃碼,所以這里必須動態申請一次相機權限。
private void requestPermission(int requestCode, int mode) {ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE}, requestCode); }請求權限結果
權限請求結果,如果拒絕權限就不能繼續執行,允許權限就可以啟動掃碼界面進行掃碼。
@Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {if (permissions == null || grantResults == null) {return;}if (grantResults.length < 2 || grantResults[0] != PackageManager.PERMISSION_GRANTED || grantResults[1] != PackageManager.PERMISSION_GRANTED) {return;}if (requestCode == CAMERA_REQ_CODE) {ScanUtil.startScan(this, REQUEST_CODE_SCAN_ONE, new HmsScanAnalyzerOptions.Creator().setHmsScanTypes(HmsScan.QRCODE_SCAN_TYPE).create());} }掃碼結果
掃碼結果拿到的是HmsScan對象,通過打印可以看到二維碼的基本數據大概是如下結構的。可以通過HmsScan對象的originalValue屬性拿到二維碼的主要信息進行業務處理,如果掃描的二維碼與你的業務無關,可以做個簡易的提示并不處理這次掃描,如果是你系統的信息就執行你的業務。
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if (resultCode != RESULT_OK || data == null) {return;}if (requestCode == REQUEST_CODE_SCAN_ONE) {HmsScan obj = data.getParcelableExtra(ScanUtil.RESULT); // System.out.println(new Gson().toJson(obj));System.out.println(obj.originalValue);try {QRCode qrCode = new Gson().fromJson(obj.originalValue, QRCode.class);if (!QRCode.TITLE_DEFAULT.equals(qrCode.title)) {ToastUtil.show(this, "二維碼標識信息不正確");return;}queryEquipmentInfoByNumber(qrCode.number);} catch (Exception e) {ToastUtil.show(this, "請掃描移動便攜設備二維碼");}} }二維碼數據結構
{"HMS_SCAN_VERSION": 3,"cornerPoints": [{"x": 691,"y": 1080},{"x": 328,"y": 855},{"x": 544,"y": 492},{"x": 915,"y": 715}],"linkUrl": {"linkvalue": "https://u.wechat.com/EDTLAmRNzshSMzp21uQ4kBM","theme": ""},"originValueByte": [66,-58,-121,71,71,7,51,-94,-14,-9,82,-25,118,86,54,-122,23,66,-26,54,-10,-46,-12,84,69,68,-60,22,-43,36,-25,-89,54,-123,52,-41,-89,3,35,23,85,19,70,-76,36,-48],"originalValue": "https://u.wechat.com/EDTLAmRNzshSMzp21uQ4kBM","scanType": 1,"scanTypeForm": 1006,"showResult": "https://u.wechat.com/EDTLAmRNzshSMzp21uQ4kBM","zoomValue": 0.0 }業務
拿到掃描結果后執行你自己的業務
private void queryEquipmentInfoByNumber(String number) {Common.queryEquipmentByNumber(this,number); }5.截圖
這是程序界面,點擊右上角的掃碼按鈕,執行掃碼函數
Screenshot_20220421_101019_org.venus.mpeqi.jpg掃碼界面,如果是第一次掃碼會提示申請權限,選擇允許就好。掃碼界面出現二維碼后會很快識別到二維碼信息并退出。
Screenshot_20220421_101043_org.venus.mpeqi.jpg掃描到二維碼數據解析后進行業務處理,筆者這里就是掃描到系統內的設備信息并顯示。
Screenshot_20220421_101107_org.venus.mpeqi.jpg總結
以上是生活随笔為你收集整理的2022-04-21 Android开发扫描二维码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 苹果macbookpro多少钱_买一套可
- 下一篇: ATFX:美股持续走高,空头趋势或将终结