日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android 二维码扫码功能实现(Zxing集成,避坑启示)

發(fā)布時間:2024/8/23 Android 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android 二维码扫码功能实现(Zxing集成,避坑启示) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

這兩天想要實現(xiàn)一個能掃碼的app,找了一下,發(fā)現(xiàn)zxing用的比較多,就在網(wǎng)上找了找怎么用zxing。我主要是按照宇寶守護神的博文“Android 二維碼的掃碼功能實現(xiàn)(一)”的步驟完成的,博文鏈接在此:https://blog.csdn.net/qq_34902522/article/details/78384661

但是這個博文的時間比較早,2017年的,所以在按照他的步驟實現(xiàn)過程中,我遇到了非常非常多原作者沒有遇見的坑,在這里我完整的把我的過程記錄下來(真的是血淚史啊@~@)

zxing開源項目的地址:https://github.com/zxing/zxing/releases,把zxing項目下載下來。

1. 在Android Studio中新建一個空白項目。

2. 在新建項目中,file→new→import Module,將下載好的zxing項目作為module導(dǎo)入進來,注意,選擇android這個文件夾。然后next→finish。這里面可以按照自己的需要給module取名,默認(rèn)的“android”也是可以的。

3. 我們可以看到導(dǎo)進來之后,project中出現(xiàn)了一個名為“android”的文件夾

同時也出現(xiàn)了我們遇到的第一個bug,提示“The minSdk version should not be declared in the android manifest file. You can move the version from the manifest to the defaultConfig in the build.gradle file.” 根據(jù)提示,打開android(新導(dǎo)入的module名)→src→main→AndroidMainfest.xml,里面定義了一句

<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="22"/>

把它刪掉就好了。重新Sync整個項目就沒有問題了。

4. 導(dǎo)入的步驟還沒有做完,打開新導(dǎo)入庫(我這里是android)的build.gradle,① 把"apply plugin: ‘com.android.application’語句改成"apply plugin: ‘com.android.library",② 刪掉"applicationId “com.google.zxing.client.android”";③?添加

dependencies{implementation 'com.google.zxing:android-core:3.3.0'implementation 'com.google.zxing:core:3.3.3'implementation 'com.google.zxing:android-integration:3.3.0' }

上面添加的代碼段中,解決了第一個坑,core版本要選3.3.3的,因為在3.3.0版本中,會缺少一些我們掃碼過程中必須要用的函數(shù)比如說getStartTimestamp()、getEndTimestamp()等,宇寶守護神也遇到了這個問題,但是他通過暴力地把函數(shù)改了來解決這個問題,可惜我不只有這個問題,還有暴力不能解決的。尋找問題的方法:下面這個鏈接里面有各個版本的jar包,下載下來,通過jd-gui將jar包反編譯就可以發(fā)現(xiàn)其中的差別,通過查找自己缺失的函數(shù)來確定使用哪個版本的jar包。

https://repo1.maven.org/maven2/com/google/zxing/

5. 繼續(xù)引庫。右鍵項目,Open Module Settings→打開窗口中左邊選擇application module(app),右邊選dependencies→點綠色加號→Module dependency→:android→OK,OK.

6.Sync后,又一個意外之喜來了,提示錯誤“java.lang.RuntimeException: Manifest merger failed with multiple errors, see logs”。接下來我們要看看是什么情況。點擊左下角Terminal,輸入

gradlew compileDebugSource --stacktrace -info

Terminal里面輸出了很多亂七八糟的東西,往上翻翻,看到了error了。部分如下:

打開看之后,發(fā)現(xiàn)是所有switch-case出錯了,查找資料發(fā)現(xiàn),改成if-else格式就可以了。接下來就是改了,按照提示,找到對應(yīng)的文件下面,把所有報錯的地方的switch-case改成if-else。

7.再Sync,當(dāng)當(dāng)當(dāng)當(dāng)!有一個bug來啦,如下

提示說Manifest文件出問題了,那就去看看Androidmanifest.xml,打開這個文件后,點擊下圖左下角Merged Manifest,就可以在下圖右邊的框框里面看到error信息了。

根據(jù)提示,刪除android:AndroidManifest.xml中的

android:icon="@drawable/launcher_icon"

然后按照錯誤提示修改一下代碼里面sdk的版本,或者直接點一下提示里面給的建議,好像會直接幫修改好,輕松快樂。

8. 再Sync,終于沒有錯了。下面可以跑教程博客里面給出的代碼了,代碼在上述鏈接里面有給,這里就不再粘了。還有幾個bug需要我們?nèi)バ薷摹?/p>

第一個問題:提示沒有下面兩個類。我的解決非常暴力,直接在下載的zxing文件里面搜索,找到IntentIntegrator.java和IntentResult.java,把它們復(fù)制到MainActivity文件夾下面,這樣就不需要import了,直接把這兩句話刪了。

復(fù)制過來之后,project中就變成了下圖這樣

但是需要注意的是,我們要打開把IntentIntegrator.java和IntentResult.java開頭的那個packet名給改了,MainActivity里面是啥樣,這倆就改成啥樣。

還有一個小地方,直接復(fù)制過來的話會有如下這個錯誤

我們需要在layout文件夾下面的activity_main.xml中添加button的布局控件,下面這段代碼作為一個小樣例放在這里。

<Buttonandroid:id="@+id/scanner"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="掃碼"/>

到這一步,我們基本上解決了所有bug,下面就可以輕松愉快地真機調(diào)試,開始我們的第一步啦。

總結(jié)

以上是生活随笔為你收集整理的Android 二维码扫码功能实现(Zxing集成,避坑启示)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。