Home > Store > Programming > Android

larger cover

Add To My Wish List

Sams Teach Yourself Android Application Development in 24 Hours, 2nd Edition

Register your product to gain access to bonus material or receive a coupon.

  • Description
  • Downloads
  • Extras
  • Reviews
  • Sample Content
  • Updates

Product Author Bios

Lauren Darcey, CEO of a mobile software company, has over 15 years of experience in software production. A recognized authority in enterprise architecture and commercial-grade application development, she has held management and engineering positions at Thuridion, Symantec, Nokia, Borland, and Dartmouth College. Shane Conder is an experienced developer who has specialized in mobile and embedded development for the past decade. He has designed and developed many commercial applications for BREW, J2ME, Palm, Windows Mobile, and Android. They are authors of Android Wireless Application Development, as well as the first edition of this book.

Android is the world's #1 mobile development platform, and with the new Android 3.0, it's becoming as popular for tablets as it is for smartphones. If you are a beginner, in just 24 lessons of one hour or less, this friendly, full-color book will help you master modern Android development. You can build a fully-featured app from scratch, learning all the skills you'll need to create your own. Each lesson builds on prior chapters, providing a solid foundation for success. This edition is thoroughly updated for Android's newest features and development tools, while still supporting the popular Android 2.0. Coverage includes:

  • Using Eclipse to write apps quickly and efficiently
  • Understanding the application lifecycle
  • Building robust, friendly user interfaces
  • Retrieving, storing, and using data
  • Adding network, social, and location-based features
  • Supporting the camera and other hardware
  • Internationalizing, testing, and publishing apps
Revised and simplified step-by-step instructions with full-color screenshots walk you through key tasks... updated Q and As, Quizzes, and Exercises test your knowledge..."Did You Know?" tips offer insider advice..."Watch Out!" alerts help you avoid problems. By the time you're finished, you won't just understand core Android concepts: you'll be comfortable writing, testing, and publishing your own new apps.

 

Author's Site

Link to author site

Customer Reviews

25 of 27 people found the following review helpful
4.0 out of 5 stars A book for beginners and tips for experts, August 31, 2010
Finally, I finished reading this book 24 hr is a misnomer, if you are thinking to finish the book in a day (it took me 13 days 2 hr a day cover to cover). One of the nice thing is the book is in Full Colour version these include screenshots, code and references to Eclipse (especially helpful if you are new with eclipse development). The book is easy to read, font and spacing were pleasing.

I should confess this is a beginner's book. You need some basic understanding of java and its concepts. The game the author picked was too basic for me, I wish I would have stated with this book months ago as it covers androids basic concepts and the first 6 chapters builds up the ground work for development on how to use eclipse and introduction to device debugging and logging( Eclipse DDMS, Android LogCat Logging).

A very good early introduction to debugging in chapter 2 right place before you get your hands dirty with coding, which i haven't seen any other books covering in... Read more
Help other customers find the most helpful reviews 
Was this review helpful to you? Yes No


10 of 10 people found the following review helpful
4.0 out of 5 stars Complete, full of advice from real programmers, August 25, 2010
The first thing that hits you when you flip through the pages of this book is the color. The example screens, diagrams and tables really stand out. It's a delight to read a full color book and I'm thinking, why have I never come across more full color IT books?

The target audience are developers with a Java programming background who want to start Android development. And the book fulfills this promise very well.

The first couple of chapters are introductory, but aren't a drag to read (although the concepts of Activities, Intents and the manifest file are better explained in a book like "Hello, Android!" from the Pragmatic Programmers)

A second thing which really stuck out and is well worth mentioning are the "Did you know", "Watch out!" and "By the way" text boxes which really showed the authors have real programming experience with Android. Those little text boxes sometimes really contained little gems of information. These alone are worth reading... Read more
Help other customers find the most helpful reviews 
Was this review helpful to you? Yes No


25 of 31 people found the following review helpful
5.0 out of 5 stars Best "quick-start" tutorial for Android 2.1 available, July 31, 2010
By 
paulsm (Cypress, CA) - See all my reviews
I bought this book a few days ago at SIGGRAPH - and it's great.

Android is a HUGE topic - it's utterly impossible for a single book to cover even a small portion of Android in depth.

But the authors have done a really admirable job of getting you started from scratch:

* Installing the Android IDE (Eclipse)
* Writing a simple "hello world", and executing it on the Android emulator
* Step-by-step chapters on building up a simple application that touches on key aspects of the Android
* Etc

