首頁 > 軟體

Android詳細講解谷歌推出的官方二維條碼掃描庫

2022-03-26 19:01:46

相信二維條碼掃描現在大家都已經不稀奇了,幾乎所有的App裡都會支援這個功能。

這裡我要問大家一個問題,你們都是如何在自己的App中加入二維條碼掃描功能的呢?

相信會有一大部分朋友說,使用的是ZXing或者ZBar這種開源庫。

但是不知道大家有沒有思考過,二維條碼功能這麼常見,為什麼Google卻沒有提供一個官方的二維條碼掃描庫呢?

反正我是沒思考過。有需求,找開源,這可能已經成了很多Android開發者的常態化思維。

但令我沒想到的是,官方的二維條碼掃描庫,它真的要來了。

由於我是Google的GDE,有的時候可以提前體驗到一些Google還未正式對外開放,仍在開發當中的API。

就在不久之前,我收到了一封Google發來的郵件,內容如下:

當我看到郵件裡提到了Google官方要推出一個二維條碼、條形碼掃描庫時,我立刻被吸引到了,並且跟Google表達了我想嚐鮮的意願。

幾經折騰之後,我終於將這個庫的一整套流程跑通了。總體來說,體驗還不錯,有優點也有缺點,下面我來逐條分析。

第一個優點是,API非常簡單,傻瓜式介面,初學者都會用。比起ZXing和ZBar的學本成本要低很多。

其次,更加保護使用者隱私性。因為它的功能實現是基於Intent機制委託Android系統來調起手機攝像頭的,系統掃描出結果之後再將資訊返回給我們,這樣我們就不用在自己的App當中去申請攝像頭許可權了。

至於缺點的話,最大的問題就是,它依賴於Google Play Service,所以對於國內手機而言的話,基本就是完全無法使用的(不過下文也有其他解決方案)。而如果你們的產品是面向海外市場的話,這條就算不上什麼缺點了。

另外我測試了一下,二維條碼的識別效率不算很高,至少目前跟微信的識別效率是沒法比的。但是畢竟後期升級維護都是靠Google,服務有保障,相信以後識別效率會有顯著的提升。

優缺點就介紹到這裡吧,如果你對這個庫感興趣,也想跟我一樣嚐鮮的話,那麼本篇文章接下來的內容就是教你如何整合並使用這個庫來進行二維條碼掃描。

首先確保你的手機有安裝Google Play Service,並且版本在21.45.15以上,不然後面的程式碼是跑不通的。

另外這個庫暫時還沒有上線,所以不能通過線上maven倉庫的方式整合到我們專案當中。而是要先將這個庫下載到本地,再通過本地maven倉庫的方式整合進來。

我們一步步操作。

這個庫的下載地址本來是在Google Drive上的,但是由於需要許可權才能存取下載,所以我將它上傳到了百度網路硬碟上共用給大家。

連結:https://pan.baidu.com/s/1yhVQqQUZ9goLaT8P4OzTVA?pwd=1234
提取碼:1234

下載完成後,在你電腦的當前登入使用者目錄下建立一個.m2/repository目錄,並將下載好的庫移到這個目錄當中解壓(注意解壓後的頂層目錄必須是com目錄)。

Linux或Mac使用者可以使用以下命令完成上述操作,Windows使用者請手動操作。

mkdir -p ~/.m2/repository
cd ~/.m2/repository
unzip <downloaded SDK zip file>

接下來在Android Studio中建立一個新的專案,並在專案根目錄的build.gradle檔案中新增以下設定:

allprojects {
repositories {
google()
mavenCentral()
mavenLocal() // added
}
}

注意一定要加入mavenLocal()這行,這樣才可以載入到我們本地下載下來的二維條碼掃描庫。

然後在app目錄下的build.gradle檔案中新增如下依賴:

dependencies {
...
implementation 'com.google.android.gms:play-services-code-scanner:16.0.0-eap1'
}

到這裡為止,我們就成功將Google的這個二維條碼掃描庫整合到我們專案當中了。

接下來介紹用法,用法就更加簡單了。因為它的本質是發起一個Intent來調起系統的相機程式,然後獲取掃描的結果值就可以了。不需要許可權宣告,也不需要動態申請許可權,呼叫一個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
            }
        }
    }
    
}

這裡當我們點選一個按鈕時,會呼叫GmsBarcodeScanning的getClient()方法來獲取一個GmsBarcodeScanner的範例。

然後呼叫startScan()即可開始掃描二維條碼,呼叫addOnSuccessListener()方法註冊一個回撥監聽。當獲取到二維條碼掃描結果的時候,我們將掃描出的結果顯示在TextView上面。

整體程式碼非常簡單,另外再附上activity_main.xml的佈局內容,同樣也非常簡單:

<?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>

現在執行一下程式,效果如下圖所示:

可以看到,整個二維條碼掃描介面都是由Google給我們提供的,掃描框也是典型的Google風格。我們只需要呼叫API,獲取掃描結果即可,接入成本非常非常低。

但是如此方便的二維條碼掃描庫卻只能造福海外的開發者,國內由於沒有Google Play Service,我們無法直接享受到這個庫所帶來的便利性。

於是我也將這個問題提給了Google,對於中國的開發者,如果也想要用這個二維條碼掃描庫怎麼辦?

得到的答覆是,Google是將ML Kit barcode scanner繫結成為了Google Play Service的一部分安裝到各個手機上的,如果我們的手機上沒有Google Play Service,那麼就需要將ML Kit barcode scanner的完整版本整合到我們的專案當中才行。

完整版本的整合檔案我也討來了,連結如下:

https://developers.google.com/ml-kit/vision/barcode-scanning/android

上述檔案中還包含了如何從一張圖片、或者一個Bitmap物件中解析二維條碼的功能,具體詳情請參考檔案即可,這裡就不再展開講解了。

一篇技術嚐鮮小短文送給大家。

到此這篇關於Android詳細講解谷歌推出的官方二維條碼掃描庫的文章就介紹到這了,更多相關Android 二維條碼掃描庫內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com