Google Android Syllabus Introducing the Android Computing Platform A New Platform for a New Personal Computer Early History of Android Delving Into the Dalvik VM Understanding the Android Software Stack Developing an End-User Application with the Android SDK Android Emulator The Android UI The Android Foundational Components Advanced UI Concepts Android Service Components Setting Up Your Development Environment Setting Up Your Environment Downloading JDK 6 Downloading Eclipse 3.6 Downloading the Android SDK The Tools Window Installing Android Development Tools (ADT) Learning the Fundamental Components View Activity Intent Content Provider Service AndroidManifest.xml Android Virtual Devices Hello World! Exploring the Structure of an Android Application Examining the Application Lifecycle Understanding Android Resources Understanding Resources String Resources Layout Resources Resource Reference Syntax Defining Your Own Resource IDs for Later Use
Compiled and Uncompiled Android Resources Working with Arbitrary XML Resource Files Working with Raw Resources Working with Assets Reviewing the Resources Directory Structure Understanding Content Providers Exploring Android s Built-in Providers Architecture of Content Providers Implementing Content Providers Exercising the Book Provider Adding A Book Removing a Book Getting a Count of the Books Displaying the List of Books Understanding Intents Basics of Android Intents & Available Intents in Android Exploring Intent Composition Intents and Data URIs Generic Actions & Using Extra Information Understanding Intent Categories Rules for Resolving Intents to Their Components Exercising the ACTION_PICK Exercising the GET_CONTENT Action Introducing Pending Intents Building User Interfaces and Using Controls Building a UI Completely in Code Building a UI Completely in XML Building a UI in XML With Code Understanding Android s Common Controls Text Controls Button Controls The ImageView Control Date and Time Controls The MapView Control Understanding Adapters Getting to Know SimpleCursorAdapter Getting to Know ArrayAdapter Using Adapters With AdapterViews The Basic List Control: ListView The GridView Control The Spinner Control The Gallery Control Creating Custom Adapters Styles and Themes
Using Styles Using Themes Understanding Layout Managers The LinearLayout Layout Manager The TableLayout Layout Manager The RelativeLayout Layout Manager The FrameLayout Layout Manager Working with Menus Understanding Android Menus Creating a Menu Working with Menu Groups Responding to Menu Items Creating a Test Harness for Testing Menus Working with Other Menu Types Expanded Menus Working with Icon Menus Working with Submenus Provisioning for System Menus Working with Context Menus Working with Alternative Menus Working with Menus in Response to Changing Data Loading Menus Through XML Files Structure of an XML Menu Resource File Inflating XML Menu Resource Files Responding to XML-Based Menu Items Working with Dialogs Using Dialogs in Android Designing an Alert Dialog Designing a Prompt Dialog Nature of Dialogs in Android Rearchitecting the Prompt Dialog Working with Managed Dialogs Understanding the Managed-Dialog Protocol Recasting the Nonmanaged Dialog as a Managed Dialog Simplifying the Managed-Dialog Protocol Working with Toast Resources Working with Preferences and Saving State Exploring the Preferences Framework Understanding ListPreference Understanding CheckBoxPreference Understanding EditTextPreference Understanding RingtonePreference Organizing Preferences Manipulating Preferences Programmatically Saving State with Preferences
Exploring Security and Permissions Understanding the Android Security Model Overview of Security Concepts Signing Applications for Deployment Performing Runtime Security Checks Understanding Security at the Process Boundary Declaring and Using Permissions Understanding and Using Custom Permissions Understanding and Using URI Permissions Building and Consuming Services Consuming HTTP Services Using the HttpClient for HTTP GET Requests Using the HttpClient for HTTP POST Requests (a Multipart Example) SOAP, JSON, and XML Parsers Dealing with Exceptions Addressing Multithreading Issues Fun With Timeouts Using the HttpURLConnection Using the AndroidHttpClient Using Background Threads (AsyncTask) Handling Configuration Changes with AsyncTasks Getting Files Using DownloadManager Using Android Services Understanding Services in Android Understanding Local Services Understanding AIDL Services Defining a Service Interface in AIDL Implementing an AIDL Interface Calling the Service from a Client Application Passing Complex Types to Services Real-World Example Using Services Google Translate API Using the Google Translate API Exploring Packages Packages and Processes Details of a Package Specification Translating Package Name to a Process Name Listing Installed Packages Deleting a Package through the Package Browser Revisiting the Package Signing Process Understanding Digital Signatures: Scenario 1 Understanding Digital Signatures: Scenario 2 A Pattern for Understanding Digital Signatures So How Do You Digitally Sign? Implications of the Signing Process Sharing Data Among Packages The Nature of Shared User IDs
A Code Pattern for Sharing Data Library Projects What Is a Library Project? Library Project Predicates Creating a Library Project Creating an Android Project That Uses a library Exploring Handlers Android Components and Threading Activities Run on the Main Thread Broadcast Receivers run on the Main Thread Services Run on the Main Thread Content Provider Runs on the Main Thread Implications of a Singular Main Thread Thread Pools, Content Providers, External Service Components Thread Utilities: Discover Your Threads Handlers Implications of Holding the Main Thread Using a Handler to Defer Work on the Main Thread A Sample Handler Source Code That Defers Work Constructing a Suitable Message Object Sending Message Objects to the Queue Responding to the handlemessage Callback Using Worker Threads Invoking a Worker Thread from a Menu Communicating Between the Worker and the Main Threads A Quick Overview of Thread Behavior Handler Example Driver classes Driver Activity File Layout File Menu File Manifest File Component and Process Lifetimes Activity Life Cycle Service Life Cycle Receiver Life Cycle Provider Life Cycle Instructions for Compiling the Code Creating the Project from the ZIP File Creating the Project from the Listings Broadcast Receivers and Long-Running Services Broadcast Receivers Sending a Broadcast Coding a Simple Receiver: Sample Code Registering a Receiver in the Manifest File Sending a Test Broadcast Accommodating Multiple Receivers A Project for Out-of-Process Receivers
Using Notifications from a Receiver Monitoring Notifications Through the Notification Manager Sending a Notification Long-Running Receivers and Services Long-Running Broadcast Receiver Protocol IntentService IntentService Source Code Extending IntentService for a Broadcast Receiver Long-Running Broadcast Service Abstraction A Long-Running Receiver Abstracting a Wake Lock with LightedGreenRoom Long-Running Service Implementation Details of a Nonsticky Service Details of a Sticky Service A Variation of Nonsticky: Redeliver Intents Specifying Service Flags in OnStartCommand Picking Suitable Stickiness Controlling the Wake Lock from Two Places Long-Running Service Implementation Testing Long Running Services Instructions for Compiling the Code Creating the Projects from the ZIP File Creating the Project from the Listings Exploring the Alarm Manager Alarm Manager Basics: Setting Up a Simple Alarm Obtaining the Alarm Manager Setting Up the Time for the Alarm Setting Up a Receiver for the Alarm Creating a PendingIntent Suitable for an Alarm Setting the Alarm Test Project Exploring Alarm Manager Alternate Scenarios Setting Off an Alarm Repeatedly Cancelling an Alarm Working with Multiple Alarms Intent Primacy in Setting Off Alarms Persistence of Alarms Alarm Manager Predicates Exploring 2D Animation Frame-by-Frame Animation Planning for Frame-by-Frame Animation Creating the Activity Adding Animation to the Activity Layout Animation Basic Tweening Animation Types Planning the Layout Animation Test Harness Creating the Activity and the ListView
Animating the ListView Using Interpolators View Animation Understanding View Animation Adding Animation Using Camera to Provide Depth Perception in 2D Exploring the AnimationListener Class Some Notes on Transformation Matrices Exploring Maps and Location-based Services Understanding the Mapping Package Obtaining a Map-API Key from Google Understanding MapView and MapActivity Adding Markers Using Overlays Understanding the Location Package Geocoding with Android Geocoding with Background Threads Understanding the LocationManager Service Using Proximity Alerts Using the Telephony APIs Working with SMS Showing Your Location Using MyLocationOverlay Sending SMS Messages Monitoring Incoming SMS Messages Working with SMS Folders Sending E-mail Working with the Telephony Manager Session Initiation Protocol (SIP) Understanding the Media Frameworks Using the Media APIs Using SD Cards Playing Media Playing Audio Content Playing Video Content Recording Media Exploring Audio Recording with MediaRecorder Recording Audio with AudioRecord Exploring Video Recording Exploring the MediaStore Class Recording Audio Using an Intent Adding Media Content to the Media Store Triggering MediaScanner for the Entire SD Card Programming 3D Graphics with OpenGL Understanding the History and Background of OpenGL OpenGL ES OpenGL ES and Java ME M3G: Another Java ME 3D Graphics Standard Fundamentals of OpenGL
Essential Drawing with OpenGL ES Understanding OpenGL Camera and Coordinates Interfacing OpenGL ES with Android Using GLSurfaceView and Related Classes Implementing the Renderer Using GLSurfaceView from an Activity Changing Camera Settings Using Indices to Add Another Triangle Animating the Simple OpenGL Triangle Braving OpenGL: Shapes and Textures Drawing a Rectangle Working with Shapes Working with Textures Drawing Multiple Figures OpenGL ES 2.0 Java Bindings for OpenGL ES 2.0 Rendering Steps Understanding Shaders Compiling Shaders into a Program Getting Access to the Shader Program Variables A Simple ES 2.0 Triangle Further Reading on OpenGL ES 2.0 Instructions for Compiling the Code Exploring Live Folders Exploring Live Folders How a User Experiences Live Folders Building a Live Folder Instructions for Compiling the Code Home Screen Widgets Architecture of Home Screen Widgets Android Search What Are Home Screen Widgets? User Experience with Home Screen Widgets Life Cycle of a Widget A Sample Widget Application Defining the Widget Provider Defining Widget Size Widget Layout-Related Files Implementing a Widget Provider Implementing Widget Models Implementing Widget Configuration Activity Widget Limitations and Extensions Android Search Experience Exploring Android Global Search Enabling Suggestion Providers for Global Search Activities and Search Key Interaction Behavior of Search Key on a Regular Activity
Behavior of an Activity that Disables Search Explicitly Invoking Search Through a Menu Understanding Local Search and Related Activities Enabling Type-to-Search Implementing a Simple Suggestion Provider Planning the Simple Suggestions Provider Simple Suggestions Provider Implementation Files Implementing the SimpleSuggestionProvider class Understanding Simple Suggestions Provider Search Activity Search Invoker Activity Simple Suggestion Provider User Experience Implementing a Custom Suggestion Provider Planning the Custom Suggestion Provider SuggestURLProvider Project Implementation Files Implementing the SuggestUrlProvider Class Implementing a Search Activity for a Custom Suggestion Provider Custom Suggestions Provider Manifest File Custom Suggestion User Experience Using Action Keys and Application-Specific Search Data Using Action Keys in Android Search Working with Application-Specific Search Context Resources Implications for Tablets Exploring Text to Speech The Basics of Text-to-Speech Capabilities in Android Touch Screens Using Utterances to Keep Track of Our Speech Using Audio Files for Your Voice Advanced Features of the TTS Engine Setting Audio Streams Using Earcons Playing Silence Choosing a Different Text-to-Speech Engine Using Language Methods Understanding MotionEvents The MotionEvent Object Recycling MotionEvents Using VelocityTracker Exploring Drag and Drop Multitouch Multitouch Before Android 2.2 Multitouch Since Android 2.2 Touches with Maps Gestures The Pinch Gesture GestureDetector and OnGestureListeners
Using Sensors Custom Gestures The Gestures Builder Application What Is a Sensor? Detecting Sensors What Can We Know About a Sensor? Getting Sensor Events Issues with Getting Sensor Data Interpreting Sensor Data Light Sensors Proximity Sensors Temperature Sensors Pressure Sensors Gyroscope Sensors Accelerometers Magnetic Field Sensors Using Accelerometers and Magnetic Field Sensors Together Orientation Sensors Magnetic Declination and GeomagneticField Gravity Sensors Linear Acceleration Sensors Rotation Vector Sensors Near Field Communication Sensors Exploring the Contacts API Understanding Accounts A Quick Tour of Account Screens Relevance of Accounts to Contacts Enumerating Accounts Understanding Contacts Application Show Contacts Show Contact Detail Edit Contact Details Setting a Contact s Photo Exporting Contacts Various Contact Data Types Understanding Contacts Examining the Contents SQLite Database Raw Contacts Data Table Aggregated Contacts view_contacts contact_entities_view Working with the Contacts API Exploring Accounts Exploring Aggregated Contacts Exploring Raw Contacts
Exploring Raw Contact Data Adding a Contact and Its Details Controlling Aggregation Impacts of Syncing Deploying Your Application: Android Market and Beyond Becoming a Publisher Following the Rules Developer Console Preparing Your Application for Sale Testing for Different Devices Supporting Different Screen Sizes Preparing AndroidManifest.xml for Uploading Localizing Your Application Preparing Your Application Icon Considerations for Making Money From Apps Directing Users Back to the Market The Android Licensing Service Preparing Your.apk File for Uploading Uploading Your Application User Experience on Android Market Beyond Android Market Fragments for Tablets and More What is a Fragment? When to Use Fragments The Structure of a Fragment A Fragment s Lifecycle Sample Fragment App Showing the Lifecycle FragmentTransactions and the Fragment Back Stack Fragment Transaction Transitions and Animations The FragmentManager Caution When Referencing Fragments ListFragments and <fragment> Invoking a Separate Activity When Needed Persistence of Fragments Understanding Dialog Fragments DialogFragment Basics DialogFragment Sample Application More Communications with Fragments Using startactivity() and settargetfragment() Custom Animations with ObjectAnimator Exploring ActionBar Anatomy of an ActionBar Tabbed Navigation Action Bar Activity Implementing Base Activity Classes Assigning Uniform Behavior for the ActionBar Implementing the Tabbed Listener Implementing the Tabbed Action Bar Activity
Scrollable Debug Text View Layout Action Bar and Menu Interaction Android Manifest File Examining the Tabbed Action Bar Activity List Navigation Action Bar Activity Creating a SpinnerAdapter Creating a List Listener Setting Up a List Action Bar Making Changes to BaseActionBarActivity Making Changes to AndroidManifest.xml Examining the List Action Bar Activity Standard Navigation Action Bar Activity Standard Navigation Action Bar Activity Making Changes to BaseActionBarActivity