Last Updated on 8 years by Mas Herdi
Halo semuanya, bagi yang sudah pernah atau sedang ingin membuat QR Code Scanner, pasti paling tidak pernah membaca artikel saya tentang bagaimana cara membuat QR Code Scanner di Android. Artikel tersebut ditulis lebih dari tiga tahun yang lalu, sehingga sekarang sudah tidak begitu relevan. 🙂 Karena itu, kali ini saya akan mencoba untuk mengupdate artikel tersebut, dengan artikel berikut tentang cara terbaru membuat aplikasi QR Code scanner di Android dengan mudah, menggunakan Android Studio.
Pre-Requisites :
Oke, bagi yang ingin membaca-baca artikel lama saya tentang cara membuat QR Code Scanner di Android, bisa menuju link di bawah ini :
- Artikel Lama Membuat QR Code Scanner di Android (Bag. I)
- Artikel Lama Membuat QR Code Scanner di Android (Bag. II)
Android QR Code Library
Seperti biasa, kita akan menggunakan third party library untuk men-scan QR Code, karena kita tidak akan membuat fungsionalitas itu sendiri dari awal. Jika sudah ada yang buat, dan bagus, maka kita pakai punya mereka :D. Library yang akan kita gunakan adalah ZXing seperti biasa. Kita bisa juga menggunakan Google Mobile Vision, namun soal itu mungkin akan saya bahas di lain waktu.
Warming Up
Langsung saja, kita bisa mulai dengan membuat project/module baru di Android Studio, yang akan kita gunakan untuk aplikasi QR Code Scanner ini. Berbeda dengan di tutorial saya sebelumnya yang harus menginstall APK dan sebagainya, kali ini kita tidak perlu melakukannya, kita hanya perlu menambahkan satu baris line library baru pada file build.gradle. Tambahkan di bagian dependencies seperti contoh di bawah :
dependencies { ... compile 'info.vividcode.android.zxing:capture-activity:2.3.0-1.+' ... }
Setelah itu, lakukan sync Gradle supaya library dan project nya terupdate. Jika sudah, kita bisa membuka AndroidManifest.xml, dan menambahkan permissions sebagai berikut :
<uses-permission android:name="android.permission.CAMERA"/> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
Permission CAMERA digunakan karena untuk melakukan QR Code Scanning kita harus menggunakan kamera pada smartphone Android, karena itu aplikasi kita harus mendapatkan akses ke fitur kamera. Sedangkan permission lainnya sebagai penambah saja.
Kemudian, tambahkan juga CaptureActivity bawaan ZXing ke dalam list Activity di AndroidManifest.xml. CaptureActivity inilah yang nantinya akan dijalankan ketika kita melakukan QR Code scanning. Kodenya seperti berikut :
<activity android:name="info.vividcode.android.zxing.CaptureActivity" android:configChanges="orientation|keyboardHidden" android:screenOrientation="landscape" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:windowSoftInputMode="stateAlwaysHidden"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> <intent-filter> <action android:name="com.google.zxing.client.android.SCAN" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
Jika sudah, kalian bisa mulai mencoding layout dan fungsi utama untuk melakukan QR Code Scanning. Jadi mekanismenya, Activity kita akan memanggil CaptureActivity untuk melakukan proses scan, setelah berhasil, maka kita akan dikembalikan lagi ke Activity kita. Hasil dari scan QR Code akan dimasukkan ke dalam bundle Intent, yang bisa kita akses pada method onActivityResult() di MainActivity.
Untuk layout, saya menambahkan satu tombol scan dan beberapa TextView untuk tempat menampung hasil scan, kodenya ada di file content_main.xml, kurang lebih seperti di bawah ini :
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" app:layout_behavior="@string/appbar_scrolling_view_behavior" tools:context="id.web.twoh.easyqr.MainActivity" tools:showIn="@layout/activity_main"> <TextView android:layout_marginTop="150dp" android:id="@+id/tv_title" android:layout_alignParentTop="true" android:textColor="@color/status_text" android:textAppearance="@android:style/TextAppearance.Material.Headline" android:layout_centerHorizontal="true" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TWOH's Easy QR Scanner" /> <Button android:layout_centerHorizontal="true" android:text="Mulai Scan" android:id="@+id/bt_scan" android:layout_below="@id/tv_title" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:layout_marginTop="50dp" android:layout_below="@id/bt_scan" android:id="@+id/tv_scanresult_title" android:textAppearance="@android:style/TextAppearance.Material.Body1" android:layout_centerHorizontal="true" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hasil Scan : " /> <TextView android:layout_below="@id/tv_scanresult_title" android:id="@+id/tv_scanresult" android:textColor="@color/status_text" android:textAppearance="@android:style/TextAppearance.Material.Large" android:layout_centerHorizontal="true" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="_" /> </RelativeLayout>
Selanjutnya pada file MainActivity.java, inilah kode yang akan menginitiate fungsi QR Code scanning ketika tombol btScan diklik :
Button btScan = (Button) findViewById(R.id.bt_scan); btScan.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // Membuat intent baru untuk memanggil CaptureActivity bawaan ZXing Intent captureIntent = new Intent(MainActivity.this, CaptureActivity.class); // Kemudian kita mengeset pesan yang akan ditampilkan ke user saat menjalankan QRCode scanning CaptureActivityIntents.setPromptMessage(captureIntent, "Barcode scanning..."); // Melakukan startActivityForResult, untuk menangkap balikan hasil dari QR Code scanning startActivityForResult(captureIntent, 0); } });
Langkah berikutnya adalah menangkap hasil dari QR Code scanning dengan menggunakan method onActivityResult() pada MainActivity.java. Kalian harus meng-override method onActivityResult() dan menggantinya dengan kode di bawah ini :
@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 0) { if (resultCode == Activity.RESULT_OK && data != null) { String value = data.getStringExtra("SCAN_RESULT"); tvScanResult.setText(value); } else if (resultCode == Activity.RESULT_CANCELED) { tvScanResult.setText("Scanning Gagal, mohon coba lagi."); } } else { } super.onActivityResult(requestCode, resultCode, data); }
Pada intinya, kode di atas berguna akan mengecek apakah balikan dari QR code scanning statusnya OK/sukses, dan ada data yang bisa kita ambil. Jika ada, maka kita akan menggunakan key SCAN_RESULT, untuk mengambil value hasil scanning QR code yang tersimpan dalam Intent balikan. Value tersebut nantinya akan kita masukkan ke dalam TextView sebagai hasil dari scan QR Code.
Demo
Oke, untuk demonya, kita akan mencoba men-scan QR Code berikut :
Dan hasilnya adalah proses di bawah ini 🙂 Mulai dari klik tombol “Scan”, kemudian halaman barcode scanning, dan terakhir kembali ke halaman awal dengan menyertakan hasil scan di bagian bawah.
That’s all ! Semoga membantu. 🙂 Dan jangan lupa untuk clone project nya sebagai Android Studio module di GitHub saya, dengan terlebih dahulu follow dan star project tersebut. 😀 Silahkan bertanya di bagian komentar jika ada yang kurang jelas.
koq gagal yang gan wkt di copy dari github?
Jangan dicopy gan, diimport as module saja 🙂
btScan.setOnClickListener(new View.OnClickListener() cannot resolve symbol setOnClickListener, kenapa ini gan?
diimpor dulu gan view OnClickListener-nya 🙂
udah bisa gan, pas di run manggil captureactivity nya zxing
W/CameraBase: An error occurred while connecting to camera: 0
W/CaptureActivity: Unexpected error initializing camera
java.lang.RuntimeException: Fail to connect to camera service
sudah bisa juga gan.
ninggalin jejak siapa tau ada yang mengalami masalah seperti saya, di “https://stackoverflow.com/questions/29996819/w-camerabase-an-error-occurred-while-connecting-to-camera-0/33244795#33244795” ternyata harus di izinkan manual izin cameranya dari setitigs>app>permisions
sip thanks sharing nya gan
bisa minta detail gan, importnya itu per project atau satu bundel eksrakan??
import nya as Android Studio module ya 🙂
Mas, Hafizh Herdi bisa minta kontak whatsapp / bbm / facebooknya ?
saya ada yang ingin BANYAK bertanya sama mas masalah scan barcode di dalam aplikasi android ini 🙂
lewat sini aja ya gan 🙂
Mas, Hafizh Herdi bisa minta kontak whatsapp / bbm / facebooknya ?
saya ada yang ingin BANYAK bertanya sama mas masalah scan barcode di dalam aplikasi android ini.. 🙂
mass tanyaa…
gmn caranya agar pemindaian scannya mencocokan dengan yang ad d database, kalau cocok yg d scan dengan data yg d database maka datanya tmpil jika tidak pesan eror kluar mas??mhon pncrhannya mas ☺
bisa saja gan, yang dibandingkan bukan QR Code nya namun hasil scan dari QR Code tersebut dibandingkan dengan yang ada di database
gan itu kan pas nambahin camptureActivity di manifesh kok ga bisa.
make sure ada internet
Mas, saya selama ini memanfaatkan qr code Dan barcode dalam lukisan saya sehingga terhubung dengan beberapa hyperlink Yang aku kehendaki, terasa sangat umum kedepan ya, meskipun saya sekarang masih Pioneer di antara pelukis, Yang saya inginkankan, saya mau pesan ke anda, tolong bikinkan application android Yang hanya membaca hasil lukisan tanpa barcode atau qr code, bila application di scankan secara langsung dapat terhbung dengan hyperlink Yang saya inginkan
harus ada semacam tanda gan seperti barcode / qr code
mas,,bsa mnta nomor WA atau BBM ga, soalnya mau tanya tentang cara buat aplikasi wisata..
bisa langsung ke email saya saja bro yang di contact us
mas kok aplikasi saya, pas dibuka langsung tampilan untuk baca qrcode nya yaah(buka kamera), gak ada tampilan awal untuk pencet tombol
Salah di manifest nya mungkin
Mas hafiz , untuk memanfaatkan zxing apakah memang harus install zxing terlebih dahulu yaa ? karna pas saya tes dia lngsung nge link ke playstore dan harus install zxing dulu , selanjutnya baru bisa langsung, btw saya ngetes tutor lain , tutor mas hafiz belum saya coba hehe
Tutor lain kurang canggih itu hehe
Kalo yang dari tutorial punya saya, tidak perlu karena ZXing nya udah diembed sekaligus di sini 🙂 “`compile ‘info.vividcode.android.zxing:capture-activity:2.3.0-1.+’“`
Semoga membantu
sip mas ini saya sudah coba dan work hehe , thanks tutornya , sangat bermanfaat , sukses mas 🙂
Sippp, jangan lupa subscribe kami ya dan share ke temen2 di socmed juga hehe
Sukses juga 🙂
Om ini kok OnClickListener nya cannot resolve symbol ya??
Di import dulu gan class nya
Oh sudah bisa om, thanks 😀
Om ini mau ane build kok error ya
Error:Execution failed for task ‘:app:mergeDebugResources’.
> C:\Users\MRX\AndroidStudioProjects\QRFix\app\src\main\res\values\dimens.xml:7:6: Error: The processing instruction target matching “[xX][mM][lL]” is not allowed.
Letaknya di dimens sih
Mohon solusinya
Coba diclean dulu gan, atau langsung build dari source code di github saya
Udah bisa om, sekarang udah jadi APK malah ga keluar tampilan nya
Maksudnya gimana ya?
Coba dari github compile
App nya jalan tapi tampilan menu nya ga keluar
Nanti saya coba dari github compile
Kemungkinan karena tampilan XML menunya belum ada itu, yup coba aja compile langsung dari GitHub kita gan, karena yang lain bisa2 aja 🙂
Om ini kok hasil scan nya ga keluar ya ??
Coba langsung compile dari sini https://github.com/twoh/twoh-easy-QRCode-scanner-sampleapp
Bagaimana jika lebih dari 1 scan. apakah hasil scan lama akan hilang atau dimunculkan secara list..
Bagaimana jika lebih dari 1 scan. apakah hasil scan lama akan hilang atau dimunculkan secara list…
Hilang, kecuali disave ke database terlebih dahulu
gan.punya saya ko pas di sync di gradl nya ko eror mulu ya,.tolong pencerahannya gan
Error nya gimana dulu….
Mas,kalo bedanya script ini “compile ‘me.dm7.barcodescanner:zxing:1.9′” sama “compile ‘info.vividcode.android.zxing:capture-activity:2.3.0-1.+'” bedanya apa,.?
Mohon bimbingannya
Ini untuk engine barcode scanner nya ‘me.dm7.barcodescanner:zxing:1.9′
Ini untuk activity nya ‘info.vividcode.android.zxing:capture-activity:2.3.0-1.+′
cara menambah fungsi flashlight ,share,copas pada qr code
hmmm di Google pasti ada kok hehe