The same authors have written another book (published by New Riders, instead of SAMS) with a lot more detail. But frankly, this is the better choice for a "first book".

You definitely ought to be at least familiar with Java before starting this book, just as it would be good to know a little Objective C before starting out on iPhone (and ESSENTIAL to know MORE than a little C++ before starting out on Nokia/Symbian). But, as... Read more
Help other customers find the most helpful reviews 
Was this review helpful to you? Yes No


Share your thoughts with other customers:
 See all 124 customer reviews...

Online Sample Chapter

Mastering the Android Development Tools

Table of Contents

Introduction 1

    Who Should Read This Book? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

    How This Book Is Structured . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

    What Is (and Isn’t) in This Book . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

    What Development Environment Is Used? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

    What Conventions Are Used in This Book? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

    An Overview of Changes in This Edition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

    About the Short Links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

    Supplementary Tools Available. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

    Part I: Android Fundamentals

HOUR 1: Getting Started with Android 9

    Introducing Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

        Google and the Open Handset Alliance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

        Android Makes Its Entrance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

        Cheap and Easy Development. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

    Familiarizing Yourself with Eclipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

        Creating Android Projects. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

        Exploring the Android Project Files. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

        Editing Project Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

    Running and Debugging Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

        Managing Android Virtual Devices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

        Creating Debug and Run Configurations in Eclipse . . . . . . . . . . . . . . . . . . . . . . . . . . 22

        Launching Android Applications Using the Emulator . . . . . . . . . . . . . . . . . . . . . . . . 24

        Debugging Android Applications Using DDMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

        Launching Android Applications on a Device . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

HOUR 2: Mastering the Android Development Tools 31

    Using the Android Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

    Debugging Applications with DDMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

        Managing Tasks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

        Browsing the Android File System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

        Interacting with Emulators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

        Taking Screenshots of the Emulator or Handset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

        Viewing Log Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

    Working with the Android Emulator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

        Providing Input to the Emulator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

        Exploring the Android System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

        Using SD Card Images with the Emulator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

    Using Other Android Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

HOUR 3: Building Android Applications 47

    Designing a Typical Android Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

        Designing Application Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

        Determining Application Activity Requirements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

        Implementing Application Functionality . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

    Using the Application Context . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

        Retrieving Application Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

        Accessing Application Preferences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

        Accessing Other Application Functionality Using Contexts. . . . . . . . . . . . . . . . . . 52

    Working with Activities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

        Launching Activities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

        Managing Activity State. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

        Shutting Down Activities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

    Working with Intents. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

        Passing Information with Intents. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

        Using Intents to Launch Other Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

    Working with Dialogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

    Working with Fragments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

    Logging Application Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

HOUR 4: Managing Application Resources 65

    Using Application and System Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

        Working with Application Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

        Working with System Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

    Working with Simple Resource Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

        Working with Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

        Working with Colors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

        Working with Dimensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71

    Working with Drawable Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72

        Working with Images. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72

        Working with Other Types of Drawables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

    Working with Layouts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

        Designing Layouts Using the Layout Resource Editor. . . . . . . . . . . . . . . . . . . . . . . . . . 74

        Designing Layouts Using XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

    Working with Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77

        Working with XML Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77

        Working with Raw Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78

        Working with Other Types of Resources. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

HOUR 5: Configuring the Android Manifest File 83

    Exploring the Android Manifest File. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

        Using the Manifest Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84

        Using the Application Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84

        Using the Permissions Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85

        Using the Instrumentation Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86

        Using the AndroidManifest.xml Tab. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86

    Configuring Basic Application Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

        Naming Android Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88

        Versioning an Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88

        Setting the Minimum Android SDK Version . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

        Naming an Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90

        Providing an Icon for an Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90

        Providing an Application Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90

        Setting Debug Information for an Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90

        Setting Other Application Attributes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90

    Defining Activities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

        Registering Activities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

        Designating the Launch Activity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92

    Managing Application Permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

    Managing Other Application Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96

HOUR 6: Designing an Application Framework 99

    Designing an Android Trivia Game . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99

        Determining High-Level Game Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100

        Determining Activity Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100

        Determining Screen-Specific Game Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101

    Implementing an Application Prototype . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106

        Reviewing the Accompanying Source Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106

        Creating a New Android Project. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107

        Adding Project Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107

        Implementing Application Activities. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

        Creating Application Preferences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110

    Running the Game Prototype . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

        Creating a Debug Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

        Launching the Prototype in the Emulator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

        Exploring the Prototype Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113

