1.Getting Started 1
1.1 Introduction:Getting Started 1
1.2 Learning the Java Language 1
1.3 Creating a"Hello,World"Application from the Command Line 3
1.4 Creating a"Hello,World"Application in Eclipse 6
1.5 Setting Up an IDE on Windows to Develop for Android 13
1.6 Understanding the Android Life Cycle 20
1.7 Installing.apk Files onto an Emulator via the ADB 21
1.8 Installing Apps onto an Emulator via SlideME 22
1.9 Sharing Java Classes from Another Eclipse Project 23
1.10 Referencing Libraries to Implement External Functionality 26
1.11 Using SDK Samples to Help Avoid Head Scratching 29
1.12 Keeping the Android SDK Updated 32
1.13 Taking a Screenshot from the Emulator/Android Device 39
1.14 Program:A Simple CountDownTimer Example 41
1.15 Program:Tipster,a Tip Calculator for the Android OS 44
2.Designing a Successful Application 63
2.1 Introduction:Designing a Successful Android Application 63
2.2 Exception Handling 66
2.3 Accessing Android's Application Object as a"Singleton" 69
2.4 Keeping Data When the User Rotates the Device 71
2.5 Monitoring the Battery Level of an Android Device 74
2.6 Creating Splash Screens in Android 75
2.7 Designing a Conference/Camp/Hackathon/Institution App 79
2.8 Using Google Analytics in an Android Application 81
2.9 A Simple Torch/Flashlight 83
2.10 Adapting an Android Phone Application to Be Used on a Tablet 86
2.11 Setting First-Run Preferences 88
2.12 Formatting the Time and Date for Display 89
2.13 Controlling Input with KeyListeners 91
2.14 Backing Up Android Application Data 95
2.15 Using Hints Instead of Tool Tips 101
3.Testing 103
3.1 Introduction:Testing 103
3.2 Doing Test-Driven Development(TDD)in Android 103
3.3 Setting Up an Android Virtual Device(AVD)for App Testing 104
3.4 Testing on a Huge Range of Devices with Cloud-based Testing 113
3.5 Creating and Using a Test Project 114
3.6 Troubleshooting Application Crashes 118
3.7 Debugging Using Log.d and Log Cat 122
3.8 Getting Bug Reports from Users Automatically with BugSense 123
3.9 Using a Local Runtime Application Log for Analysis of Field Errors or Situations 125
3.10 Reproducing Activity Life-Cycle Scenarios for Testing 129
3.11 Keeping Your App Snappy with StrictMode 134
3.12 Running the Monkey Program 135
3.13 Sending Text Messages and Placing Calls Between AVDs 137
4.Inter-/Intra-Process Communication 141
4.1 Introduction:Inter-/Intra-Process Communication 141
4.2 Opening a Web Page,Phone Number,or Anything Else with an Intent 142
4.3 Emailing Text from a View 143
4.4 Sending an Email with Attachments 146
4.5 Pushing String Values Using Intent.putExtra() 147
4.6 Retrieving Data from a Subactivity Back to Your Main Activity 149
4.7 Keeping a Service Running While Other Apps Are on Display 151
4.8 Sending/Receiving a Broadcast Message 153
4.9 Starting a Service After Device Reboot 154
4.10 Creating a Responsive Application Using Threads 155
4.11 Using AsyncTask to Do Background Processing 157
4.12 Sending Messages Between Threads Using an Activity Thread Queue and Handler 165
4.13 Creating an Android Epoch HTML/JavaScript Calendar 167
5.Content Providers 173
5.1 Introduction:Content Providers 173
5.2 Retrieving Data from a Content Provider 173
5.3 Writing a Content Provider 175
5.4 Writing an Android Remote Service 177
6.Graphics 183
6.1 Introduction:Graphics 183
6.2 Using a Custom Font 183
6.3 Drawing a Spinning Cube with OpenGL ES 186
6.4 Adding Controls to the OpenGL Spinning Cube 190
6.5 Freehand Drawing Smooth Curves 193
6.6 Taking a Picture Using an Intent 199
6.7 Taking a Picture Using android.media.Camera 201
6.8 Scanning a Barcode or QR Code with the Google ZXing Barcode Scanner 204
6.9 Using AndroidPlot to Display Charts and Graphs 208
6.10 Using Inkscape to Create an Android Launcher Icon 210
6.11 Creating Easy Launcher Icons from OpenClipArt.org Using Paint.NET 217
6.12 Using Nine Patch Files 224
6.13 Creating HTML5 Charts with Android RGraph 227
6.14 Adding a Simple Raster Animation 231
6.15 Using Pinch to Zoom 234
7.Graphical User Interface 239
7.1 Introduction:GUI 239
7.2 Understanding and Following User Interface Guidelines 240
7.3 Handling Configuration Changes by Decoupling the View from the Model 242
7.4 Creating a Button and Its Click Event Listener 245
7.5 Wiring Up an Event Listener in Five Different Ways 246
7.6 Using CheckBoxes and RadioButtons 250
7.7 Enhancing UI Design Using Image Buttons 254
7.8 Offering a Drop-Down Chooser via the Spinner Class 256
7.9 Handling Long-Press/Long-Click Events 258
7.10 Displaying Text Fields with TextView and EditText 259
7.11 Constraining EditText Values with Attributes and the TextWatcher Interface 260
7.12 Implementing AutoCompleteTextView 263
7.13 Feeding AutoCompleteTextView Using an SQLite Database Query 265
7.14 Turning Edit Fields into Password Fields 267
7.15 Changing the Enter Key to"Next"on the Soft Keyboard 268
7.16 Processing Key-Press Events in an Activity 270
7.17 Let Them See Stars:Using RatingBar 272
7.18 Making a View Shake 276
7.19 Providing Haptic Feedback 277
7.20 Navigating Different Activities Within a TabView 281
7.21 Creating a Custom Title Bar 283
7.22 Formatting Numbers 285
7.23 Formatting with Correct Plurals 289
7.24 Starting a Second Screen from the First 292
7.25 Creating a Loading Screen That Will Appear Between Two Activities 301
7.26 Using SlidingDrawer to Overlap Other Components 303
7.27 Customizing the SlidingDrawer Component to Animate/Transition from the Top Down 305
7.28 Adding a Border with Rounded Corners to a Layout 307
7.29 Detecting Gestures in Android 309
7.30 Building a UI Using Android 3.0 Fragments in Android 1.6 and Later 316
7.31 Using the Android 3.0 Photo Gallery 321
7.32 Creating a Simple App Widget 324
8.GUI Alerts:Menus,Dialogs,Toasts,and Notifications 329
8.1 Introduction:GUI Alerts 329
8.2 Creating and Displaying a Menu 330
8.3 Handling Choice Selection in a Menu 331
8.4 Creating a Submenu 333
8.5 Creating a Pop-up/Alert Dialog 336
8.6 Using a Timepicker Widget 338
8.7 Creating an iPhone-like Wheel Picker for Selection 340
8.8 Creating a Tabbed Dialog 343
8.9 Creating a Progress Dialog 346
8.10 Creating a Custom Dialog with Buttons,Images,and Text 347
8.11 Creating a Reusable About Box Class 349
8.12 Customizing the Appearance of a Toast 353
8.13 Creating a Notification in the Status Bar 354
9.GUI:ListView 361
9.1 Introduction:ListView 361
9.2 Building List-Based Applications with ListView 361
9.3 Creating a"No Data"View for ListViews 366
9.4 Creating an Advanced ListView with Images and Text 367
9.5 Using Section Headers in ListViews 372
9.6 Keeping the ListView with the User's Focus 377
9.7 Writing a Custom List Adapter 377
9.8 Handling Orientation Changes:From ListView Data Values to Landscape Charting 381
10.Multimedia 387
10.1 Introduction:Multimedia 387
10.2 Playing a YouTube Video 387
10.3 Using the Gallery with the ImageSwitcher View 388
10.4 Capturing Video Using MediaRecorder 391
10.5 Using Android's Face Detection Capability 394
10.6 Playing Audio from a File 398
10.7 Playing Audio Without Interaction 400
10.8 Using Speech to Text 402
10.9 Making the Device Speak with Text-to-Speech 403
11.Data Persistence 407
11.1 Introduction:Data Persistence 407
11.2 Getting File Information 407
11.3 Reading a File Shipped with the App Rather Than in the Filesystem 411
11.4 Listing a Directory 413
11.5 Getting Total and Free Space Information About the SD Card 414
11.6 Providing User Preference Activity with Minimal Effort 415
11.7 Checking the Consistency of Default Shared Preferences 419
11.8 Performing Advanced Text Searches 421
11.9 Creating an SQLite Database in an Android Application 427
11.10 Inserting Values into an SQLite Database 428
11.11 Loading Values from an Existing SQLite Database 428
11.12 Working with Dates in SQLite 429
11.13 Parsing JSON Using JSONObject 432
11.14 Parsing an XML Document Using the DOM API 433
11.15 Parsing an XML Document Using an XmlPullParser 435
11.16 Adding a Contact 439
11.17 Reading Contact Data 442
12.Telephone Applications 445
12.1 Introduction:Telephone Applications 445
12.2 Doing Something When the Phone Rings 445
12.3 Processing Outgoing Phone Calls 449
12.4 Dialing the Phone 453
12.5 Sending Single-Part or Multipart SMS Messages 454
12.6 Receiving an SMS Message in an Android Application 457
12.7 Using Emulator Controls to Send SMS Messages to the Emulator 458
12.8 Using Android's TelephonyManager to Obtain Device Information 459
13.Networked Applications 471
13.1 Introduction:Networking 471
13.2 Using a RESTful Web Service 472
13.3 Extracting Information from Unstructured Text Using Regular Expressions 474
13.4 Parsing RSS/Atom Feeds Using ROME 476
13.5 Using MD5 to Digest Clear Text 481
13.6 Converting Text into Hyperlinks 481
13.7 Accessing a Web Page Using WebView 482
13.8 Customizing a WebView 484
14.Gaming and Animation 485
14.1 Introduction:Gaming and Animation 485
14.2 Building an Android Game Using flixel-android 486
14.3 Building an Android Game Using AndEngine(Android-Engine) 489
14.4 Processing Timed Keyboard Input 495
15.Social Networking 497
15.1 Introduction:Social Networking 497
15.2 Integrating Social Networking Using HTTP 497
15.3 Loading a User's Twitter Timeline Using JSON 500
16.Location and Map Applications 503
16.1 Introduction:Location-Aware Applications 503
16.2 Getting Location Information 503
16.3 Accessing GPS Information in Your Application 505
16.4 Mocking GPS Coordinates on a Device 508
16.5 Using Geocoding and Reverse Geocoding 510
16.6 Getting Ready for Google Maps Development 511
16.7 Adding a Device's Current Location to Google Maps 517
16.8 Drawing a Location Marker on a Google MapView 519
16.9 Drawing Multiple Location Markers on a MapView 523
16.10 Creating Overlays for a Google MapView 528
16.11 Changing Modes of a Google MapView 529
16.12 Drawing an Overlay Icon Without Using a Drawable 530
16.13 Implementing Location Search on Google Maps 535
16.14 Placing a MapView Inside a TabView 537
16.15 Handling a Long-Press in a MapView 541
16.16 Using OpenStreetMap 544
16.17 Creating Overlays in OpenStreetMap Maps 547
16.18 Using a Scale on an OpenStreetMap Map 550
16.19 Handling Touch Events on an OpenStreetMap Overlay 551
16.20 Getting Location Updates with OpenStreetMap Maps 554
17.Accelerometer 559
17.1 Introduction:Sensors 559
17.2 Checking for the Presence or Absence of a Sensor 560
17.3 Using the Accelerometer to Detect Shaking of the Device 561
17.4 Checking Whether a Device Is Facing Up or Facing Down Based on Screen Orientation Using an Accelerometer 564
17.5 Finding the Orientation of an Android Device Using an Orientation Sensor 565
17.6 Reading the Temperature Sensor 567
18.Bluetooth 569
18.1 Introduction:Bluetooth 569
18.2 Enabling Bluetooth and Making the Device Discoverable 569
18.3 Connecting to a Bluetooth-Enabled Device 571
18.4 Listening for and Accepting Bluetooth Connection Requests 574
18.5 Implementing Bluetooth Device Discovery 575
19.System and Device Control 577
19.1 Introduction:System and Device Control 577
19.2 Accessing Phone Network/Connectivity Information 577
19.3 Obtaining Information from the Manifest File 578
19.4 Changing Incoming Call Notification to Silent,Vibrate,or Normal 579
19.5 Copying Text and Getting Text from the Clipboard 581
19.6 Using LED-Based Notifications 582
19.7 Making the Device Vibrate 583
19.8 Running Shell Commands from Your Application 584
19.9 Determining Whether a Given Application Is Running 586
20.Other Programming Languages and Frameworks 587
20.1 Introduction:Other Programming Languages 587
20.2 Running an External/Native Unix/Linux Command 588
20.3 Running Native C/C++Code with JNI on the NDK 589
20.4 Getting Started with the Scripting Layer for Android(SL4A,Formerly Android Scripting Environment) 594
20.5 Creating Alerts in SL4A 597
20.6 Fetching Your Google Documents and Displaying Them in a ListView Using SL4A 600
20.7 Sharing SL4A Scripts in QR Codes 603
20.8 Using Native Handset Functionality from WebView via JavaScript 607
20.9 Creating a Platform-Independent Application Using PhoneGap/Cordova 608
21.Strings and Internationalization 611
21.1 Introduction:Internationalization 611
21.2 Internationalizing Application Text 612
21.3 Finding and Translating Strings 615
21.4 Handling the Nuances of strings.xml 617
22.Packaging,Deploying,and Distributing/Selling Your App 623
22.1 Introduction:Packaging,Deploying,and Distributing 623
22.2 Creating a Signing Certificate 623
22.3 Signing Your Application 626
22.4 Distributing Your Application via Android Play(formerly the Android Market) 627
22.5 Integrating AdMob into Your App 629
22.6 Obfuscating and Optimizing with ProGuard 633
22.7 Providing a Link to Other Published Apps in the Google Play Market 636
Index 641