首頁 » 教學專區 » Android心得分享專區 » [Android]How to make a QRcode scanner App?

[Android]How to make a QRcode scanner App?

這是自己學習Android的心得備忘錄, 透過下方內容,就可以製做QRcode掃瞄器!

目前是用Android Studio(AS)最新的版本:4.2.1去完成此專案,使用Windows10-X64平台.

一開始選擇Phone and Tablet下的[Empty Activity]

自訂合適的Project Name以及基本的環境設定:如使用Java 語言以及Minimum SDK的版本等. 按下[Finish]按鈕就完成專案的產生.

有使用過AS的人,  就不會陌生一開始的工作環境畫面.

然後點選左邊紅色框的[build.grade]的檔案,在右邊視窗最下方的右括號之前, 輸入以下內容, 然後按下[Sync Now]

 implementation ‘me.dm7.barcodescanner:zxing:1.9.13’

就可以把此程式最需要的Library安裝到專案中了.

然後在[grade.properties]的右邊畫面最底部, 輸入以下代碼, 以防止在編譯時出現錯誤訊息!

android.enableJetifier=true

Error Message–>Execution failed for task ‘:app:processDebugMainManifest’.
> Manifest merger failed with multiple errors, see logs

再來開啟AndroidManifest.xml, 加入二個權限. 一個是使用相機功能, 另一個是使用網路功能.

編輯MainActivity.class類別, 一開始先implements 紅色框的內容, 然後增加一個屬性mScannerView,此時AS環境裡會自動加入一個handleResult(Result rawResult)的方法.

再加入紅色框中的全部內容, 第一個是產生ZXingSCannerView的物件,以及設定它為主畫面的呈現.

第二個與第三個是分別增加各自必須的功能, 當程式在onResume()的方法執行時, 也就是程式作用時,會開啟相機功能進行掃瞄. 相反地, onPause()的方法是在程式變成背景時,會關閉相機preview的作用.

Android6.0之後, 都需要加入權限功能的判斷, 相機功能是其中一個. 在第一次執行程式時, 會出現提示畫面, 需要按下[allow]才能使用此程式, 之後再執行程式時, 就不需要再確認了, 會直接執行主程式. 這裡程式也多增加了一個自動對焦的功能

mScannerView.setAutoFocus(true);

整個類別最重要的一個方法, 當程式開始掃瞄QRcode時, 會主動去判斷哪些內容然後去執行相關的程式.

第一個紅色框作用是, 當掃瞄到有關網址的內容, 不論是”h”或”H”開頭的網址, 都會直接執行Intent.Action_View,也就是用Android手機內的預設瀏覽器去啟動掃瞄後得到的網址資訊.

第二個紅色框作用是, 不論是”S”或”s”開頭的內容, 會直接把資料帶到內建預設的簡訊程式裡去使用.

以目前疫情三級警戒的關係, 在進入營業場所時, 都需要掃瞄QRcode做實聯制.所以掃瞄後會直接把內容貼到簡訊內容裡, 只要直接按下[傳送]按鈕就完成登記了. 以避免用手寫增加感染的機率. Google Play中, 其實也有許多類似的程式, 但基本上大同小異.

第三個紅色框中, 如果不是以上二個條件下的內容時, 會跳出一個訊息畫面, 可以選擇[複製內容]/或[取消], 主要是方便直接用[貼上]的功能到儲存內容的程式中.

也可以再增加其他的判斷功能, 就端看開發者的用意為何了!

以下為AS環境中,用模擬器所呈現的畫面.  只是先確認程式是否能正常編譯執行, 此程式還是需要實機上的操作才可以.

回到AS環境下,在最上方功能表中, 找到Build \Build Bundle(s) /APK (s)\Build APK(S), 就會產生可以安裝在Android手機的apk檔案了. 在下方[locate]就能找到原始檔案了.

總結:

這是利用ZXingScanner 這個類別去製作此QRcode Scanner功能, 目前最新的版本是1.9.13, 作者也有提到, 不再維護更新了. 因為網路也有更好的Library, 例如:Google ML Kit!

個人認為加入此功能並不會太複雜, 很適合初學者去了解!

這裡提供此專案的source code, 也可以隨意更改使用!

以上僅供參考!

Share via:

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *