When a requirement in your app to scan bar codes and QR codes, in this tutorial we will see how to scanning bar codes and QR codes. Here I am using Zxing and Zbar open source libraries. you can choose any one of the library.
Screen Shots:
Download Source Code
Step 1: Build Gradle
To start this application we need to include Zxing and Zbar dependencies in our build.gradle file.Check the below my build.gradle file.
build.gradle:
apply plugin: 'com.android.application' android { compileSdkVersion 25 buildToolsVersion "25.0.2" defaultConfig { applicationId "com.prasad.zxingscannerex" minSdkVersion 15 targetSdkVersion 25 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile 'com.android.support:appcompat-v7:25.1.0' compile 'com.android.support.constraint:constraint-layout:1.0.0-beta4' testCompile 'junit:junit:4.12' compile 'me.dm7.barcodescanner:zxing:1.9' compile 'me.dm7.barcodescanner:zbar:1.9' }
Step 2: XML Layouts
Open activity_main.xml file and do the below changes.
activity_main.xml:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#ffffff"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:layout_margin="10dp" android:orientation="vertical"> <Button android:id="@+id/btn_scanner" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Zxing Scanner" android:textAllCaps="false" /> <Button android:id="@+id/btn_zbar_scanner" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:text="Zbar Scanner" android:textAllCaps="false" /> </LinearLayout> </RelativeLayout>
Create a new layout resource name as activity_zxing_scanner.xml and modify below changes.
activity_zxing_scanner.xml:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#ffffff"> <FrameLayout android:id="@+id/content_frame" android:layout_width="match_parent" android:layout_height="match_parent" /> </RelativeLayout>
Create a new layout resource name as activity_zbar_scanner.xml and modify below changes.
activity_zbar_scanner.xml:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#ffffff"> <FrameLayout android:id="@+id/content_frame" android:layout_width="match_parent" android:layout_height="match_parent" /> </RelativeLayout>
Step 3: Java Classes
Open MainActivity.java class and do the below changes.
MainActivity.java:
package com.prasad.zxingscannerex; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button scannerBtn = (Button) findViewById(R.id.btn_scanner); Button zbarScannerBtn = (Button) findViewById(R.id.btn_zbar_scanner); scannerBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(v.getContext(), ZxingScannerActivity.class); startActivity(intent); } }); zbarScannerBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(v.getContext(), ZbarScannerActivity.class); startActivity(intent); } }); } }
Create a new Activity java class name as ZxingScannerActivity.java and modify below changes.
ZxingScannerActivity.java:
package com.prasad.zxingscannerex; import android.Manifest; import android.content.pm.PackageManager; import android.os.Bundle; import android.os.Handler; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; import android.view.ViewGroup; import android.widget.Toast; import com.google.zxing.Result; import me.dm7.barcodescanner.zxing.ZXingScannerView; public class ZxingScannerActivity extends AppCompatActivity implements ZXingScannerView.ResultHandler { private ZXingScannerView mScannerView; static final Integer CAMERA = 0x1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_zxing_scanner); ViewGroup contentFrame = (ViewGroup) findViewById(R.id.content_frame); mScannerView = new ZXingScannerView(this); contentFrame.addView(mScannerView); askForPermission(Manifest.permission.CAMERA, CAMERA); } private void askForPermission(String permission, Integer requestCode) { if (ContextCompat.checkSelfPermission(ZxingScannerActivity.this, permission) != PackageManager.PERMISSION_GRANTED) { // Should we show an explanation? if (ActivityCompat.shouldShowRequestPermissionRationale(ZxingScannerActivity.this, permission)) { //This is called if user has denied the permission before //In this case I am just asking the permission again ActivityCompat.requestPermissions(ZxingScannerActivity.this, new String[]{permission}, requestCode); } else { ActivityCompat.requestPermissions(ZxingScannerActivity.this, new String[]{permission}, requestCode); } } else { // Toast.makeText(this, "" + permission + " is already granted.", Toast.LENGTH_SHORT).show(); mScannerView.setResultHandler(this); mScannerView.startCamera(); } } @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (ActivityCompat.checkSelfPermission(this, permissions[0]) == PackageManager.PERMISSION_GRANTED) { switch (requestCode) { //Camera case 1: mScannerView.setResultHandler(this); mScannerView.startCamera(); break; } Toast.makeText(this, "Permission granted", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(this, "Permission denied", Toast.LENGTH_SHORT).show(); } } @Override public void onPause() { super.onPause(); mScannerView.stopCamera(); } @Override public void handleResult(Result result) { Toast.makeText(this, "Contents = " + result.getText() + ", Format = " + result.getBarcodeFormat().toString(), Toast.LENGTH_SHORT).show(); // * Wait 3 seconds to resume the preview. Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { mScannerView.resumeCameraPreview(ZxingScannerActivity.this); } }, 3000); } }
Create a new Activity java class name as ZbarScannerActivity.java and modify below changes.
ZbarScannerActivity.java:
package com.prasad.zxingscannerex; import android.Manifest; import android.content.pm.PackageManager; import android.os.Bundle; import android.os.Handler; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; import android.view.ViewGroup; import android.widget.Toast; import me.dm7.barcodescanner.zbar.Result; import me.dm7.barcodescanner.zbar.ZBarScannerView; public class ZbarScannerActivity extends AppCompatActivity implements ZBarScannerView.ResultHandler { private ZBarScannerView mScannerView; static final Integer CAMERA = 0x1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_zbar_scanner); ViewGroup contentFrame = (ViewGroup) findViewById(R.id.content_frame); mScannerView = new ZBarScannerView(this); contentFrame.addView(mScannerView); askForPermission(Manifest.permission.CAMERA, CAMERA); } private void askForPermission(String permission, Integer requestCode) { if (ContextCompat.checkSelfPermission(ZbarScannerActivity.this, permission) != PackageManager.PERMISSION_GRANTED) { // Should we show an explanation? if (ActivityCompat.shouldShowRequestPermissionRationale(ZbarScannerActivity.this, permission)) { //This is called if user has denied the permission before //In this case I am just asking the permission again ActivityCompat.requestPermissions(ZbarScannerActivity.this, new String[]{permission}, requestCode); } else { ActivityCompat.requestPermissions(ZbarScannerActivity.this, new String[]{permission}, requestCode); } } else { // Toast.makeText(this, "" + permission + " is already granted.", Toast.LENGTH_SHORT).show(); mScannerView.setResultHandler(this); mScannerView.startCamera(); } } @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (ActivityCompat.checkSelfPermission(this, permissions[0]) == PackageManager.PERMISSION_GRANTED) { switch (requestCode) { //Camera case 1: mScannerView.setResultHandler(this); mScannerView.startCamera(); break; } Toast.makeText(this, "Permission granted", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(this, "Permission denied", Toast.LENGTH_SHORT).show(); } } @Override public void onPause() { super.onPause(); mScannerView.stopCamera(); } @Override public void handleResult(Result result) { Toast.makeText(this, "Contents = " + result.getContents() + ", Format = " + result.getBarcodeFormat().getName(), Toast.LENGTH_SHORT).show(); // * Wait 3 seconds to resume the preview. Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { mScannerView.resumeCameraPreview(ZbarScannerActivity.this); } }, 3000); } }
4. Android Manifest
Open AndroidManifest.xml add the Camera permission and declare activity classes.
AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.prasad.zxingscannerex"> <uses-permission android:name="android.permission.CAMERA" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".ZxingScannerActivity" /> <activity android:name=".ZbarScannerActivity"></activity> </application> </manifest>
5. Reference:
Credits goes to this GitHub link.
Thank your sir. I'am new in Android, i try to create this barcode scanner in viewpager with fragment. The program is running to scan but it doesn't give the result, it just scan and scan without give the result. Could you help me sir what is going wrong?
ReplyDeleteGreetings. I know this is somewhat off-topic, but I was wondering if you knew where I could get a captcha plugin for my comment form? I’m using the same blog platform like yours, and I’m having difficulty finding one? Thanks a lot.
ReplyDeleteAWS Training in Bangalore | Amazon Web Services Training in Bangalore
Amazon Web Services Training in Pune | Best AWS Training in Pune
Hello! This is my first visit to your blog! We are a team of volunteers and starting a new initiative in a community in the same niche. Your blog provided us useful information to work on. You have done an outstanding job.
ReplyDeleteAWS Online Training | Online AWS Certification Course
Your good knowledge and kindness in playing with all the pieces were very useful. I don’t know what I would have done if I had not encountered such a step like this.
ReplyDeleteangularjs Training in chennai
angularjs Training in chennai
angularjs-Training in tambaram
angularjs-Training in sholinganallur
angularjs-Training in velachery
It is better to engaged ourselves in activities we like. I liked the post. Thanks for sharing.
ReplyDeleteonline Python certification course | python training in OMR | python training course in chennai
Wow it is really wonderful and awesome thus it is very much useful for me to understand many concepts and helped me a lot. it is really explainable very well and i got more information from your blog.
ReplyDeleterpa training in velachery| rpa training in tambaram |rpa training in sholinganallur | rpa training in annanagar| rpa training in kalyannagar
Wow it is really wonderful and awesome thus it is very much useful for me to understand many concepts and helped me a lot. it is really explainable very well and i got more information from your blog.
ReplyDeleteJava training in Chennai | Java training in Bangalore
Java online training | Java training in Pune
Good Post! Thank you so much for sharing this pretty post, it was so good to read and useful to improve my knowledge as updated one, keep blogging.
ReplyDeleteData Science training in Chennai | Data science training in bangalore
Data science training in pune | Data science online training
Data Science Interview questions and answers
Very Helpful Post And Explained Very Clearly About All the things.Very Helpful to me.Thank you.
ReplyDeleteaws online training
aws training in hyderabad
aws online training in hyderabad
QR Scanner 2018 for android is the fastest barcode scanner and qr code reader.
ReplyDeleteQR Code & Barcode Scanner is the best and fastest QR code/ bar code creator & scanner app free for Android. By using the phone's camera, this qr scanner will automatically scan qr code and recognize the information of QR code or bar code. And supports all major barcode and QR code formats.
Features
• QR code Reader.
• Barcode Scanner.
• QR Scanner.
• Flashlight supported for low-light environments.
• Wifi QR code supported , auto connect to Wifi hotspot without password.
• Create QR code and could save to Gallery/Album
• Scan history saved
• qr scanner
• Simple & easy to Use
It's not only a QR code scanner, but also a QR code generator/QR generator.
It can read all types including text, url, product, contact, ISBN, calendar, email, location, Wi-Fi and many other formats.
After scan and automatic decoding, user is provided with only the relevant options for individual type and can take appropriate action.
QR Code & Barcode Scanner is the best QR code scanner / QR scanner / QR reader / barcode scanner / barcode reader!
Free barcode scanner app!
Download free qr scanner - qr code reader and barcode scanner app and enjoy!
https://play.google.com/store/apps/details?id=com.hrmtech.qrcodereaderbarcodescanner
It was defintely mind refreshing blog.
ReplyDeleteSelenium Training in Chennai
selenium Classes in chennai
iOS Training in Chennai
Digital Marketing Training in Chennai
.Net coaching centre in chennai
Selenium Interview Questions and Answers
Future of testing professional
cloud computing training in chennai
cloud computing training
Excellent Blog!!! Such an interesting blog with clear vision, this will definitely help for beginner to make them update.
ReplyDeleteData Science in Bangalore
data analyst training in bangalore
data analytics institute in bangalore
data analysis courses in bangalore
This is a nice post in an interesting line of content.Thanks for sharing this article, great way of bring this topic to discussion.
ReplyDeleteMicrosoft Azure online training
Selenium online training
Java online training
Python online training
uipath online training
This is a very good barcode reader.It is very accurate to read QRcode and it is worth downloading and installing.
ReplyDeleteYour topic is very nice and helpful to us … Thank you for the information you wrote.
ReplyDeleteLearn Hadoop Training from the Industry Experts we bridge the gap between the need of the industry. Bangalore Training Academy provide the Best Hadoop Training in Bangalore with 100% Placement Assistance. Book a Free Demo Today.
Big Data Analytics Training in Bangalore
Tableau Training in Bangalore
Data Science Training in Bangalore
Workday Training in Bangalore
Thanks for one marvelous posting! I enjoyed reading it; you are a great author. I will make sure to bookmark your blog and may come back someday. I want to encourage that you continue your great posts.sap abap training in bangalore
ReplyDeleteNice post. I was checking constantly this blog and I am impressed! Extremely helpful information specially the last part I care for such info a lot. I was seeking this particular information for a very long time. Thank you and good luck.
ReplyDeleteqr code generator online
Last month I enrolled in a company named Onsite3D for modifying planning. I required to start the era of numerous things. This company reasonably propelled me with their benefit. They gave me the foremost amazing alter building advantage at the moo brought. Get laser scanning Vancouver, BC
ReplyDeleteThis comment has been removed by the author.
ReplyDeleteThis comment has been removed by the author.
ReplyDeleteGood To Share The Content With us
ReplyDeleteBest AWS Course Training Institute in Hyderabad
I’m going to read this. I’ll be sure to come back. thanks for sharing. and also This article gives the light in which we can observe the reality. this is very nice one and gives indepth information. thanks for this nice article... download blackmart apk english
ReplyDeleteGreat knowledge, do anyone mind merely reference back to it smart glass
ReplyDeleteI am a new user of this site so here i saw multiple articles and posts posted by this site,I curious more interest in some of them hope you will give more information on this topics in your next articles. Howtodoninja
ReplyDeleteI am happy to find this post very useful for me, as it contains lot of information. I always prefer to read the quality content and this thing I found in you post. Thanks for sharing. erek erek 3d
ReplyDeleteIt was wondering if I could use this write-up on my other website, I will link it back to your website though.Great Thanks. développement d'application mobile suisse romande
ReplyDeleteWow! Such an amazing and helpful post this is. I really really love it. It's so good and so awesome. I am just amazed. I hope that you continue to do your work like this in the future also advertising agency
ReplyDeleteThis is a great article thanks for sharing this informative information. I will visit your blog regularly for some latest post. I will visit your blog regularly for Some latest post. best portable photo scanner
ReplyDeleteCompre documentos en línea, documentos originales y registrados.
ReplyDeleteAcerca de Permisodeespana, algunos dicen que somos los solucionadores de problemas, mientras que otros se refieren a nosotros como vendedores de soluciones. Contamos con cientos de clientes satisfechos a nivel mundial. Hacemos documentos falsos autorizados y aprobados como Permiso de Residencia Español, DNI, Pasaporte Español y Licencia de Conducir Española. Somos los fabricantes y proveedores de primer nivel de estos documentos, reconocidos a nivel mundial.
Comprar permiso de residencia,
permiso de residenciareal y falso en línea,
Compre licencia de conducir en línea,
Compre una licencia de conducir española falsa en línea,
Comprar tarjeta de identificación,
Licencia de conducir real y falsa,
Compre pasaporte real en línea,
Visit Here fpr more information. :- https://permisodeespana.com/licencia-de-conducir-espanola/
Address: 56 Guild Street, London, EC4A 3WU (UK)
Email: contact@permisodeespana.com
WhatsApp: +443455280186
Really nice blog. I appreciated your effort in this blog. Keep sharing some more blogs again quickly!
ReplyDeleteData Science Course in Hyderabad