Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Sign In
Advertisement
Mobile Development
Android SDK
Eclipse
Java
IDEs
In this tutorial, we'll use the ZXing (Zebra Crossing) library to carry out barcode
scanning within an Android app. We'll call on the resources in this open source
library within our app, retrieving and processing the returned results.
Since we're using the ZXing library, we don't need to worry about users without
the barcode scanner installed, because the integration classes provided will
take care of this for us. By importing the ZXing integration classes into our app,
we can make user scans easier and focus our development efforts on handling
the scan results. In a follow-up series coming soon, we'll develop a book
scanning app where we'll build on the app we created in this tutorial. We'll also
add support for Google Books API so that we can display information about
scanned books.
You can search Envato Market for other options to help you. Otherwise, read on
for the full step-by-step instructions for creating a barcode readeryourself.
Step 1
In Eclipse, create a new Android project. Enter your chosen application, project,
and package names. Let Eclipse create a blank activity for you, with the name
of your choice for both the activity and its layout.
Step 2
Open your main layout le. With the default settings, Eclipse starts your layout
with a Relative Layout object, which you can leave as is. Inside of it, replace the
existing content (typically a Text View) with a button.
01
02
03
04
05
06
07
08
09
10
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<Button android:id="@+id/scan_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="@string/scan" />
</RelativeLayout>
After the button, add two Text Views in which we will output scanning
information.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
<TextView
android:id="@+id/scan_format"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textIsSelectable="true"
android:layout_centerHorizontal="true"
android:layout_below="@id/scan_button" />
<TextView
android:id="@+id/scan_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textIsSelectable="true"
android:layout_centerHorizontal="true"
android:layout_below="@id/scan_format" />
<string name="scan">Scan</string>
The user will press the button to scan. When the app receives a result from the
barcode scanning operation, it will display the scan content data and format
name in the two Text Views.
its JAR le in your own apps if you prefer. For most purposes, using Scanning
via Intent is a reliable and easy to implement options, plus your users will have
access to the most recent version of the ZXing app.
In Eclipse, add a new package to your project by right-clicking the "src" folder
and choosing "New", then "Package", and entering
"com.google.zxing.integration.android" as the package name.
Step 2
Eclipse offers several ways to import existing code into your projects. For the
purposes of this tutorial, you'll probably nd it easiest to simply create the two
required classes and copy the code from ZXing. Right-click your new package,
choose "New" then "Class" and enter "IntentIntegrator" as the class name. You
can leave the other default settings the way they are. Once you've created this
class, do the same for the other class we'll be importing, giving it "IntentResult"
as its class name.
Copy the code from both classes in the ZXing library and paste it into the class
les you created. These are IntentIntegrator and IntentResult. Refer to the
source code download if you're in any doubt about where the various les and
folders should be or what should be in them.
You can now import the ZXing classes into your main Activity class.
1
2
import com.google.zxing.integration.android.IntentIntegrator;
import com.google.zxing.integration.android.IntentResult;
Go ahead and add the other import statements we'll use for this tutorial. Bear
in mind that Eclipse may have already added some for you.
1
import android.os.Bundle;
import android.app.Activity;
2
3
4
5
6
7
8
import android.app.Activity;
import android.content.Intent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
Feel free to have a look at the content of the two ZXing classes. It's fairly
straightforward, but the details of the barcode scanning processing are carried
out elsewhere in the library. These two classes really act as an interface to the
scanning functionality.
3. Do Some Scanning
Step 1
Let's implement scanning when the user clicks the button we added. In your
app's main activity class, the default onCreate method entered by Eclipse
should look something like this.
1
2
3
4
Above this method, add the following instance variables to represent the
button and two Text Views we created in the layout le.
1
2
In onCreate, after the existing code, instantiate these variables using the ID
values we speci ed in the XML.
1
2
3
scanBtn = (Button)findViewById(R.id.scan_button);
formatTxt = (TextView)findViewById(R.id.scan_format);
contentTxt = (TextView)findViewById(R.id.scan_content);
scanBtn.setOnClickListener(this);
Step 2
Now we can respond to button clicks by starting the scanning process. Add an
onClick method to your activity class.
1
2
3
Check whether the scanning button has been pressed inside this method.
1
2
3
if(v.getId()==R.id.scan_button){
//scan
}
Inside this conditional block, create an instance of the Intent Integrator class
we imported.
1
scanIntegrator.initiateScan();
At this point, the scanner will start if it's installed on the user's device. If not,
they'll be prompted to download it. The results of the scan will be returned to
the main activity where scanning was initiated, so we'll be able to retrieve it in
the onActivityResult method.
Tip: When you call the initiateScan method, you can choose to pass a
collection of the barcode types you want to scan. By default, the method will
scan for all supported types. These include UPC-A, UPC-E, EAN-8, EAN-13, QR
Code, RSS-14, RSS Expanded, Data Matrix, Aztec, PDF 417, Codabar, ITF, Codes
39, 93, and 128. The ZXing library also includes barcode scanning options that
we're not going to cover in this tutorial. You can check the project out at
Google Code for more info.
Inside the method, try to parse the result into an instance of the ZXing Intent
Result class we imported.
1
Step 2
As with any data being retrieved from another app, it's vital to check for null
values. Only proceed if we have a valid result.
1
2
3
if (scanningResult != null) {
//we have a result
}
If scan data is not received (for example, if the user cancels the scan by
pressing the back button), we can simply output a message.
1
2
3
4
5
else{
Toast toast = Toast.makeText(getApplicationContext(),
"No scan data received!", Toast.LENGTH_SHORT);
toast.show();
}
Back in the if block, let's nd out what data the scan returned. The Intent
Result object provides methods to retrieve the content of the scan and the
format of the data returned from it. Retrieve the content as a string value.
1
Advertisement
Step 3
Now your program has the format and content of the scanned data, so you can
do whatever you want with it. For the purpose of this tutorial, we'll just write the
values to the Text Views in our layout.
1
2
Run your app on a device instead of an emulator so that you can see the scan
functioning. Try scanning a book or any other barcode you might have.
When the scan is initiated, the user is taken to the ZXing app to scan a barcode.
Conclusion
In this tutorial, we've run through the process of facilitating barcode scanning
within Android apps using the ZXing library. In your own apps, you might want
to carry out further processing on the retrieved scan results, such as loading
URLs or looking the data up in a third party data source. In the follow-up to this
tutorial, we'll use the barcode scanning functionality to create a book scanning
app that will allow us to retrieve data about scanned books from the Google
Books API.
Don't forget that if you're having trouble creating the barcode reader yourself,
you can nd some ready-made options on Envato Market to help you.
Advertisement
Sue Smith
Technical writer (and sometimes developer) based in Glasgow, UK.
Having worked with the Mozilla Foundation and various online
publications, I enjoy helping people to learn web and software
development topics, regardless of their existing skill level. Particular
areas of interest include education technology and open source
projects.
BrainDeadAir
Download Attachment
WATCH ANY
COURSE NOW
Translations
Advertisement
Advertisement
WATCH ANY
COURSE NOW
COURSE NOW
Start FREE 10 day trial
Advertisement
21,742 Tutorials
Meet Envato
About Envato
FAQ
Help Center
Careers
Forums
Terms of Use
Community Meetups
Email Newsletters
Get Envato Tuts+ updates, news, surveys & offers.
Email Address
Subscribe
Privacy Policy
2016 Envato Pty Ltd. Trademarks and brands are the property of their respective owners.