Android詳細(xì)講解谷歌推出的官方二維碼掃描庫(kù)
相信二維碼掃描現(xiàn)在大家都已經(jīng)不稀奇了,幾乎所有的App里都會(huì)支持這個(gè)功能。
這里我要問大家一個(gè)問題,你們都是如何在自己的App中加入二維碼掃描功能的呢?
相信會(huì)有一大部分朋友說,使用的是ZXing或者ZBar這種開源庫(kù)。
但是不知道大家有沒有思考過,二維碼功能這么常見,為什么Google卻沒有提供一個(gè)官方的二維碼掃描庫(kù)呢?
反正我是沒思考過。有需求,找開源,這可能已經(jīng)成了很多Android開發(fā)者的常態(tài)化思維。
但令我沒想到的是,官方的二維碼掃描庫(kù),它真的要來(lái)了。
由于我是Google的GDE,有的時(shí)候可以提前體驗(yàn)到一些Google還未正式對(duì)外開放,仍在開發(fā)當(dāng)中的API。
就在不久之前,我收到了一封Google發(fā)來(lái)的郵件,內(nèi)容如下:

當(dāng)我看到郵件里提到了Google官方要推出一個(gè)二維碼、條形碼掃描庫(kù)時(shí),我立刻被吸引到了,并且跟Google表達(dá)了我想嘗鮮的意愿。
幾經(jīng)折騰之后,我終于將這個(gè)庫(kù)的一整套流程跑通了??傮w來(lái)說,體驗(yàn)還不錯(cuò),有優(yōu)點(diǎn)也有缺點(diǎn),下面我來(lái)逐條分析。
第一個(gè)優(yōu)點(diǎn)是,API非常簡(jiǎn)單,傻瓜式接口,初學(xué)者都會(huì)用。比起ZXing和ZBar的學(xué)本成本要低很多。
其次,更加保護(hù)用戶隱私性。因?yàn)樗墓δ軐?shí)現(xiàn)是基于Intent機(jī)制委托Android系統(tǒng)來(lái)調(diào)起手機(jī)攝像頭的,系統(tǒng)掃描出結(jié)果之后再將信息返回給我們,這樣我們就不用在自己的App當(dāng)中去申請(qǐng)攝像頭權(quán)限了。
至于缺點(diǎn)的話,最大的問題就是,它依賴于Google Play Service,所以對(duì)于國(guó)內(nèi)手機(jī)而言的話,基本就是完全無(wú)法使用的(不過下文也有其他解決方案)。而如果你們的產(chǎn)品是面向海外市場(chǎng)的話,這條就算不上什么缺點(diǎn)了。
另外我測(cè)試了一下,二維碼的識(shí)別效率不算很高,至少目前跟微信的識(shí)別效率是沒法比的。但是畢竟后期升級(jí)維護(hù)都是靠Google,服務(wù)有保障,相信以后識(shí)別效率會(huì)有顯著的提升。
優(yōu)缺點(diǎn)就介紹到這里吧,如果你對(duì)這個(gè)庫(kù)感興趣,也想跟我一樣嘗鮮的話,那么本篇文章接下來(lái)的內(nèi)容就是教你如何集成并使用這個(gè)庫(kù)來(lái)進(jìn)行二維碼掃描。
首先確保你的手機(jī)有安裝Google Play Service,并且版本在21.45.15以上,不然后面的代碼是跑不通的。
另外這個(gè)庫(kù)暫時(shí)還沒有上線,所以不能通過在線maven倉(cāng)庫(kù)的方式集成到我們項(xiàng)目當(dāng)中。而是要先將這個(gè)庫(kù)下載到本地,再通過本地maven倉(cāng)庫(kù)的方式集成進(jìn)來(lái)。
我們一步步操作。
這個(gè)庫(kù)的下載地址本來(lái)是在Google Drive上的,但是由于需要權(quán)限才能訪問下載,所以我將它上傳到了百度網(wǎng)盤上共享給大家。
鏈接:https://pan.baidu.com/s/1yhVQqQUZ9goLaT8P4OzTVA?pwd=1234
提取碼:1234
下載完成后,在你電腦的當(dāng)前登錄用戶目錄下創(chuàng)建一個(gè).m2/repository目錄,并將下載好的庫(kù)移到這個(gè)目錄當(dāng)中解壓(注意解壓后的頂層目錄必須是com目錄)。
Linux或Mac用戶可以使用以下命令完成上述操作,Windows用戶請(qǐng)手動(dòng)操作。
mkdir -p ~/.m2/repository
cd ~/.m2/repository
unzip <downloaded SDK zip file>
接下來(lái)在Android Studio中創(chuàng)建一個(gè)新的項(xiàng)目,并在項(xiàng)目根目錄的build.gradle文件中添加以下配置:
allprojects {
repositories {
google()
mavenCentral()
mavenLocal() // added
}
}
注意一定要加入mavenLocal()這行,這樣才可以加載到我們本地下載下來(lái)的二維碼掃描庫(kù)。
然后在app目錄下的build.gradle文件中添加如下依賴:
dependencies {
...
implementation 'com.google.android.gms:play-services-code-scanner:16.0.0-eap1'
}
到這里為止,我們就成功將Google的這個(gè)二維碼掃描庫(kù)集成到我們項(xiàng)目當(dāng)中了。
接下來(lái)介紹用法,用法就更加簡(jiǎn)單了。因?yàn)樗谋举|(zhì)是發(fā)起一個(gè)Intent來(lái)調(diào)起系統(tǒng)的相機(jī)程序,然后獲取掃描的結(jié)果值就可以了。不需要權(quán)限聲明,也不需要?jiǎng)討B(tài)申請(qǐng)權(quán)限,調(diào)用一個(gè)API即可搞定。代碼如下所示:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val button = findViewById<Button>(R.id.button)
val textView = findViewById<TextView>(R.id.text_view)
button.setOnClickListener {
val scanner = GmsBarcodeScanning.getClient(applicationContext)
scanner.startScan().addOnSuccessListener {
val result = it.rawValue
textView.text = result
}
}
}
}
這里當(dāng)我們點(diǎn)擊一個(gè)按鈕時(shí),會(huì)調(diào)用GmsBarcodeScanning的getClient()方法來(lái)獲取一個(gè)GmsBarcodeScanner的實(shí)例。
然后調(diào)用startScan()即可開始掃描二維碼,調(diào)用addOnSuccessListener()方法注冊(cè)一個(gè)回調(diào)監(jiān)聽。當(dāng)獲取到二維碼掃描結(jié)果的時(shí)候,我們將掃描出的結(jié)果顯示在TextView上面。
整體代碼非常簡(jiǎn)單,另外再附上activity_main.xml的布局內(nèi)容,同樣也非常簡(jiǎn)單:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Scan Code" />
<TextView
android:id="@+id/text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
現(xiàn)在運(yùn)行一下程序,效果如下圖所示:

