You are previewing Pro Android 2.
O'Reilly logo
Pro Android 2

Book Description

Pro Android 2 shows you how to build real-world and fun mobile applications using Google's latest Android SDK. This new edition is fully updated for Android 2, covering everything from the fundamentals of building applications for embedded devices to advanced concepts such as custom 3D components, OpenGL, and touchscreens including gestures. While other Android development guides simply discuss topics, Pro Android 2 offers the combination of expert insight and real sample applications that work.

Discover the design and architecture of the Android SDK through practical examples, and how to build mobile applications using the Android SDK.

Explore and use the Android APIs, including those for media and Wi-Fi.

Learn about Android 2's integrated local and web search, handwriting gesture UI, Google Translate, and text-to-speech features.

Pro Android 2 dives deep, providing you with all the knowledge and techniques you need to build mobile applications ranging from games to Google apps, including add-ons to Google Docs. You'll be able to extend and run the new Google Chrome APIs on the G1, the G2, and other next-generation Google phones and Android-enabled devices.

Table of Contents

  1. Copyright
  2. About the Authors
  3. About the Technical Reviewer
  4. Acknowledgments
  5. Foreword
  6. 1. Introducing the Android Computing Platform
    1. 1.1. A New Platform for a New Personal Computer
    2. 1.2. History of Android
    3. 1.3. Delving into the Dalvik VM
    4. 1.4. Comparing Android and Java ME
    5. 1.5. Understanding the Android Software Stack
    6. 1.6. Developing an End-User Application with the Android SDK
      1. 1.6.1. Android Emulator
      2. 1.6.2. The Android UI
      3. 1.6.3. The Android Foundational Components
      4. 1.6.4. Advanced UI Concepts
      5. 1.6.5. Android Service Components
      6. 1.6.6. Android Media and Telephony Components
      7. 1.6.7. Android Java Packages
    7. 1.7. Taking Advantage of Android Source Code
    8. 1.8. Summary
  7. 2. Getting Your Feet Wet
    1. 2.1. Setting Up Your Environment
      1. 2.1.1. Downloading JDK 6
      2. 2.1.2. Downloading Eclipse 3.5
      3. 2.1.3. Downloading the Android SDK
      4. 2.1.4. Installing Android Development Tools (ADT)
    2. 2.2. Learning the Fundamental Components
      1. 2.2.1. View
      2. 2.2.2. Activit
      3. 2.2.3. Intent
      4. 2.2.4. Content Provider
      5. 2.2.5. Service
      6. 2.2.6. AndroidManifest.xml
      7. 2.2.7. Android Virtual Devices
    3. 2.3. Hello World!
    4. 2.4. Android Virtual Devices
    5. 2.5. Exploring the Structure of an Android Application
    6. 2.6. Analyzing the Notepad Application
    7. 2.7. Loading and Running the Notepad Application
      1. 2.7.1. Dissecting the Application
    8. 2.8. Examining the Application Lifecycle
    9. 2.9. Debugging Your App
    10. 2.10. Summary
  8. 3. Using Resources, Content Providers, and Intents
    1. 3.1. Understanding Resources
      1. 3.1.1. String Resources
      2. 3.1.2. Layout Resources
      3. 3.1.3. Resource-Reference Syntax
      4. 3.1.4. Defining Your Own Resource IDs for Later Use
      5. 3.1.5. Compiled and Noncompiled Android Resources
      6. 3.1.6. Enumerating Key Android Resources
        1. 3.1.6.1. Color Resources
        2. 3.1.6.2. More on String Resources
        3. 3.1.6.3. Dimension Resources
        4. 3.1.6.4. Image Resources
        5. 3.1.6.5. Color-Drawable Resources
      7. 3.1.7. Working with Arbitrary XML Resource Files
      8. 3.1.8. Working with Raw Resources
      9. 3.1.9. Working with Assets
      10. 3.1.10. Reviewing the Resources Directory Structure
    2. 3.2. Understanding Content Providers
      1. 3.2.1. Exploring Android's Built-in Providers
        1. 3.2.1.1. Exploring Databases on the Emulator and Available Devices
        2. 3.2.1.2. Quick SQLite Primer
      2. 3.2.2. Architecture of Content Providers
        1. 3.2.2.1. Structure of Android Content URIs
        2. 3.2.2.2. Structure of Android MIME Types
        3. 3.2.2.3. Reading Data Using URIs
        4. 3.2.2.4. Using the Cursor
        5. 3.2.2.5. Working with the where Clause
          1. 3.2.2.5.1. Passing a where Clause Through a URI
          2. 3.2.2.5.2. Using Explicit WHERE Clauses
        6. 3.2.2.6. Inserting Records
        7. 3.2.2.7. Adding a File to a Content Provider
        8. 3.2.2.8. Updates and Deletes
      3. 3.2.3. Implementing Content Providers
        1. 3.2.3.1. Planning a Database
        2. 3.2.3.2. Extending ContentProvider
        3. 3.2.3.3. Fulfilling MIME-Type Contracts
        4. 3.2.3.4. Implementing the Query Method
        5. 3.2.3.5. Implementing an Insert Method
        6. 3.2.3.6. Implementing an Update Method
        7. 3.2.3.7. Implementing a Delete Method
        8. 3.2.3.8. Using UriMatcher to Figure Out the URIs
        9. 3.2.3.9. Using Projection Maps
        10. 3.2.3.10. Registering the Provider
    3. 3.3. Understanding Intents
      1. 3.3.1. Available Intents in Android
      2. 3.3.2. Intents and Data URIs
      3. 3.3.3. Generic Actions
      4. 3.3.4. Using Extra Information
      5. 3.3.5. Using Components to Directly Invoke an Activity
      6. 3.3.6. Best Practice for Component Designers
      7. 3.3.7. Understanding Intent Categories
      8. 3.3.8. The Rules for Resolving Intents to Their Components
      9. 3.3.9. Exercising the ACTION_PICK
      10. 3.3.10. Exercising the GET_CONTENT Action
    4. 3.4. Further Resources for This Chapter
    5. 3.5. Summary
  9. 4. Building User Interfaces and Using Controls
    1. 4.1. UI Development in Android
    2. 4.2. Understanding Android's Common Controls
      1. 4.2.1. Text Controls
        1. 4.2.1.1. TextView
        2. 4.2.1.2. EditText
        3. 4.2.1.3. AutoCompleteTextView
        4. 4.2.1.4. MultiAutoCompleteTextView
      2. 4.2.2. Button Controls
        1. 4.2.2.1. The Button Control
        2. 4.2.2.2. The ImageButton Control
        3. 4.2.2.3. The ToggleButton Control
        4. 4.2.2.4. The CheckBox Control
        5. 4.2.2.5. The RadioButton Control
      3. 4.2.3. List Controls
      4. 4.2.4. Grid Controls
      5. 4.2.5. Date and Time Controls
        1. 4.2.5.1. The DatePicker and TimePicker Controls
        2. 4.2.5.2. The AnalogClock and DigitalClock Controls
    3. 4.3. Other Interesting Controls in Android
      1. 4.3.1. The MapView Control
      2. 4.3.2. The Gallery Control
      3. 4.3.3. The Spinner Control
    4. 4.4. Understanding Layout Managers
      1. 4.4.1. The LinearLayout Layout Manager
        1. 4.4.1.1. Understanding Weight and Gravity
        2. 4.4.1.2. android:gravity vs. android:layout_gravity
      2. 4.4.2. The TableLayout Layout Manager
      3. 4.4.3. The RelativeLayout Layout Manager
      4. 4.4.4. The FrameLayout Layout Manager
      5. 4.4.5. Customizing Layout for Various Device Configurations
    5. 4.5. Understanding Adapters
      1. 4.5.1. Getting to Know SimpleCursorAdapter
      2. 4.5.2. Getting to Know ArrayAdapter
      3. 4.5.3. Creating Custom Adapters
    6. 4.6. Debugging and Optimizing Layouts with the Hierarchy Viewer
    7. 4.7. Summary
  10. 5. Working with Menus and Dialogs
    1. 5.1. Understanding Android Menus
      1. 5.1.1. Creating a Menu
      2. 5.1.2. Working with Menu Groups
      3. 5.1.3. Responding to Menu Items
        1. 5.1.3.1. Responding to Menu Items Through onOptionsItemSelected
        2. 5.1.3.2. Responding to Menu Items Through Listeners
        3. 5.1.3.3. Using an Intent to Respond to Menu Items
      4. 5.1.4. Creating a Test Harness for Testing Menus
        1. 5.1.4.1. Creating an XML Layout
        2. 5.1.4.2. Creating an Activity
        3. 5.1.4.3. Setting Up the Menu
        4. 5.1.4.4. Adding Regular Menu Items
        5. 5.1.4.5. Adding Secondary Menu Items
        6. 5.1.4.6. Responding to Menu-Item Clicks
        7. 5.1.4.7. Tweaking the AndroidManifest.xml File
    2. 5.2. Working with Other Menu Types
      1. 5.2.1. Expanded Menus
      2. 5.2.2. Working with Icon Menus
      3. 5.2.3. Working with Submenus
      4. 5.2.4. Provisioning for System Menus
      5. 5.2.5. Working with Context Menus
        1. 5.2.5.1. Registering a View for a Context Menu
        2. 5.2.5.2. Populating a Context Menu
        3. 5.2.5.3. Responding to Context Menu Items
      6. 5.2.6. Working with Alternative Menus
      7. 5.2.7. Working with Menus in Response to Changing Data
    3. 5.3. Loading Menus Through XML Files
      1. 5.3.1. Structure of an XML Menu Resource File
      2. 5.3.2. Inflating XML Menu Resource Files
      3. 5.3.3. Responding to XML-Based Menu Items
      4. 5.3.4. A Brief Introduction to Additional XML Menu Tags
        1. 5.3.4.1. Group Category Tag
        2. 5.3.4.2. Checkable Behavior Tags
        3. 5.3.4.3. Tags to Simulate a Submenu
        4. 5.3.4.4. Menu Icon Tag
        5. 5.3.4.5. Menu Enabling/Disabling Tag
        6. 5.3.4.6. Menu Item Shortcuts
        7. 5.3.4.7. Menu Visibility
    4. 5.4. Using Dialogs in Android
      1. 5.4.1. Designing an Alert Dialog
      2. 5.4.2. Designing a Prompt Dialog
        1. 5.4.2.1. XML Layout File for the Prompt Dialog
        2. 5.4.2.2. Setting Up an Alert-Dialog Builder with a User View
        3. 5.4.2.3. Setting Up Buttons and Listeners
        4. 5.4.2.4. Creating and Showing the Prompt Dialog
        5. 5.4.2.5. Prompt Dialog Listener
        6. 5.4.2.6. Putting It All Together
      3. 5.4.3. The Nature of Dialogs in Android
      4. 5.4.4. Rearchitecting the Prompt Dialog
    5. 5.5. Working with Managed Dialogs
      1. 5.5.1. Understanding the Managed-Dialog Protocol
      2. 5.5.2. Recasting the Non-Managed Dialog As a Managed Dialog
      3. 5.5.3. Simplifying the Managed-Dialog Protocol
        1. 5.5.3.1. IDialogProtocol
        2. 5.5.3.2. ManagedActivityDialog
        3. 5.5.3.3. DialogRegistry
        4. 5.5.3.4. ManagedDialogsActivity
        5. 5.5.3.5. IDialogFinishedCallBack
        6. 5.5.3.6. GenericManagedAlertDialog
        7. 5.5.3.7. GenericPromptDialog
    6. 5.6. Summary
  11. 6. Unveiling 2D Animation
    1. 6.1. Frame-by-Frame Animation
      1. 6.1.1. Planning for Frame-by-Frame Animation
      2. 6.1.2. Creating the Activity
      3. 6.1.3. Adding Animation to the Activity
    2. 6.2. Layout Animation
      1. 6.2.1. Basic Tweening Animation Types
      2. 6.2.2. Planning the Layout-Animation Test Harness
      3. 6.2.3. Creating the Activity and the ListView
      4. 6.2.4. Animating the ListView
      5. 6.2.5. Using Interpolators
    3. 6.3. View Animation
      1. 6.3.1. Understanding View Animation
      2. 6.3.2. Adding Animation
      3. 6.3.3. Using Camera to Provide Depth Perception in 2D
      4. 6.3.4. Exploring the AnimationListener Class
      5. 6.3.5. Some Notes on Transformation Matrices
    4. 6.4. Summary
  12. 7. Exploring Security and Location-Based Services
    1. 7.1. Understanding the Android Security Model
      1. 7.1.1. Overview of Security Concepts
      2. 7.1.2. Signing Applications for Deployment
        1. 7.1.2.1. Generating a Self-Signed Certificate Using the Keytool
        2. 7.1.2.2. Using the Jarsigner Tool to Sign the .apk File
        3. 7.1.2.3. Aligning Your Application with zipalign
        4. 7.1.2.4. Installing Updates to an Application and Signing
    2. 7.2. Performing Runtime Security Checks
      1. 7.2.1. Understanding Security at the Process Boundary
      2. 7.2.2. Declaring and Using Permissions
      3. 7.2.3. Understanding and Using Custom Permissions
      4. 7.2.4. Understanding and Using URI Permissions
    3. 7.3. Working with Location-Based Services
      1. 7.3.1. Understanding the Mapping Package
        1. 7.3.1.1. Obtaining a map-api Key from Google
        2. 7.3.1.2. Understanding MapView and MapActivity
        3. 7.3.1.3. Using Overlays
      2. 7.3.2. Understanding the Location Package
        1. 7.3.2.1. Geocoding with Android
        2. 7.3.2.2. Geocoding with Background Threads
        3. 7.3.2.3. Understanding the LocationManager Service
        4. 7.3.2.4. Using MyLocationOverlay
    4. 7.4. Summary
  13. 8. Building and Consuming Services
    1. 8.1. Consuming HTTP Services
      1. 8.1.1. Using the HttpClient for HTTP GET Requests
      2. 8.1.2. Using the HttpClient for HTTP POST Requests
      3. 8.1.3. Dealing with Exceptions
      4. 8.1.4. Addressing Multithreading Issues
    2. 8.2. Doing Interprocess Communication
      1. 8.2.1. Creating a Simple Service
      2. 8.2.2. Understanding Services in Android
      3. 8.2.3. Understanding Local Services
      4. 8.2.4. Understanding AIDL Services
      5. 8.2.5. Defining a Service Interface in AIDL
      6. 8.2.6. Implementing an AIDL Interface
      7. 8.2.7. Calling the Service from a Client Application
      8. 8.2.8. Passing Complex Types to Services
    3. 8.3. Summary
  14. 9. Using the Media Framework and Telephony APIs
    1. 9.1. Using the Media APIs
      1. 9.1.1.
        1. 9.1.1.1. Understanding and Using SD Cards
      2. 9.1.2. Playing Audio Content
      3. 9.1.3. Understanding the setDataSource Method
      4. 9.1.4. Playing Video Content
      5. 9.1.5. Understanding the MediaPlayer Oddities
      6. 9.1.6. Exploring Audio Recording
      7. 9.1.7. Exploring Video Recording
      8. 9.1.8. Exploring the MediaStore Class
      9. 9.1.9. Adding Media Content to the Media Store
    2. 9.2. Using the Telephony APIs
      1. 9.2.1. Working with SMS
        1. 9.2.1.1. Sending SMS Messages
        2. 9.2.1.2. Monitoring Incoming SMS Messages
        3. 9.2.1.3. Working with SMS Folders
        4. 9.2.1.4. Sending E-mail
      2. 9.2.2. Working with the Telephony Manager
    3. 9.3. Summary
  15. 10. Programming 3D Graphics with OpenGL
    1. 10.1. Understanding the History and Background of OpenGL
      1. 10.1.1. OpenGL ES
      2. 10.1.2. OpenGL ES and Java ME
      3. 10.1.3. M3G: Another Java ME 3D Graphics Standard
    2. 10.2. Fundamentals of OpenGL
      1. 10.2.1. Essential Drawing with OpenGL ES
        1. 10.2.1.1. glVertexPointer and Specifying Drawing Vertices
        2. 10.2.1.2. glDrawElements
        3. 10.2.1.3. glClear
        4. 10.2.1.4. glColor
      2. 10.2.2. Understanding OpenGL Camera and Coordinates
        1. 10.2.2.1. gluLookAt and the Camera Symbolism
        2. 10.2.2.2. glFrustum and the Viewing Volume
        3. 10.2.2.3. glViewport and Screen Size
    3. 10.3. Interfacing OpenGL ES with Android
      1. 10.3.1. Using GLSurfaceView and Related Classes
      2. 10.3.2. Simple Test Harness That Draws a Triangle
      3. 10.3.3. Changing Camera Settings
      4. 10.3.4. Using Indices to Add Another Triangle
      5. 10.3.5. Animating the Simple OpenGL Triangle
        1. 10.3.5.1. AnimatedTriangleActivity.java
        2. 10.3.5.2. AnimatedSimpleTriangleRenderer
    4. 10.4. Braving OpenGL: Shapes and Textures
      1. 10.4.1. A Simple Menu Trick for Your Demos
      2. 10.4.2. Drawing a Rectangle
      3. 10.4.3. Working with Shapes
        1. 10.4.3.1. A Regular Polygon As a Shape
        2. 10.4.3.2. Implementing the RegularPolygon Shape
        3. 10.4.3.3. Rendering a Square Using RegularPolygon
        4. 10.4.3.4. Animating RegularPolygons
      4. 10.4.4. Working with Textures
        1. 10.4.4.1. Understanding Textures
        2. 10.4.4.2. Normalized Texture Coordinates
        3. 10.4.4.3. Abstracting Common Texture Handling
        4. 10.4.4.4. Drawing Using Textures
      5. 10.4.5. Drawing Multiple Figures
      6. 10.4.6. OpenGL Resources
    5. 10.5. Summary
  16. 11. Managing and Organizing Preferences
    1. 11.1. Exploring the Preferences Framework
      1. 11.1.1. Understanding ListPreference
      2. 11.1.2. Manipulating Preferences Programmatically
      3. 11.1.3. Understanding CheckBoxPreference
      4. 11.1.4. Understanding EditTextPreference
      5. 11.1.5. Understanding RingtonePreference
    2. 11.2. Organizing Preferences
    3. 11.3. Summary
  17. 12. Exploring Live Folders
    1. 12.1. Exploring Live Folders
      1. 12.1.1. How a User Experiences Live Folders
      2. 12.1.2. Building a Live Folder
        1. 12.1.2.1. AndroidManifest.xml
        2. 12.1.2.2. AllContactsLiveFolderCreatorActivity.java
        3. 12.1.2.3. MyContactsProvider.java
        4. 12.1.2.4. MyCursor.java
        5. 12.1.2.5. BetterCursorWrapper.java
        6. 12.1.2.6. SimpleActivity.java
        7. 12.1.2.7. Exercising Live Folders
    2. 12.2. Summary
  18. 13. Home Screen Widgets
    1. 13.1. Architecture of Home Screen Widgets
      1. 13.1.1. What Are Home Screen Widgets?
      2. 13.1.2. User Experience with Home Screen Widgets
        1. 13.1.2.1. Creating a Widget Instance on the Home Screen
        2. 13.1.2.2. Understanding Widget Configurator
      3. 13.1.3. Lifecycle of a Widget
        1. 13.1.3.1. Widget Definition Phase
        2. 13.1.3.2. Widget Instance Creation Phase
        3. 13.1.3.3. onUpdate Phase
        4. 13.1.3.4. Widget View Mouse Click Event Callbacks Phase
        5. 13.1.3.5. Deleting a Widget Instance
        6. 13.1.3.6. Uninstalling Widget Packages
    2. 13.2. A Sample Widget Application
      1. 13.2.1. Defining the Widget Provider
      2. 13.2.2. Defining Widget Size
      3. 13.2.3. Widget Layout-Related Files
        1. 13.2.3.1. Widget Layout File
        2. 13.2.3.2. Widget Background Shape File
      4. 13.2.4. Implementing a Widget Provider
      5. 13.2.5. Implementing Widget Models
        1. 13.2.5.1. Interface for a Widget Model
        2. 13.2.5.2. Abstract Implementation of a Widget Model
        3. 13.2.5.3. Implementation of a Widget Model for Birthday Widget
        4. 13.2.5.4. A Few Date-Related Utilities
      6. 13.2.6. Implementing Widget Configuration Activity
    3. 13.3. Widget Limitations and Extensions
    4. 13.4. Resources
    5. 13.5. Summary
  19. 14. Android Search
    1. 14.1. Android Search Experience
      1. 14.1.1. Exploring Android Global Search
      2. 14.1.2. Enabling Suggestion Providers for Global Search
      3. 14.1.3. QSB and Suggestions Provider Interaction
    2. 14.2. Activities and Search Key Interaction
      1. 14.2.1. Behavior of Search Key on a Regular Activity
      2. 14.2.2. Behavior of an Activity That Disables Search
      3. 14.2.3. Invoking Search Through a Menu
      4. 14.2.4. Understanding Local Search and Related Activities
      5. 14.2.5. Enabling Type-to-Search
    3. 14.3. Implementing a Simple Suggestion Provider
      1. 14.3.1. Planning the Simple Suggestions Provider
      2. 14.3.2. Simple Suggestions Provider Implementation Files
      3. 14.3.3. Implementing the SimpleSuggestionProvider class
        1. 14.3.3.1. Responsibilities of a Simple Suggestion Provider
        2. 14.3.3.2. Complete Source Code of SimpleSuggestionProvider
        3. 14.3.3.3. Understanding SearchRecentSuggestionsProvider Database Modes
        4. 14.3.3.4. Declaring the Suggestion Provider in the Manifest File
      4. 14.3.4. Understanding Simple Suggestions Provider Search Activity
        1. 14.3.4.1. Responsibilities of a Simple Search Activity
        2. 14.3.4.2. Complete Source Code of a Search Activity
        3. 14.3.4.3. Checking the Action and Retrieving the Query
        4. 14.3.4.4. Understanding onCreate() and onNewIntent()
        5. 14.3.4.5. How to Test for onNewIntent()
        6. 14.3.4.6. Saving the Query Using SearchRecentSuggestionsProvider
        7. 14.3.4.7. Search Metadata
      5. 14.3.5. Search Invoker Activity
      6. 14.3.6. Simple Suggestion Provider User Experience
    4. 14.4. Implementing a Custom Suggestion Provider
      1. 14.4.1. Planning the Custom Suggestion Provider
      2. 14.4.2. SuggestURLProvider Project Implementation Files
      3. 14.4.3. Implementing the SuggestUrlProvider Class
        1. 14.4.3.1. Responsibilities of a Suggestion Provider
        2. 14.4.3.2. Overall Source Code for SuggestUrlProvider
        3. 14.4.3.3. Understanding Suggestion Provider URIs
        4. 14.4.3.4. Implementing getType() and Specifying MIME Types
        5. 14.4.3.5. Passing Query to the Suggestion Provider: The Selection Argument
        6. 14.4.3.6. Exploring Search Metadata for Custom Suggestion Providers
        7. 14.4.3.7. Suggestion Cursor Columns
        8. 14.4.3.8. Populating and Returning the List of Columns
      4. 14.4.4. Implementing a Search Activity for a Custom Suggestion Provider
        1. 14.4.4.1. Responsibilities of a Search Activity
        2. 14.4.4.2. Source Code of SearchActivity for a Custom Suggestion Provider
        3. 14.4.4.3. Details of SearchActivity Invocation
        4. 14.4.4.4. Responding to ACTION_SEARCH and ACTION_VIEW
        5. 14.4.4.5. Search Activity Layout
        6. 14.4.4.6. Corresponding strings.xml
        7. 14.4.4.7. Responding to onCreate() and onNewIntent()
        8. 14.4.4.8. Notes on Finishing a Search Activity
      5. 14.4.5. Custom Suggestions Provider Manifest File
      6. 14.4.6. Custom Suggestion User Experience
    5. 14.5. Using Action Keys and Application-Specific Search Data
      1. 14.5.1. Using Action Keys in Android Search
      2. 14.5.2. Working with Application-Specific Search Context
    6. 14.6. Resources
    7. 14.7. Summary
  20. 15. Exploring Text to Speech and Translate APIs
    1. 15.1. The Basics of Text to Speech in Android
    2. 15.2. Using Utterances to Keep Track of Our Speech
    3. 15.3. Using Audio Files for Your Voice
    4. 15.4. Advanced Features of the TTS Engine
      1. 15.4.1. Setting Audio Streams
      2. 15.4.2. Using Earcons
      3. 15.4.3. Playing Silence
      4. 15.4.4. Using Language Methods
    5. 15.5. Translating Text to a Different Language
    6. 15.6. Summary
  21. 16. Touchscreens
    1. 16.1. Understanding MotionEvents
      1. 16.1.1. Using VelocityTracker
      2. 16.1.2. Exploring Drag and Drop
    2. 16.2. Multi-Touch
    3. 16.3. Touches with Maps
    4. 16.4. Gestures
    5. 16.5. Summary
  22. 17. Titanium Mobile: A WebKit-Based Approach to Android Development
    1. 17.1. Titanium Mobile Overview
      1. 17.1.1. Architecture
        1. 17.1.1.1. Nature of a Titanium Project
        2. 17.1.1.2. Components of the Titanium Developer IDE
        3. 17.1.1.3. Building and Deploying Projects through Titanium IDE
      2. 17.1.2. The Titanium Ecosystem
      3. 17.1.3. Downloading and Installing Titanium Developer
    2. 17.2. Getting to Know the Ropes: The First Project
      1. 17.2.1. Creating a Titanium Mobile Project
      2. 17.2.2. Crafting "Hello World"
      3. 17.2.3. Provisioning the Application for Debugging
      4. 17.2.4. Packaging the Application
      5. 17.2.5. Installing the .apk File on Your Own Emulator
    3. 17.3. Planning for Real-World Applications
      1. 17.3.1. Essential Primer on JQuery
      2. 17.3.2. Essential Primer on Advanced JavaScript
      3. 17.3.3. Understanding the Microtemplating Engine
      4. 17.3.4. Additional Titanium Mobile APIs
    4. 17.4. Summary
  23. 18. Working with Android Market
    1. 18.1. Becoming a Publisher
      1. 18.1.1. Following the Rules
      2. 18.1.2. Developer Console
    2. 18.2. Preparing Your Application for Sale
      1. 18.2.1. Testing for Different Devices
      2. 18.2.2. Supporting Different Screen Sizes
      3. 18.2.3. Preparing AndroidManifest.xml for Uploading
      4. 18.2.4. Localizing Your Application
      5. 18.2.5. Preparing Your Application Icon
      6. 18.2.6. Considerations for Paid Apps
      7. 18.2.7. Directing Users Back to the Market
      8. 18.2.8. Preparing Your .apk File for Uploading
    3. 18.3. Uploading Your Application
    4. 18.4. User Experience on Android Market
    5. 18.5. Summary
  24. 19. Outlook and Resources
    1. 19.1. Current State of Android
      1. 19.1.1. Android Based Mobile Device Manufacturers
        1. 19.1.1.1. Motorola Droid
        2. 19.1.1.2. T-Mobile G1
        3. 19.1.1.3. Nexus One
      2. 19.1.2. Android Application Stores
    2. 19.2. Outlook For Android
      1. 19.2.1. Quick Summary of Mobile Operating Systems
      2. 19.2.2. Contrasting Android with other Mobile OSs
      3. 19.2.3. Support for HTML 5 and What it Reveals
    3. 19.3. Android Resources
      1. 19.3.1. Core Android Resources
      2. 19.3.2. Android News Related Resources
    4. 19.4. Summary