spine=.864"
Wrox Programmer to Programmer TM
Professional
Wrox Programmer to Programmer TM
Meier
Android Application Development
™
Offering an open development environment, Android represents an exciting
new opportunity to write innovative applications for mobile devices. This book
provides you with a hands-on guide to building these applications using the
Android software development kit. It takes you through a series of sample
projects, each introducing new features and techniques to get the most out of
Android. You’ll learn all about the basic functionality as well as discover how to
utilize the advanced features with the help of concise and useful examples.
Professional
™
What you will learn from this book
● Best practices for Android mobile development
● An introduction to Activities, Intents, the manifest, and resources
● How to create user interfaces with layouts and custom views
● Techniques to store and share your application data
● Instructions for creating map-based applications, using location-based
services including GPS, and geocoding locations
● How to create and use background Services and Notifications
● Working with the accelerometers, compass, and camera hardware
● All about phone and networking hardware such as telephony APIs, SMS, and
network management
● Advanced development topics, including security, IPC, and some advanced
graphics and user interface techniques
Enhance Your Knowledge
Advance Your Career
Who this book is for
This book is for anyone interested in creating applications for the Android mobile phone platform. It includes information that will be
valuable whether you’re an experienced mobile developer or just starting out writing mobile applications.
Wrox Professional guides are planned and written by working programmers to meet the real-world needs of programmers, developers,
and IT professionals. Focused and relevant, they address the issues technology professionals face every day. They provide examples,
practical solutions, and expert education in new technologies, all designed to help programmers do a better job.
www.wrox.com
Recommended
Computer Book
Categories
$44.99
$48.99
USA
CANADA
Programming Languages
Java
Android Application Development
Beginning with an introduction to the Android software stack, the author
examines the philosophy behind creating robust, consistent, and appealing
applications for mobile phones. You’ll get the grounding and knowledge that is
needed to write customized mobile applications using the current Android 1.0
SDK. Plus, you’ll also gain the flexibility to quickly adapt to future enhancements
in order to build the most cutting-edge solutions.
ISBN: 978-0-470-34471-2
Professional
™
Android
Application
Development
subtitle
Reto Meier
Updates, source code, and Wrox technical support at www.wrox.com
spine=.864"
Programmer to Programmer™
Professional
Android Application Development
™
Get more out of
WROX.com
Interact
Chapters on Demand
Take an active role online by participating in
our P2P forums
Purchase individual book chapters in pdf
format
Wrox Online Library
Join the Community
Hundreds of our books are available online
through Books24x7.com
Sign up for our free monthly newsletter at
newsletter.wrox.com
Wrox Blox
Browse
Download short informational pieces and
code to keep you up to date and out of
trouble!
Ready for more Wrox? We have books and
e-books available on .NET, SQL Server, Java,
XML, Visual Basic, C#/ C++, and much more!
Contact Us.
We always like to get feedback from our readers. Have a book idea?
Need community support? Let us know by e-mailing
[email protected]
Professional Android Application Development
978-0-470-34471-2
A hands-on guide to building mobile applications, this book
features concise and compelling examples that show you how
to quickly construct real-world mobile applications for Android
phones. Fully up-to-date for version 1.0 of the Android SDK, it
covers all the essential features, and explores the advanced
capabilities of Android.
Professional Java JDK 6 Edition
978-0-471-77710-6
Building upon Ivor Horton’s Beginning Java 2, this resource shows
you how to use the core features of the latest JDK as well as
powerful open source tools such as Ant, JUnit, and Hibernate. It
will arm you with a well-rounded understanding of the professional
Java development landscape.
Expert One-on-OneTM
J2EETM Development without EJBTM
Enhance Your Knowledge
Advance Your Career
978-0-7645-5831-3
This hands-on guide shows you alternatives to EJB that can be
used to create higher quality applications faster and at lower
cost, and demonstrates how to leverage practical techniques and
tools, including the popular open source Spring Framework and
Hibernate.
Professional Android ™ Application Development
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvii
Chapter 1: Hello, Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Chapter 2: Getting Started . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Chapter 3: Creating Applications and Activities . . . . . . . . . . . . . . . . . . . . . . 45
Chapter 4: Creating User Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Chapter 5: Intents, Broadcast Receivers, Adapters, and the Internet . . . . . . 113
Chapter 6: Data Storage, Retrieval, and Sharing . . . . . . . . . . . . . . . . . . . . . 159
Chapter 7: Maps, Geocoding, and Location-Based Services . . . . . . . . . . . . . 207
Chapter 8: Working in the Background . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
Chapter 9: Peer-to-Peer Communication . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
Chapter 10: Accessing Android Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . 315
Chapter 11: Advanced Android Development. . . . . . . . . . . . . . . . . . . . . . . . 353
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399
44712ffirs.indd i
10/20/08 4:08:56 PM
44712ffirs.indd ii
10/20/08 4:08:56 PM
Professional
Android™ Application Development
Reto Meier
44712ffirs.indd iii
10/20/08 4:08:56 PM
Professional Android™ Application Development
Published by
Wiley Publishing, Inc.
10475 Crosspoint Boulevard
Indianapolis, IN 46256
www.wiley.com
Copyright © 2009 by Wiley Publishing, Inc., Indianapolis, Indiana
Published simultaneously in Canada
ISBN: 978-0-470-34471-2
Manufactured in the United States of America
10 9 8 7 6 5 4 3 2 1
Library of Congress Cataloging-in-Publication Data is available from the publisher.
No part of this publication may be reproduced, stored in a retrieval system or transmitted in any form or
by any means, electronic, mechanical, photocopying, recording, scanning or otherwise, except as permitted
under Sections 107 or 108 of the 1976 United States Copyright Act, without either the prior written permission of the Publisher, or authorization through payment of the appropriate per-copy fee to the Copyright
Clearance Center, 222 Rosewood Drive, Danvers, MA 01923, (978) 750-8400, fax (978) 646-8600. Requests to
the Publisher for permission should be addressed to the Legal Department, Wiley Publishing, Inc., 10475
Crosspoint Blvd., Indianapolis, IN 46256, (317) 572-3447, fax (317) 572-4355, or online at
http://www.wiley.com/go/permissions.
Limit of Liability/Disclaimer of Warranty: The publisher and the author make no representations or warranties with respect to the accuracy or completeness of the contents of this work and specifically disclaim all
warranties, including without limitation warranties of fitness for a particular purpose. No warranty may be
created or extended by sales or promotional materials. The advice and strategies contained herein may not
be suitable for every situation. This work is sold with the understanding that the publisher is not engaged in
rendering legal, accounting, or other professional services. If professional assistance is required, the services
of a competent professional person should be sought. Neither the publisher nor the author shall be liable for
damages arising herefrom. The fact that an organization or Web site is referred to in this work as a citation
and/or a potential source of further information does not mean that the author or the publisher endorses the
information the organization or Web site may provide or recommendations it may make. Further, readers
should be aware that Internet Web sites listed in this work may have changed or disappeared between when
this work was written and when it is read.
For general information on our other products and services please contact our Customer Care Department
within the United States at (800) 762-2974, outside the United States at (317) 572-3993 or fax (317) 572-4002.
Trademarks: Wiley, the Wiley logo, Wrox, the Wrox logo, Wrox Programmer to Programmer, and related
trade dress are trademarks or registered trademarks of John Wiley & Sons, Inc. and/or its affiliates, in the
United States and other countries, and may not be used without written permission. Android is a trademark
of Google, Inc. All other trademarks are the property of their respective owners. Wiley Publishing, Inc., is
not associated with any product or vendor mentioned in this book.
Wiley also publishes its books in a variety of electronic formats. Some content that appears in print may not
be available in electronic books.
44712ffirs.indd iv
10/20/08 4:08:56 PM
To Kris
44712ffirs.indd v
10/20/08 4:08:56 PM
About the Author
Originally from Perth, Western Australia, Reto Meier now lives in London.
Reto is an experienced software developer with more than 10 years of experience in GUI application
architecture, design, and development. He’s worked in various industries, including offshore oil and
gas, before moving to London and into finance.
Always interested in emerging technologies, Reto has been involved in Android since the initial release
in 2007. In his spare time, he tinkers with a wide range of development platforms including WPF and
Google’s plethora of developer tools.
You can check out Reto’s web site, The Radioactive Yak, at http://blog.radioactiveyak.com.
About the Tech Editor
Dan Ulery is a software engineer with experience in .NET, Java, and PHP development, as well as in
deployment engineering. He graduated from the University of Idaho with a bachelor of science degree
in computer science and a minor in mathematics.
44712ffirs.indd vi
10/20/08 4:08:56 PM
Credits
Executive Editor
Vice President and Executive Group Publisher
Chris Webb
Richard Swadley
Development Editor
Vice President and Executive Publisher
William Bridges
Joseph B. Wikert
Technical Editor
Project Coordinator, Cover
Daniel Ulery
Lynsey Stanford
Senior Production Editor
Compositor
Debra Banninger
James D. Kramer, Happenstance Type-O-Rama
Copy Editor
Proofreader
Cate Caffrey
Nancy Carrasco
Editorial Manager
Indexer
Mary Beth Wakefield
Jack Lewis
Production Manager
Tim Tate
44712ffirs.indd vii
10/20/08 4:08:56 PM
Acknowledgments
A big thank you goes to the Android team, particularly those of you who’ve contributed to the Android
developer Google Groups, for creating and supporting an exciting new playground.
I also thank Philipp Lenssen for providing an inspiration, and occasional venue, for my blogging
efforts; Chris Webb for reading a blog and seeing an author; and Bill Bridges, Dan Ulery, and the Wrox
team for helping me along the way.
Thanks also to Paul, Stu, and Mike: Your friendship and inspiration helped me get to where I am.
Most importantly, I’d like to thank Kristy. For everything.
44712ffirs.indd viii
10/20/08 4:08:56 PM
Contents
Introduction
Chapter 1: Hello, Android
A Little Background
The Not So Distant Past
The Future
What It Isn’t
An Open Platform for Mobile Development
Native Android Applications
Android SDK Features
Access to Hardware including Camera, GPS, and Accelerometer
Native Google Maps, Geocoding, and Location-Based Services
Background Services
SQLite Database for Data Storage and Retrieval
Shared Data and Interapplication Communication
P2P Services with Google Talk
Extensive Media Support and 2D/3D Graphics
Optimized Memory and Process Management
Introducing the Open Handset Alliance
What Does Android Run On?
Why Develop for Android?
What Will Drive Android Adoption?
What Does It Have That Others Don’t?
Changing the Mobile Development Landscape
1
2
2
3
3
4
4
5
6
6
6
7
7
7
8
8
8
9
9
10
10
11
Introducing the Development Framework
11
What Comes in the Box
Understanding the Android Software Stack
The Dalvik Virtual Machine
Android Application Architecture
Android Libraries
Advanced Android Libraries
12
12
14
14
15
16
Summary
44712ftoc.indd ix
xvii
17
10/21/08 12:07:15 AM
Contents
Chapter 2: Getting Started
Developing for Android
What You Need to Begin
Creating Your First Android Activity
Types of Android Applications
Developing for Mobile Devices
Hardware-Imposed Design Considerations
Considering the Users’ Environment
Developing for Android
To-Do List Example
Android Development Tools
The Android Emulator
Dalvik Debug Monitor Service (DDMS)
The Android Debug Bridge (ADB)
Summary
Chapter 3: Creating Applications and Activities
19
20
20
24
29
30
30
33
34
37
42
42
43
43
44
45
What Makes an Android Application?
Introducing the Application Manifest
Using the Manifest Editor
The Android Application Life Cycle
Understanding Application Priority and Process States
Externalizing Resources
46
46
49
50
51
52
Creating Resources
Using Resources
To-Do List Resources Example
Creating Resources for Different Languages and Hardware
Runtime Configuration Changes
53
59
62
63
64
A Closer Look at Android Activities
Creating an Activity
The Activity Life Cycle
Android Activity Classes
Summary
Chapter 4: Creating User Interfaces
Fundamental Android UI Design
Introducing Views
Creating Activity User Interfaces with Views
The Android Widget Toolbox
66
66
68
73
73
75
76
76
77
78
x
44712ftoc.indd x
10/21/08 12:07:15 AM
Contents
Introducing Layouts
Using Layouts
Creating New Views
Modifying Existing Views
Creating Compound Controls
Creating Custom Widgets and Controls
Using Custom Controls
Creating and Using Menus
Introducing the Android Menu System
Defining an Activity Menu
Dynamically Updating Menu Items
Handling Menu Selections
Submenus and Context Menus
To-Do List Example Continued
Summary
Chapter 5: Intents, Broadcast Receivers, Adapters, and the Internet
Introducing Intents
Using
Using
Using
Using
Intents to Launch Activities
Intent Filters to Service Implicit Intents
Intent Filters for Plug-ins and Extensibility
Intents to Broadcast Events
Introducing Adapters
Introducing Some Android-Supplied Adapters
Using Adapters for Data Binding
Using Internet Resources
Connecting to an Internet Resource
Leveraging Internet Resources
Introducing Dialogs
79
79
80
81
85
88
98
99
99
101
104
104
105
107
112
113
114
114
121
130
132
136
136
136
141
142
143
143
Introducing the Dialog Class
Using Activities as Dialogs
144
147
Creating an Earthquake Viewer
Summary
148
157
Chapter 6: Data Storage, Retrieval, and Sharing
Android Techniques for Saving Data
Saving Simple Application Data
Creating and Saving Preferences
Retrieving Shared Preferences
Saving the Activity State
Creating a Preferences Page for the Earthquake Viewer
159
160
160
161
161
162
165
xi
44712ftoc.indd xi
10/21/08 12:07:15 AM
Contents
Saving and Loading Files
Including Static Files as Resources
File Management Tools
Databases in Android
Introducing SQLite
Cursors and Content Values
Working with Android Databases
Introducing Content Providers
Using Content Providers
Native Android Content Providers
Creating a New Content Provider
Creating and Using an Earthquake Content Provider
Summary
Chapter 7: Maps, Geocoding, and Location-Based Services
Using Location-Based Services
Setting up the Emulator with Test Providers
Updating Locations in Emulator Location Providers
Create an Application to Manage Test Location Providers
Selecting a Location Provider
Finding the Available Providers
Finding Providers Based on Requirement Criteria
Finding Your Location
“Where Am I?” Example
Tracking Movement
Updating Your Location in “Where Am I?”
Using Proximity Alerts
Using the Geocoder
Reverse Geocoding
Forward Geocoding
Geocoding “Where Am I?”
Creating Map-Based Activities
Introducing MapView and MapActivity
Creating a Map-Based Activity
Configuring and Using Map Views
Using the Map Controller
Mapping “Where Am I?”
Creating and Using Overlays
Introducing MyLocationOverlay
Introducing ItemizedOverlays and OverlayItems
Pinning Views to the Map and Map Positions
174
174
175
175
176
176
177
189
189
192
194
197
205
207
208
208
208
209
212
212
212
213
214
216
217
219
220
221
221
222
224
224
224
226
227
228
231
239
239
240
xii
44712ftoc.indd xii
10/21/08 12:07:15 AM
Contents
Mapping Earthquakes Example
Summary
Chapter 8: Working in the Background
Introducing Services
242
247
249
250
Creating and Controlling Services
Binding Activities to Services
250
258
Using Background Worker Threads
259
Creating New Threads
Synchronizing Threads for GUI Operations
Moving the Earthquake Service to a Background Thread
Let’s Make a Toast
Customizing Toasts
Using Toasts in Worker Threads
Introducing Notifications
Introducing the Notification Manager
Creating Notifications
Triggering Notifications
Adding Notifications to the Earthquake Monitor
Advanced Notification Techniques
Ongoing and Insistent Notifications
Using Alarms
Using Alarms to Update Earthquakes
Summary
260
260
261
262
263
264
265
266
266
267
267
270
272
273
274
276
Chapter 9: Peer-to-Peer Communication
279
Introducing Android Instant Messaging
280
Using the GTalk Service
Binding to the GTalk Service
Making a GTalk Connection and Starting an IM Session
Introducing Presence and the Contact Roster
Managing Chat Sessions
Sending and Receiving Data Messages
Introducing SMS
Using SMS in Your Application
Sending SMS Messages
Listening for SMS Messages
Emergency Responder SMS Example
Automating the Emergency Responder
Summary
280
281
282
283
286
289
291
291
292
294
297
306
314
xiii
44712ftoc.indd xiii
10/21/08 12:07:15 AM
Contents
Chapter 10: Accessing Android Hardware
Using the Media APIs
Playing Media Resources
Recording Multimedia
Using the Camera
Controlling Camera Settings
Using the Camera Preview
Taking a Picture
315
316
316
317
319
319
320
320
Introducing the Sensor Manager
Using the Accelerometer and Compass
321
323
Introducing Accelerometers
Detecting Acceleration Changes
Creating a Speedometer
Determining Your Orientation
Creating a Compass and Artificial Horizon
324
324
326
329
330
Android Telephony
Making Phone Calls
Monitoring Phone State and Phone Activity
Monitoring Data Connectivity and Activity
Accessing Phone Properties and Status
Controlling the Phone
Using Bluetooth
Introducing the Bluetooth Service
Controlling the Local Bluetooth Device
Discovering and Bonding with Bluetooth Devices
Managing Bluetooth Connections
Communication with Bluetooth
Using a Bluetooth Headset
Managing Network and Wi-Fi Connections
Monitoring and Managing Your Internet Connectivity
Managing Active Connections
Managing Your Wi-Fi
Controlling Device Vibration
Summary
Chapter 11: Advanced Android Development
Paranoid Android
Linux Kernel Security
Introducing Permissions
Declaring and Enforcing Permissions
Enforcing Permissions with Broadcasting Intents
333
334
334
337
338
338
339
339
340
340
342
342
344
345
345
346
347
350
351
353
354
354
354
355
355
xiv
44712ftoc.indd xiv
10/21/08 12:07:15 AM
Contents
Using AIDL to Support IPC for Services
Implementing an AIDL Interface
Using Internet Services
Building Rich User Interfaces
Working with Animations
Using Themes to Skin Your Applications
Advanced Canvas Drawing
Introducing SurfaceView
Creating Interactive Controls
Summary
Index
356
356
361
361
361
372
373
390
393
398
399
xv
44712ftoc.indd xv
10/21/08 12:07:15 AM
44712flast.indd xvi
10/21/08 12:11:04 AM
Introduction
Now is an exciting time for mobile developers. Mobile phones have never been more popular, and powerful smartphones are now a regular choice for consumers. Stylish and versatile phones packing hardware features like GPS, accelerometers, and touch screens are an enticing platform upon which to create
innovative mobile applications.
Android hardware will be designed to tempt consumers, but the real win is for developers. With
existing mobile development built on proprietary operating systems that restrict third-party applications, Android offers an open and equal alternative. Without artificial barriers, Android developers
are free to write applications that take full advantage of increasingly powerful mobile hardware. As a
result, developer interest in Android devices has made their 2008 release a hugely anticipated mobile
technology event.
Built on an open source framework, and featuring powerful SDK libraries and an open philosophy,
Android has opened mobile phone development to thousands of developers who haven’t had access to
tools for building mobile applications. Experienced mobile developers can now expand into the Android
platform, leveraging the unique features to enhance existing products or create innovative new ones.
This book is a hands-on guide to building mobile applications using version 1.0 of the Android software development kit. Chapter by chapter, it takes you through a series of sample projects, each introducing new features and techniques to get the most out of Android. It covers all the basic functionality
as well as exploring the advanced features through concise and useful examples.
Since Android is a brand-new, version 1 product, there are only a small number of handsets currently
available that support it. As with any early release, there are likely to be regular changes and improvements to the software and development libraries. The explanations and examples included in this book
will give the grounding and knowledge you need to write compelling mobile applications using the
current SDK, along with the flexibility to quickly adapt to future enhancements.
Whom This Book Is For
This book is for anyone interested in creating applications for the Android mobile phone platform. It
includes information that will be valuable, whether you’re an experienced mobile developer or making
your first foray, via Android, into writing mobile applications.
It will help if readers have used mobile phones (particularly phones running Android), but it’s not necessary, nor is prior experience in mobile phone development. It’s expected that you’ll have some experience in software development and be familiar with basic development practices. While knowledge of
Java is helpful, it’s not a necessity.
Chapters 1 and 2 introduce mobile development and contain instructions to get you started in Android.
Beyond that, there’s no requirement to read the chapters in order, although a good understanding of the
core components described in Chapters 3 through 6 is important before you venture into the remaining
chapters. Chapters 7 through 11 cover a variety of optional and advanced functionality and can be read
in whatever order interest or need dictates.
44712flast.indd xvii
10/21/08 12:11:04 AM
Introduction
What This Book Covers
Chapter 1 introduces Android, including what it is and how it fits into existing mobile development.
What Android offers as a development platform and why it’s an exciting opportunity for creating
mobile phone applications are then examined in greater detail.
Chapter 2 covers some best practices for mobile development and explains how to download the
Android SDK and start developing applications. It also introduces the Android developer tools and
demonstrates how to create new applications from scratch.
Chapters 3 through 6 take an in-depth look at the fundamental Android application components.
Starting with examining the pieces that make up an Android application and its life cycle, you’ll quickly
move on to the application manifest and external resources before learning about “Activities,” their lifetimes, and their life cycles.
You’ll then learn how to create User Interfaces with layouts and Views, before being introduced to
the Intent mechanism used to perform actions and send messages between application components.
Internet resources are then covered before a detailed look at data storage, retrieval, and sharing. You’ll
start with the preference-saving mechanism before moving on to file handling and databases. This section finishes with a look at sharing application data using Content Providers.
Chapters 7 to 10 look at more advanced topics. Starting with maps and location-based services, you’ll
move on to Services, background Threads, and using Notifications.
Android’s communication abilities are next, including sending and receiving messages through instant
messaging and SMS. Hardware is then covered, starting with media recording and playback, before
introducing the camera, accelerometers, and compass sensors. Chapter 10 concludes with a look at
phone and networking hardware, starting with telephony APIs and going on to Bluetooth and network
management (both Wi-Fi and mobile data connections).
Chapter 11 includes several advanced development topics, among them security, IPC, advanced graphics techniques, and user–hardware interactions.
How This Book Is Structured
This book is structured in a logical sequence to help readers of different development backgrounds
learn how to write advanced Android applications.
There’s no requirement to read each chapter sequentially, but several of the sample projects are developed
over the course of several chapters, adding new functionality and other enhancements at each stage.
Experienced mobile developers with a working Android development environment can skim the first
two chapters — which are an introduction to mobile development and instructions for creating your
development environment — and dive in at Chapters 3 to 6. These cover the fundamentals of Android
development, so it’s important to have a solid understanding of the concepts they describe. With this
xviii
44712flast.indd xviii
10/21/08 12:11:04 AM