可以看到,整個(gè)二維碼掃描界面都是由Google給我們提供的,掃描框也是典型的Google風(fēng)格。我們只需要調(diào)用API,獲取掃描結(jié)果即可,接入成本非常非常低。
但是如此方便的二維碼掃描庫(kù)卻只能造福海外的開發(fā)者,國(guó)內(nèi)由于沒有Google Play Service,我們無(wú)法直接享受到這個(gè)庫(kù)所帶來(lái)的便利性。
于是我也將這個(gè)問題提給了Google,對(duì)于中國(guó)的開發(fā)者,如果也想要用這個(gè)二維碼掃描庫(kù)怎么辦?
得到的答復(fù)是,Google是將ML Kit barcode scanner綁定成為了Google Play Service的一部分安裝到各個(gè)手機(jī)上的,如果我們的手機(jī)上沒有Google Play Service,那么就需要將ML Kit barcode scanner的完整版本集成到我們的項(xiàng)目當(dāng)中才行。
完整版本的集成文檔我也討來(lái)了,鏈接如下:
https://developers.google.com/ml-kit/vision/barcode-scanning/android
上述文檔中還包含了如何從一張圖片、或者一個(gè)Bitmap對(duì)象中解析二維碼的功能,具體詳情請(qǐng)參考文檔即可,這里就不再展開講解了。
一篇技術(shù)嘗鮮小短文送給大家。
到此這篇關(guān)于Android詳細(xì)講解谷歌推出的官方二維碼掃描庫(kù)的文章就介紹到這了,更多相關(guān)Android 二維碼掃描庫(kù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Android實(shí)現(xiàn)掃描和生成二維碼
- Android實(shí)現(xiàn)掃描二維碼功能
- Android studio 實(shí)現(xiàn)手機(jī)掃描二維碼功能
- Android如何實(shí)現(xiàn)掃描和生成二維碼
- Android掃描和生成二維碼
- Android 二維碼掃描和生成二維碼功能
- android實(shí)現(xiàn)掃描網(wǎng)頁(yè)二維碼進(jìn)行網(wǎng)頁(yè)登錄功能
- Android開發(fā)實(shí)現(xiàn)模仿360二維碼掃描功能實(shí)例詳解
- Android中利用zxing實(shí)現(xiàn)自己的二維碼掃描識(shí)別詳解
相關(guān)文章
使用RecyclerView實(shí)現(xiàn)Item點(diǎn)擊事件
這篇文章主要介紹了使用RecyclerView實(shí)現(xiàn)Item點(diǎn)擊事件,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08
Kotlin與Java相互調(diào)用的完整實(shí)例
Kotlin的設(shè)計(jì)過程中就考慮到了與Java的互操作性,在Kotlin中可以直接調(diào)用既有的Java代碼,反過來(lái)在Java中也可以很流暢地使用Kotlin代碼,這篇文章主要給大家介紹了關(guān)于Kotlin與Java相互調(diào)用的相關(guān)資料,需要的朋友可以參考下2021-12-12
Android重寫TextView實(shí)現(xiàn)文字整齊排版的方法(附demo源碼下載)
這篇文章主要介紹了Android重寫TextView實(shí)現(xiàn)文字整齊排版的方法,結(jié)合實(shí)例形式分析了Android重寫TextView實(shí)現(xiàn)文字整齊排版的相關(guān)技巧,并附帶demo源碼供讀者下載參考,需要的朋友可以參考下2016-02-02
Android使用MediaRecorder實(shí)現(xiàn)錄音及播放
這篇文章主要為大家詳細(xì)介紹了Android使用MediaRecorder實(shí)現(xiàn)錄音及播放,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-02-02
Activity跳轉(zhuǎn)時(shí)生命周期跟蹤的實(shí)例
下面小編就為大家?guī)?lái)一篇Activity跳轉(zhuǎn)時(shí)生命周期跟蹤的實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2017-03-03
完美解決EditText和ScrollView的滾動(dòng)沖突(下)
這篇文章再次為大家詳細(xì)介紹了完美解決EditText和ScrollView滾動(dòng)沖突的方法,感興趣的小伙伴們可以參考一下2016-06-06
Android?Springboot?實(shí)現(xiàn)SSE通信案例詳解
SSE是一種用于實(shí)現(xiàn)服務(wù)器主動(dòng)向客戶端推送數(shù)據(jù)的技術(shù),它基于?HTTP?協(xié)議,利用了其長(zhǎng)連接特性,在客戶端與服務(wù)器之間建立一條持久化連接,并通過這條連接實(shí)現(xiàn)服務(wù)器向客戶端的實(shí)時(shí)數(shù)據(jù)推送,這篇文章主要介紹了Android?Springboot?實(shí)現(xiàn)SSE通信案例,需要的朋友可以參考下2024-07-07
ERROR/AndroidRuntime(17121)的問題解決
ERROR/AndroidRuntime(17121)的問題解決,需要的朋友可以參考一下2013-05-05

