PartⅠ.Tools and Basics 3
1. Installing the Android SDKand Prerequisites 3
Installing the Android SDK and Prerequisites 3
The Java Development Kit (JDK) 4
The Eclipse Integrated Development Environment (IDE) 5
The Android SDK 7
Adding Build Targets to the SDK 8
The Android Developer Tools (ADT) Plug-in for Eclipse 9
Test Drive: Confirm That Your Installation Works 12
Making an Android Project 12
Making an Android Virtual Device (AVD) 16
Running a Program on an AVD 19
Running a Program on an Android Device 20
Troubleshooting SDK Problems: No Build Targets 21
Components of the SDK 21
The Android Debug Bridge (adb) 21
The Dalvik Debug Monitor Server (DDMS) 21
Components of the ADT Eclipse Plug-in 23
Android Virtual Devices 25
Other SDK Tools 26
Keeping Up-to-Date 27
Keeping the Android SDK Up-to-Date 28
Keeping Eclipse and the ADT Plug-in Up-to-Date 28
Keeping the JDK Up-to-Date 29
Example Code 30
SDK Example Code 30
Example Code from This Book 30
On Reading Code 31
2. Java for Android 33
Android Is Reshaping Client-Side Java 33
The Java Type System 34
Primitive Types 34
Objects and Classes 35
Object Creation 35
The Object Class and Its Methods 37
Objects, Inheritance, and Polymorphism 39
Final and Static Declarations 41
Abstract Classes 45
Interfaces 46
Exceptions 48
The Java Collections Framework 51
Garbage Collection 55
Scope 55
Java Packages 56
Access Modifiers and Encapsulation 57
Idioms of Java Programming 59
Type Safety in Java 59
Using Anonymous Classes 62
Modular Programming in Java 64
Basic Multithreaded Concurrent Programming in Java 67
Synchronization and Thread Safety 68
Thread Control with wait() and notify() Methods 71
Synchronization and Data Structures 72
3. The Ingredients of an Android Application 75
Traditional Programming Models Compared to Android 75
Activities, Intents, and Tasks 77
Other Android Components 79
Service 79
Content Providers 80
BroadcastReceiver 83
Component Life Cycles 83
The Activity Life Cycle 83
On Porting Software to Android 85
Static Application Resources and Context 86
Organizing Java Source 87
Resources 88
Application Manifests 90
Initialization Parameters in AndroidManifest.xml 91
Packaging an Android Application: The .apk File 94
The Android Application Runtime Environment 94
The Dalvik VM 95
Zygote: Forking a New Process 95
Sandboxing: Processes and Users 95
The Android Libraries 96
Extending Android 98
The Android Application Template 98
Overrides and Callbacks 99
Polymorphism and Composition 101
Extending Android Classes 102
Concurrency in Android 104
AsyncTask and the UI Thread 105
Threads in an Android Process 116
Serialization 118
Java Serialization 119
Parcelable 120
Classes That Support Serialization 124
Serialization and the Application Life Cycle 125
4. Getting Your Application into Users' Hands 127
Application Signing 127
Public Key Encryption and Cryptographic Signing 127
How Signatures Protect Software Users, Publishers, and Secure Communications 129
Signing an Application 130
Placing an Application for Distribution in the Android Market 135
Becoming an Official Android Developer 135
Uploading Applications in the Market 136
Getting Paid 138
Alternative Distribution 139
Verizon Applications for Android 139
Amazon Applications for Android 141
Google Maps API Keys 143
Specifying API-Level Compatibility 144
Compatibility with Many Kinds of Screens 144
Testing for Screen Size Compatibility 145
Resource Qualifiers and Screen Sizes 145
5. Eclipse forAndroid Software Development 147
Eclipse Concepts and Terminology 148
Plug-ins 148
Workspaces 149
Java Environments 150
Projects 151
Builders and Artifacts 151
Extensions 151
Associations 153
Eclipse Views and Perspectives 153
The Package Explorer View 154
The Task List View 154
The Outline View 155
The Problems View 155
Java Coding in Eclipse 156
Editing Java Code and Code Completion 156
Re factoring 156
Eclipse and Android 158
Preventing Bugs and Keeping Your Code Clean 158
Static Analyzers 158
Applying Static Analysis to Android Code 163
Limitations of Static Analysis 166
Eclipse Idiosyncrasies and Alternatives 166
PartⅡ. About the Android Framework 166
6. Building a View 171
Android GUI Architecture 171
The Model 171
The View 172
The Controller 173
Putting It Together 173
Assembling a Graphical Interface 175
Wiring Up the Controller 180
Listening to the Model 182
Listening for Touch Events 187
Multiple Pointers and Gestures 190
Listening for Key Events 192
Choosing an Event Handler 193
Advanced Wiring: Focus and Threading 195
The Menu and the Action Bar 199
View Debugging and Optimization 202
7. Fragments and Multiplatform Support 205
Creating a Fragment 206
Fragment Life Cycle 209
The Fragment Manager 210
Fragment Transactions 211
The Support Package 216
Fragments and Layout 217
8. Drawing 2D and 3D Graphics 225
Rolling Your Own Widgets 225
Layout 226
Canvas Drawing 231
Drawables 242
Bitmaps 247
Bling 248
Shadows, Gradients, Filters, and Hardware Acceleration 251
Animation 253
OpenGL Graphics 258
9. Handling and Persisting Data 263
Relational Database Overview 263
SQLite 264
The SQL Language 264
SQL Data Definition Commands 265
SQL Data Manipulation Commands 268
Additional Database Concepts 270
Database Transactions 271
Example Database Manipulation Using sqlite3 271
SQL and the Database-Centric Data Model for Android Applications 275
The Android Database Classes 276
Database Design for Android Applications 277
Basic Structure of the SimpleVideoDbHelper Class 277
Using the Database API: MJAndroid 280
Android and Social Networking 280
The Source Folder (src) 282
Loading and Starting the Application 283
Database Queries and Reading Data from the Database 283
Modifying the Database 287
PartⅢ. A Skeleton Application for Android 295
10. A Framework for a Well-Behaved Application 295
Visualizing Life Cycles 296
Visualizing the Activity Life Cycle 296
Visualizing the Fragment Life Cycle 308
The Activity Class and Well-Behaved Applications 311
The Activity Life Cycle and the User Experience 311
Life Cycle Methods of the Application Class 312
11. Buildinga User Interface 315
Top-Level Design 316
Fragment, Activity, and Scalable Design 317
Visual Editing of User Interfaces 319
Starting with a Blank Slate 319
Laying Out the Fragments 323
Lay Out Fragments Using the Visual Editor 324
Multiple Layouts 325
Folding and Unfolding a Scalable UI 326
Decisions about Screen Size and Resolution 326
Delegating to Fragment Classes 330
Making Activity, Fragment, Action Bar, and Multiple Layouts Work To-gether 333
Action Bar 333
Tabs and Fragments 333
The Other Activity 336
12. Using Content Providers 341
Understanding Content Providers 342
Implementing a Content Provider 343
Browsing Video with Finch 344
Defining a Provider Public API 345
Defining the CONTENT_URI 346
Creating the Column Names 348
Declaring Column Specification Strings 348
Writing and Integrating a Content Provider 350
Common Content Provider Tasks 350
File Management and Binary Data 352
Android MVC and Content Observation 354
A Complete Content Provider: The SimpleFinchVideoContentProvider Code 355
The SimpleFinch Video ContentProvider Class and Instance Variables 355
Implementing the on Create Method 357
Implementing the getType Method 358
Implementing the Provider API 358
Determining How Often to Notify Observers 363
Declaring Your Content Provider 363
13. A Content Provider as a Facade for a RESTful Web Service 365
Developing RESTful Android Applications 366
A "Network MVC" 367
Summary of Benefits 369
Code Example: Dynamically Listing and Caching YouTube Video Content 370
Structure of the Source Code for the Finch YouTube Video Example 371
Stepping Through the Search Application 372
Step 1: Our UI Collects User Input 373
Step 2: Our Controller Listens for Events 373
Step 3: The Controller Queries the Content Provider with a managedQuery on the Content Provider/Model 374
Step 4: Implementing the RESTful Request 374
Constants and Initialization 375
Creating the Database 375
A Networked Query Method 375
insert and ResponseHandlers 388
File Management: Storing Thumbnails 390
PartⅣ. Advanced Topics 395
14. Search 395
Search Interface 395
Search Basics 395
Search Dialog 402
Search Widget 403
Query Suggestions 404
Recent Query Suggestions 404
Custom Query Suggestions 405
15. Location and Mapping 411
Location-Based Services 412
Mapping 413
The Google Maps Activity 413
The MapView and MapActivity 414
Working with MapViews 415
MapView and MyLocationOverlay Initialization 415
Pausing and Resuming a MapActivity 418
Controlling the Map with Menu Buttons 419
Controlling the Map with the Keypad 421
Location Without Maps 422
The Manifest and Layout Files 422
Connecting to a Location Provider and Getting Location Updates 423
Updating the Emulated Location 426
StreetView 430
16. Multimedia 433
Audio and Video 433
Playing Audio and Video 434
Audio Playback 435
Video Playback 437
Recording Audio and Video 438
Audio Recording 439
Video Recording 442
Stored Media Content 443
17. Sensors, NFC, Speech, Gestures, and Accessibility 445
Sensors 445
Position 447
Other Sensors 449
Near Field Communication (NFC) 450
Reading a Tag 451
Writing to a Tag 457
P2P Mode and Beam 459
Gesture Input 461
Accessibility 463
18. Communication, Identity, Sync, and Social Media 467
Account Contacts 467
Authentication and Synchronization 470
Authentication 471
Synchronization 478
Bluetooth 485
The Bluetooth Protocol Stack 485
BlueZ: The Linux Bluetooth Implementation 487
Using Bluetooth in Android Applications 487
19. The Android Native Development Kit (NDK) 501
Native Methods and JNI Calls 502
Conventions in Native Method Calls 502
Conventions on the Java Side 503
The Android NDK 504
Setting Up the NDK Environment 504
Editing C/C++ Code in Eclipse 504
Compiling with the NDK 505
JNI, NDK, and SDK: A Sample App 506
Native Libraries and Headers Provided by the NDK 507
Building Your Own Custom Library Modules 509
Native Activities 512
Index 519