Part II: Building an Application Framework

HOUR 7: Implementing an Animated Splash Screen 117

    Designing the Splash Screen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117

    Implementing the Splash Screen Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118

        Adding New Project Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120

        Updating the Splash Screen Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122

    Working with Animation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126

        Adding Animation Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126

        Animating Specific Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128

        Animating All Views in a Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129

        Handling Animation Life Cycle Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129

HOUR 8: Implementing the Main Menu Screen 133

    Designing the Main Menu Screen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133

        Determining Main Menu Screen Layout Requirements . . . . . . . . . . . . . . . . . . . . 134

        Designing the Screen Header with RelativeLayout . . . . . . . . . . . . . . . . . . . . . . . . . . 135

        Designing the ListView Control. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135

        Finishing Touches for the Main Menu Layout Design . . . . . . . . . . . . . . . . . . . . . . 135

    Implementing the Main Menu Screen Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136

        Adding New Project Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136

        Updating the Main Menu Screen Layout Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138

    Working with the ListView Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140

        Filling a ListView Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140

        Listening for ListView Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141

        Customizing ListView Control Characteristics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143

    Working with Other Menu Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144

        Adding an Options Menu to the Game Screen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145

HOUR 9: Developing the Help and Scores Screens 151

    Designing the Help Screen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151

    Implementing the Help Screen Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153

        Adding New Project Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153

        Updating the Help Screen Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154

    Working with Files. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155

        Adding Raw Resource Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156

        Accessing Raw File Resources. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156

    Designing the Scores Screen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157

        Determining Scores Screen Layout Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158

        Adding the TabHost Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158

    Implementing the Scores Screen Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160

        Adding New Project Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160

        Updating the Scores Screen Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161

    Building a Screen with Tabs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163

        Configuring the TabHost Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163

        Adding Tabs to the TabHost Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164

        Setting the Default Tab. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164

    Working with XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165

        Retrieving XML Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165

        Parsing XML Files with XmlResourceParser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165

        Applying Finishing Touches to the Scores Screen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166

HOUR 10: Building Forms to Collect User Input 171

    Designing the Settings Screen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171

    Implementing the Settings Screen Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175

        Adding New Project Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175

        Updating the Settings Screen Layout. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176

    Using Common Form Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178

        Working with EditText Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178

        Working with Button Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179

        Working with Spinner Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182

    Saving Form Data with SharedPreferences. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184

        Defining SharedPreferences Entries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184

        Saving Settings to SharedPreferences. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184

        Reading Settings from SharedPreferences. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185

HOUR 11: Using Dialogs to Collect User Input 189

    Working with Activity Dialogs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189

        Exploring the Different Types of Dialogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190

        Tracing the Life Cycle of an Activity Dialog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191

    Using the DatePickerDialog Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192

        Adding a DatePickerDialog to a Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193

        Initializing a DatePickerDialog. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194

        Launching DatePickerDialog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195

    Working with Custom Dialogs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196

        Adding a Custom Dialog to the Settings Screen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196

HOUR 12: Adding Application Logic 205

    Designing the Game Screen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205

    Implementing the Game Screen Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208

        Adding New Project Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208

        Updating the Game Screen Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210

    Working with ViewSwitcher Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211

        Initializing Switcher Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212

        Implementing Switcher Factory Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212

        Updating the TextSwitcher Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214

        Updating the ImageSwitcher Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214

    Wiring Up Game Logic. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215

        Adding Game State Settings to the SharedPreferences . . . . . . . . . . . . . . . . . . . . . . 216

        Retrieving, Parsing, and Storing Question Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217

Part III: Enhancing Your Application with Powerful Android Features

HOUR 13: Working with Images and the Camera 227

    Designing the Avatar Feature . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227

    Adding an Avatar to the Settings Layout. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229

        Updating the Settings Screen Layout. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230

    Working with ImageButton Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231

        Setting the Image of an ImageButton Control. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231

        Handling ImageButton Click Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233

    Choosing and Saving the Avatar Graphic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234

    Working with Bitmaps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239

HOUR 14: Adding Support for Location-Based Services 245

    Designing the Favorite Place Feature . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245

        Determining Favorite Place Feature Layout Updates . . . . . . . . . . . . . . . . . . . . . . . . 246

        Designing the Favorite Place Dialog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247

    Implementing the Favorite Place Feature . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248

        Adding New Project Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249

        Updating the Settings Screen Layout. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250

        Implementing the Favorite Place Dialog Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250

    Implementing the Favorite Place Dialog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252

    Using Location-Based Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254

        Enabling Location Testing on the Emulator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255

        Accessing the Location-Based Services. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259

    Using Geocoding Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260

        Using Geocoding Services with Android. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261

    Working with Maps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263

        Launching a Map Application by Using an Intent . . . . . . . . . . . . . . . . . . . . . . . . . . 263

        Working with Third-Party Services and Applications . . . . . . . . . . . . . . . . . . . . . . . . 265

