• Getting Started
    • Building Your First App
      • Creating an Android Project
      • Running Your Application
      • Building a Simple User Interface
      • Starting Another Activity
    • Managing the Activity Lifecycle
      • Starting an Activity
      • Pausing and Resuming an Activity
      • Stopping and Restarting an Activity
      • Recreating an Activity
    • Supporting Different Devices
      • Supporting Different Languages
      • Supporting Different Screens
      • Supporting Different Platform Versions
    • Building a Dynamic UI with Fragments
      • Using the Support Library
      • Creating a Fragment
      • Building a Flexible UI
      • Communicating with Other Fragments
    • Saving Data
      • Saving Key-Value Sets
      • Saving Files
      • Saving Data in SQL Databases
    • Interacting with Other Apps
      • Sending the User to Another App
      • Getting a Result from the Activity
      • Allowing Other Apps to Start Your Activity
    • Sharing Content
      • Sending Content to Other Apps
      • Receiving Content from Other Apps
      • Adding an Easy Share Action
  • Building Apps with
    Multimedia
    • Managing Audio Playback
      • Controlling Your App's Volume and Playback
      • Managing Audio Focus
      • Dealing with Audio Output Hardware
    • Capturing Photos
      • Taking Photos Simply
      • Recording Videos Simply
      • Controlling the Camera
  • Building Apps with
    Graphics & Animation
    • Displaying Bitmaps Efficiently
      • Loading Large Bitmaps Efficiently
      • Processing Bitmaps Off the UI Thread
      • Caching Bitmaps
      • Managing Bitmap Memory
      • Displaying Bitmaps in Your UI
    • Displaying Graphics with OpenGL ES
      • Building an OpenGL ES Environment
      • Defining Shapes
      • Drawing Shapes
      • Applying Projection and Camera Views
      • Adding Motion
      • Responding to Touch Events
    • Adding Animations
      • Crossfading Two Views
      • Using ViewPager for Screen Slide
      • Displaying Card Flip Animations
      • Zooming a View
      • Animating Layout Changes
  • Building Apps with
    Connectivity & the Cloud
    • Connecting Devices Wirelessly
      • Using Network Service Discovery
      • Connecting with Wi-Fi Direct
      • Using Wi-Fi Direct for Service Discovery
    • Performing Network Operations
      • Connecting to the Network
      • Managing Network Usage
      • Parsing XML Data
    • Transferring Data Without Draining the Battery
      • Optimizing Downloads for Efficient Network Access
      • Minimizing the Effect of Regular Updates
      • Redundant Downloads are Redundant
      • Modifying Patterns Based on the Connectivity Type
    • Syncing to the Cloud
      • Using the Backup API
      • Making the Most of Google Cloud Messaging
  • Building Apps with
    User Info & Location
    • Accessing Contacts Data
      • Retrieving a List of Contacts
      • Retrieving Details for a Contact
      • Modifying Contacts Using Intents
      • Displaying the Quick Contact Badge
    • Remembering Users
      • Remembering Your User
      • Authenticating to OAuth2 Services
      • Creating a Custom Account Type
    • Making Your App Location Aware
      • Using the Location Manager
      • Obtaining the Current Location
      • Displaying a Location Address
  • Best Practices for
    User Experience & UI
    • Designing Effective Navigation
      • Planning Screens and Their Relationships
      • Planning for Multiple Touchscreen Sizes
      • Providing Descendant and Lateral Navigation
      • Providing Ancestral and Temporal Navigation
      • Putting it All Together: Wireframing the Example App
    • Implementing Effective Navigation
      • Implementing Lateral Navigation
      • Implementing Ancestral Navigation
      • Implementing Temporal Navigation
      • Implementing Descendant Navigation
    • Notifying the User
      • Building a Notification
      • Preserving Navigation when Starting an Activity
      • Updating Notifications
      • Using Big View Styles
      • Displaying Progress in a Notification
    • Adding Search Functionality
      • Setting up the Search Interface
      • Storing and Searching for Data
      • Remaining Backward Compatible
    • Designing for Multiple Screens
      • Supporting Different Screen Sizes
      • Supporting Different Screen Densities
      • Implementing Adaptive UI Flows
    • Designing for TV
      • Optimizing Layouts for TV
      • Optimizing Navigation for TV
      • Handling Features Not Supported on TV
    • Creating Custom Views
      • Creating a Custom View Class
      • Implementing Custom Drawing
      • Making the View Interactive
      • Optimizing the View
    • Creating Backward-Compatible UIs
      • Abstracting the New APIs
      • Proxying to the New APIs
      • Creating an Implementation with Older APIs
      • Using the Version-Aware Component
    • Implementing Accessibility
      • Developing Accessible Applications
      • Developing Accessibility Services
  • Best Practices for
    User Input
    • Using Touch Gestures
      • Detecting Common Gestures
      • Tracking Movement
      • Animating a Scroll Gesture
      • Handling Multi-Touch Gestures
      • Dragging and Scaling
      • Managing Touch Events in a ViewGroup
    • Handling Keyboard Input
      • Specifying the Input Method Type
      • Handling Input Method Visibility
      • Supporting Keyboard Navigation
      • Handling Keyboard Actions
  • Best Practices for
    Performance
    • Performance Tips
    • Improving Layout Performance
      • Optimizing Layout Hierarchies
      • Re-using Layouts with <include/>
      • Loading Views On Demand
      • Making ListView Scrolling Smooth
    • Running in a Background Service
      • Creating a Background Service
      • Sending Work Requests to the Background Service
      • Reporting Work Status
    • Loading Data in the Background
      • Running a Query with a CursorLoader
      • Handling the Results
    • Optimizing Battery Life
      • Monitoring the Battery Level and Charging State
      • Determining and Monitoring the Docking State and Type
      • Determining and Monitoring the Connectivity Status
      • Manipulating Broadcast Receivers On Demand
    • Sending Operations to Multiple Threads
      • Specifying the Code to Run on a Thread
      • Creating a Manager for Multiple Threads
      • Running Code on a Thread Pool Thread
      • Communicating with the UI Thread
    • Keeping Your App Responsive
    • JNI Tips
    • SMP Primer for Android
  • Best Practices for
    Security & Privacy
    • Security Tips
    • Security with HTTPS and SSL
    • Developing for Enterprise
      • Enhancing Security with Device Management Policies
  • Using Google Play to
    Distribute & Monetize
    • Selling In-app Products
      • Preparing Your App
      • Establishing Products for Sale
      • Purchasing Products
      • Testing Your App
    • Maintaining Multiple APKs
      • Creating Multiple APKs for Different API Levels
      • Creating Multiple APKs for Different Screen Sizes
      • Creating Multiple APKs for Different GL Textures
      • Creating Multiple APKs with 2+ Dimensions
    • Monetizing Your App
      • Advertising without Compromising User Experience