Table of Contents
Preface; Preface; Conventions Used in This Book; Getting and Using the Code Examples; Safari® Books Online; How to Contact Us; Acknowledgments; Chapter 1: Getting Started; 1.1 Introduction: Getting Started; 1.2 Learning the Java Language; 1.3 Creating a “Hello, World” Application from the Command Line; 1.4 Creating a “Hello, World” Application in Eclipse; 1.5 Setting Up an IDE on Windows to Develop for Android; 1.6 Understanding the Android Life Cycle; 1.7 Installing .apk Files onto an Emulator via the ADB; 1.8 Installing Apps onto an Emulator via SlideME; 1.9 Sharing Java Classes from Another Eclipse Project; 1.10 Referencing Libraries to Implement External Functionality; 1.11 Using SDK Samples to Help Avoid Head Scratching; 1.12 Keeping the Android SDK Updated; 1.13 Taking a Screenshot from the Emulator/Android Device; 1.14 Program: A Simple CountDownTimer Example; 1.15 Program: Tipster, a Tip Calculator for the Android OS; Chapter 2: Designing a Successful Application; 2.1 Introduction: Designing a Successful Android Application; 2.2 Exception Handling; 2.3 Accessing Android’s Application Object as a “Singleton”; 2.4 Keeping Data When the User Rotates the Device; 2.5 Monitoring the Battery Level of an Android Device; 2.6 Creating Splash Screens in Android; 2.7 Designing a Conference/Camp/Hackathon/Institution App; 2.8 Using Google Analytics in an Android Application; 2.9 A Simple Torch/Flashlight; 2.10 Adapting an Android Phone Application to Be Used on a Tablet; 2.11 Setting First-Run Preferences; 2.12 Formatting the Time and Date for Display; 2.13 Controlling Input with KeyListeners; 2.14 Backing Up Android Application Data; 2.15 Using Hints Instead of Tool Tips; Chapter 3: Testing; 3.1 Introduction: Testing; 3.2 Doing Test-Driven Development (TDD) in Android; 3.3 Setting Up an Android Virtual Device (AVD) for App Testing; 3.4 Testing on a Huge Range of Devices with Cloud-based Testing; 3.5 Creating and Using a Test Project; 3.6 Troubleshooting Application Crashes; 3.7 Debugging Using Log.d and LogCat; 3.8 Getting Bug Reports from Users Automatically with BugSense; 3.9 Using a Local Runtime Application Log for Analysis of Field Errors or Situations; 3.10 Reproducing Activity Life-Cycle Scenarios for Testing; 3.11 Keeping Your App Snappy with StrictMode; 3.12 Running the Monkey Program; 3.13 Sending Text Messages and Placing Calls Between AVDs; Chapter 4: Inter-/Intra-Process Communication; 4.1 Introduction: Inter-/Intra-Process Communication; 4.2 Opening a Web Page, Phone Number, or Anything Else with an Intent; 4.3 Emailing Text from a View; 4.4 Sending an Email with Attachments; 4.5 Pushing String Values Using Intent.putExtra(); 4.6 Retrieving Data from a Subactivity Back to Your Main Activity; 4.7 Keeping a Service Running While Other Apps Are on Display; 4.8 Sending/Receiving a Broadcast Message; 4.9 Starting a Service After Device Reboot; 4.10 Creating a Responsive Application Using Threads; 4.11 Using AsyncTask to Do Background Processing; 4.12 Sending Messages Between Threads Using an Activity Thread Queue and Handler; 4.13 Creating an Android Epoch HTML/JavaScript Calendar; Chapter 5: Content Providers; 5.1 Introduction: Content Providers; 5.2 Retrieving Data from a Content Provider; 5.3 Writing a Content Provider; 5.4 Writing an Android Remote Service; Chapter 6: Graphics; 6.1 Introduction: Graphics; 6.2 Using a Custom Font; 6.3 Drawing a Spinning Cube with OpenGL ES; 6.4 Adding Controls to the OpenGL Spinning Cube; 6.5 Freehand Drawing Smooth Curves; 6.6 Taking a Picture Using an Intent; 6.7 Taking a Picture Using android.media.Camera; 6.8 Scanning a Barcode or QR Code with the Google ZXing Barcode Scanner; 6.9 Using AndroidPlot to Display Charts and Graphs; 6.10 Using Inkscape to Create an Android Launcher Icon; 6.11 Creating Easy Launcher Icons from OpenClipArt.org Using Paint.NET; 6.12 Using Nine Patch Files; 6.13 Creating HTML5 Charts with Android RGraph; 6.14 Adding a Simple Raster Animation; 6.15 Using Pinch to Zoom; Chapter 7: Graphical User Interface; 7.1 Introduction: GUI; 7.2 Understanding and Following User Interface Guidelines; 7.3 Handling Configuration Changes by Decoupling the View from the Model; 7.4 Creating a Button and Its Click Event Listener; 7.5 Wiring Up an Event Listener in Five Different Ways; 7.6 Using CheckBoxes and RadioButtons; 7.7 Enhancing UI Design Using Image Buttons; 7.8 Offering a Drop-Down Chooser via the Spinner Class; 7.9 Handling Long-Press/Long-Click Events; 7.10 Displaying Text Fields with TextView and EditText; 7.11 Constraining EditText Values with Attributes and the TextWatcher Interface; 7.12 Implementing AutoCompleteTextView; 7.13 Feeding AutoCompleteTextView Using an SQLite Database Query; 7.14 Turning Edit Fields into Password Fields; 7.15 Changing the Enter Key to “Next” on the Soft Keyboard; 7.16 Processing Key-Press Events in an Activity; 7.17 Let Them See Stars: Using RatingBar; 7.18 Making a View Shake; 7.19 Providing Haptic Feedback; 7.20 Navigating Different Activities Within a TabView; 7.21 Creating a Custom Title Bar; 7.22 Formatting Numbers; 7.23 Formatting with Correct Plurals; 7.24 Starting a Second Screen from the First; 7.25 Creating a Loading Screen That Will Appear Between Two Activities; 7.26 Using SlidingDrawer to Overlap Other Components; 7.27 Customizing the SlidingDrawer Component to Animate/Transition from the Top Down; 7.28 Adding a Border with Rounded Corners to a Layout; 7.29 Detecting Gestures in Android; 7.30 Building a UI Using Android 3.0 Fragments in Android 1.6 and Later; 7.31 Using the Android 3.0 Photo Gallery; 7.32 Creating a Simple App Widget; Chapter 8: GUI Alerts: Menus, Dialogs, Toasts, and Notifications; 8.1 Introduction: GUI Alerts; 8.2 Creating and Displaying a Menu; 8.3 Handling Choice Selection in a Menu; 8.4 Creating a Submenu; 8.5 Creating a Pop-up/Alert Dialog; 8.6 Using a Timepicker Widget; 8.7 Creating an iPhone-like Wheel Picker for Selection; 8.8 Creating a Tabbed Dialog; 8.9 Creating a ProgressDialog; 8.10 Creating a Custom Dialog with Buttons, Images, and Text; 8.11 Creating a Reusable About Box Class; 8.12 Customizing the Appearance of a Toast; 8.13 Creating a Notification in the Status Bar; Chapter 9: GUI: ListView; 9.1 Introduction: ListView; 9.2 Building List-Based Applications with ListView; 9.3 Creating a “No Data” View for ListViews; 9.4 Creating an Advanced ListView with Images and Text; 9.5 Using Section Headers in ListViews; 9.6 Keeping the ListView with the User’s Focus; 9.7 Writing a Custom List Adapter; 9.8 Handling Orientation Changes: From ListView Data Values to Landscape Charting; Chapter 10: Multimedia; 10.1 Introduction: Multimedia; 10.2 Playing a YouTube Video; 10.3 Using the Gallery with the ImageSwitcher View; 10.4 Capturing Video Using MediaRecorder; 10.5 Using Android’s Face Detection Capability; 10.6 Playing Audio from a File; 10.7 Playing Audio Without Interaction; 10.8 Using Speech to Text; 10.9 Making the Device Speak with Text-to-Speech; Chapter 11: Data Persistence; 11.1 Introduction: Data Persistence; 11.2 Getting File Information; 11.3 Reading a File Shipped with the App Rather Than in the Filesystem; 11.4 Listing a Directory; 11.5 Getting Total and Free Space Information About the SD Card; 11.6 Providing User Preference Activity with Minimal Effort; 11.7 Checking the Consistency of Default Shared Preferences; 11.8 Performing Advanced Text Searches; 11.9 Creating an SQLite Database in an Android Application; 11.10 Inserting Values into an SQLite Database; 11.11 Loading Values from an Existing SQLite Database; 11.12 Working with Dates in SQLite; 11.13 Parsing JSON Using JSONObject; 11.14 Parsing an XML Document Using the DOM API; 11.15 Parsing an XML Document Using an XmlPullParser; 11.16 Adding a Contact; 11.17 Reading Contact Data; Chapter 12: Telephone Applications; 12.1 Introduction: Telephone Applications; 12.2 Doing Something When the Phone Rings; 12.3 Processing Outgoing Phone Calls; 12.4 Dialing the Phone; 12.5 Sending Single-Part or Multipart SMS Messages; 12.6 Receiving an SMS Message in an Android Application; 12.7 Using Emulator Controls to Send SMS Messages to the Emulator; 12.8 Using Android’s TelephonyManager to Obtain Device Information; Chapter 13: Networked Applications; 13.1 Introduction: Networking; 13.2 Using a RESTful Web Service; 13.3 Extracting Information from Unstructured Text Using Regular Expressions; 13.4 Parsing RSS/Atom Feeds Using ROME; 13.5 Using MD5 to Digest Clear Text; 13.6 Converting Text into Hyperlinks; 13.7 Accessing a Web Page Using WebView; 13.8 Customizing a WebView; Chapter 14: Gaming and Animation; 14.1 Introduction: Gaming and Animation; 14.2 Building an Android Game Using flixel-android; 14.3 Building an Android Game Using AndEngine (Android-Engine); 14.4 Processing Timed Keyboard Input; Chapter 15: Social Networking; 15.1 Introduction: Social Networking; 15.2 Integrating Social Networking Using HTTP; 15.3 Loading a User’s Twitter Timeline Using JSON; Chapter 16: Location and Map Applications; 16.1 Introduction: Location-Aware Applications; 16.2 Getting Location Information; 16.3 Accessing GPS Information in Your Application; 16.4 Mocking GPS Coordinates on a Device; 16.5 Using Geocoding and Reverse Geocoding; 16.6 Getting Ready for Google Maps Development; 16.7 Adding a Device’s Current Location to Google Maps; 16.8 Drawing a Location Marker on a Google MapView; 16.9 Drawing Multiple Location Markers on a MapView; 16.10 Creating Overlays for a Google MapView; 16.11 Changing Modes of a Google MapView; 16.12 Drawing an Overlay Icon Without Using a Drawable; 16.13 Implementing Location Search on Google Maps; 16.14 Placing a MapView Inside a TabView; 16.15 Handling a Long-Press in a MapView; 16.16 Using OpenStreetMap; 16.17 Creating Overlays in OpenStreetMap Maps; 16.18 Using a Scale on an OpenStreetMap Map; 16.19 Handling Touch Events on an OpenStreetMap Overlay; 16.20 Getting Location Updates with OpenStreetMap Maps; Chapter 17: Accelerometer; 17.1 Introduction: Sensors; 17.2 Checking for the Presence or Absence of a Sensor; 17.3 Using the Accelerometer to Detect Shaking of the Device; 17.4 Checking Whether a Device Is Facing Up or Facing Down Based on Screen Orientation Using an Accelerometer; 17.5 Finding the Orientation of an Android Device Using an Orientation Sensor; 17.6 Reading the Temperature Sensor; Chapter 18: Bluetooth; 18.1 Introduction: Bluetooth; 18.2 Enabling Bluetooth and Making the Device Discoverable; 18.3 Connecting to a Bluetooth-Enabled Device; 18.4 Listening for and Accepting Bluetooth Connection Requests; 18.5 Implementing Bluetooth Device Discovery; Chapter 19: System and Device Control; 19.1 Introduction: System and Device Control; 19.2 Accessing Phone Network/Connectivity Information; 19.3 Obtaining Information from the Manifest File; 19.4 Changing Incoming Call Notification to Silent, Vibrate, or Normal; 19.5 Copying Text and Getting Text from the Clipboard; 19.6 Using LED-Based Notifications; 19.7 Making the Device Vibrate; 19.8 Running Shell Commands from Your Application; 19.9 Determining Whether a Given Application Is Running; Chapter 20: Other Programming Languages and Frameworks; 20.1 Introduction: Other Programming Languages; 20.2 Running an External/Native Unix/Linux Command; 20.3 Running Native C/C++ Code with JNI on the NDK; 20.4 Getting Started with the Scripting Layer for Android (SL4A, Formerly Android Scripting Environment); 20.5 Creating Alerts in SL4A; 20.6 Fetching Your Google Documents and Displaying Them in a ListView Using SL4A; 20.7 Sharing SL4A Scripts in QR Codes; 20.8 Using Native Handset Functionality from WebView via JavaScript; 20.9 Creating a Platform-Independent Application Using PhoneGap/Cordova; Chapter 21: Strings and Internationalization; 21.1 Introduction: Internationalization; 21.2 Internationalizing Application Text; 21.3 Finding and Translating Strings; 21.4 Handling the Nuances of strings.xml; Chapter 22: Packaging, Deploying, and Distributing/Selling Your App; 22.1 Introduction: Packaging, Deploying, and Distributing; 22.2 Creating a Signing Certificate; 22.3 Signing Your Application; 22.4 Distributing Your Application via Android Play (formerly the Android Market); 22.5 Integrating AdMob into Your App; 22.6 Obfuscating and Optimizing with ProGuard; 22.7 Providing a Link to Other Published Apps in the Google Play Market; Colophon;