HOUR 15: Adding Basic Network Support 269

    Designing Network Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269

        Working with an Application Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270

        Managing Lengthy Network Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271

        Informing the User of Network Activity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271

    Developing Network Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272

        Enabling Network Testing on the Emulator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272

        Testing Network Applications on Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273

    Accessing Network Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274

        Planning Been There, Done That! Network Support. . . . . . . . . . . . . . . . . . . . . . . . . . 274

        Setting Network Permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275

        Checking Network Status . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275

        Using HTTP Networking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276

    Indicating Network Activity with Progress Bars . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277

        Displaying Indeterminate Progress . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277

        Displaying Determinate Progress . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277

        Displaying Progress Dialogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278

    Running Tasks Asynchronously . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279

        Using AsyncTask . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279

        Using Threads and Handlers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280

    Downloading and Displaying Score Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280

        Extending AsyncTask for Score Downloads. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281

        Starting the Progress Indicator with onPreExecute() . . . . . . . . . . . . . . . . . . . . . . . . 282

        Clearing the Progress Indicator with onPostExecute(). . . . . . . . . . . . . . . . . . . . . . 282

        Handling Cancellation with onCancelled(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283

        Handling Processing with doInBackground() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284

        Handling Progress Updates with onProgressUpdate() . . . . . . . . . . . . . . . . . . . . . . 285

        Starting the ScoreDownloaderTask . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286

    Downloading and Parsing Question Batches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287

        Extending AsyncTask for Question Downloads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287

        Starting the Progress Dialog with onPreExecute(). . . . . . . . . . . . . . . . . . . . . . . . . . . . 288

        Dismissing the Progress Dialog with onPostExecute() . . . . . . . . . . . . . . . . . . . . . . 288

        Handling the Background Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289

        Starting QuizTask . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289

HOUR 16: Adding Additional Network Features 293

    Determining What Data to Send to the Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293

    Keeping Player Data in Sync . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294

    Uploading Settings Data to a Remote Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295

        Working with Android Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296

        Implementing UploadTask . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298

        Uploading Player Data with the HTTP GET Method . . . . . . . . . . . . . . . . . . . . . . . . . . 299

        Uploading Avatar Data with the HTTP POST Method . . . . . . . . . . . . . . . . . . . . . . . . 301

    Uploading Score Data to a Remote Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304

    Downloading Friends’ Score Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305

HOUR 17: Adding Social Features 309

    Enhancing Applications with Social Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309

        Tailoring Social Features to Your Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310

        Supporting Basic Player Relationships. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310

    Adding Friend Support to Your Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311

        Enabling Friend Requests on the Settings Screen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311

        Implementing the Friend Request Feature . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314

        Enhancing Player Relationships. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318

    Integrating with Social Networking Services. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319

        Adding Facebook Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320

        Adding Twitter Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320

        Working with the OpenSocial Initiative. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320

HOUR 18: Creating a Home Screen App Widget 325

    Designing an App Widget. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325

        Developing an App Widget . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326

        Configuring App Widget Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326

        Working with RemoteViews . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327

        Working with Styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328

        Designing the App Widget Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329

        Implementing an App Widget Provider . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331

        Handling App Widget Background Tasks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331

        Updating the Android Manifest File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335

HOUR 19: Internationalizing Your Application 341

    General Internationalization Principles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341

    How Android Localization Works. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343

        How the Android Operating System Handles Locale . . . . . . . . . . . . . . . . . . . . . . . . 345

        How Applications Handle Locales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346

        How the Android Market Handles Locales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348

    Android Internationalization Strategies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349

        Forgoing Application Internationalization. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349

        Limiting Application Internationalization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350

        Implementing Full Application Internationalization . . . . . . . . . . . . . . . . . . . . . . . . 350

    Using Localization Utilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351

        Determining System Locale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351

        Formatting Date and Time Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351

        Handling Currencies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352

HOUR 20: Developing for Different Devices 355

    Configuration Management for Android. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355

        Handling Different Screen Orientations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357

        Handling Orientation Changes Programmatically . . . . . . . . . . . . . . . . . . . . . . . . . . 362

        Supporting Different Screen Characteristics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363

        Supporting Different Device Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364

        Developing for Different Android SDKs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365

HOUR 21: Diving Deeper into Android 371

    Exploring More Core Android Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371

        Declaring and Enforcing Application Permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372

        Alerting the User with Notifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372

    Designing Advanced User Interfaces. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373

        Using Styles and Themes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373

        Designing Custom View and ViewGroup Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374

        Working with Input Methods. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374

        Handling User Gestures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375

        Converting Text to Speech. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376

        Converting Speech to Text. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377

    Working with Multimedia. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377

        Playing and Recording Audio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377

        Playing and Recording Video. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378

    Working with 2D and 3D Graphics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378

        Using the Android Graphics Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379

        Using the OpenGL ES Graphics API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379

    Personalizing Android Devices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380

        Setting the Ringtone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380

        Setting the Wallpaper. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380

        Creating a Live Wallpaper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381

    Managing and Sharing Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381

        Working with Files and Directories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382

        Storing Structured Data in a SQLite Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383

        Sharing Data with Other Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383

        Integrating with Global Search . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385

    Accessing Underlying Device Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386

        Reading Raw Sensor Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386

        Working with Wi-Fi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387

        Working with Bluetooth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387

        Managing Power Settings and Battery Life. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387

HOUR 22: Testing Android Applications 391

    Testing Best Practices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391

        Developing Coding Standards . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392

        Performing Regular Versioned Builds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393

        Using a Defect Tracking System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393

        Developing Good Test Plans . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393

    Maximizing Test Coverage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395

        Managing the Testing Environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395

        Testing on the Emulator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397

        Testing on Target Devices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398

        Performing Automated Testing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398

Part V: Publishing Your Application

HOUR 23: Getting Ready to Publish 409

    Understanding the Release Process . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409

    Preparing the Release Candidate Build . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411

        Preparing the Android Manifest File for Release . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411

        Protecting Your Application from Software Pirates . . . . . . . . . . . . . . . . . . . . . . . . . . 412

        Readying Related Services for Release . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413

    Testing the Application Release Candidate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413

    Packaging and Signing an Application. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414

        Digitally Signing Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414

        Exporting and Signing the Package File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415

    Testing the Signed Application Package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417

        Installing the Signed Application Package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417

        Verifying the Signed Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418

HOUR 24: Publishing on the Android Market 421

    Selling on the Android Market . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421

        Signing Up for a Developer Account . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422

        Uploading an Application to the Android Market . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423

        Publishing on the Android Market . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427

        Using Other Developer Account Benefits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429

    Exploring Other Android Publishing Options. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429

        Selling Your Application on Your Own Site . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429

        Selling Your Application on Other Markets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 430

Part VI: Appendixes

APPENDIX A: Configuring Your Android Development Environment 437

APPENDIX B: Eclipse IDE Tips and Tricks 445

APPENDIX C: Supplementary Materials 453

TOC, 9780672335693, 6/30/2011

 

Sample Pages

Download the sample pages (includes Chapter 2 and Index)

 
Best Value

Book + eBook Bundle  $71.98  $43.19

Book Price $31.99
eBook Price $11.20
eBook formats included

Buy

This book includes free shipping!

Buy

Book  $39.99  $31.99

Usually ships in 24 hours.

This book includes free shipping!

Buy

eBook (Watermarked)  $31.99  $25.59

Includes EPUB, MOBI, and PDF
About eBook Formats

This eBook includes the following formats, accessible from your Account page after purchase:

ePubEPUBThe open industry format known for its reflowable content and usability on supported mobile devices.

MOBIMOBIThe eBook format compatible with the Amazon Kindle and Amazon Kindle applications.

Adobe ReaderPDFThe popular standard, used most often with the free Adobe® Reader® software.

This eBook requires no passwords or activation to read. We customize your eBook by discretely watermarking it with your name, making it uniquely yours.

Purchase Reward: One Month Free Subscription
By completing any purchase on InformIT, you become eligible for an unlimited access one-month subscription to Safari Books Online.

Get access to thousands of books and training videos about technology, professional development and digital media from more than 40 leading publishers, including Addison-Wesley, Prentice Hall, Cisco Press, IBM Press, O'Reilly Media, Wrox, Apress, and many more. If you continue your subscription after your 30-day trial, you can receive 30% off a monthly subscription to the Safari Library for up to 12 months. That's a total savings of $199.