Sample Chapters: |
If you find the materials useful, please write a review of this book at Amazon.com. |
Table of Contents:
Chapter 1 Introduction 1 1.1 The Value of Knowledge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.2 The Open-Source Movement . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.3 This Book . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Chapter 2 An Introduction to Android 5 2.1 Introduction . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.2 Development Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.2.1 Eclipse IDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.3 Android Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.3.1 Manifest File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.4 Command Line Development . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.4.1 Listing Targets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2.4.2 Creating AVDs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.4.3 Creating Project . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 2.5 Simple Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.5.1 Button and ImageButton . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.5.2 Interest Calculator . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.5.3 Grid View Demo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 2.6 Running On a Real Android Device . . . . . . . . . . . . . . . . . . . . . . . . 35 2.7 Notes on Using Eclipse IDE . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 Chapter 3 Android Components and Simple Examples 39 3.1 GUI Example with Eclipse IDE . . . . . . . . . . . . . . . . . . . . . . . . . . 39 3.1.1 Using a Linear Layout . . . . . . . . . . . . . . . . . . . . . . . . . . .. 41 3.1.2 Responding to Clicking . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 3.1.3 Creating a New Activity . . . . . . . . . . . . . . . . . . . . . . . . . .. 43 3.2 GUI Example using Command Line . . . . . . . . . . . . . . . . . . . . . . . . . 46 3.3 Activity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 3.3.1 Activity and Screen . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 52 3.3.2 A Simple Calculator . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 53 3.4 Fragment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 3.4.1 Why Fragments? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 3.4.2 Fragment Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 3.5 Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 62 3.5.1 Android Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 3.5.2 Local Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 3.5.3 A Simple Local Service Example . . . . . . . . . . . . . . . . . . . . . . . 65 3.5.4 Remote Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .68 Chapter 4 Android Graphics and OpenGL ES 1.X 71 4.1 Graphics Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 4.1.1 Class View and Subclasses . . . . . . . . . . . . . . . . . . . . . . . . . .71 4.1.2 Class SurfaceView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .72 4.1.3 Class GLSurfaceView . . . . . . . . . . . . . . . . . . . . . . . . . . . . .73 4.2 OpenGL ES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .75 4.3 OpenGL ES 1.X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 4.3.1 Creating an Activity with GLSurfaceView . . . . . . . . . . . . . . . . . . .76 4.3.2 Drawing a Triangle on GLSurfaceView . . . . . . . . . . . . . . . . . . . . .78 4.3.3 Setting Camera View and Transformations . . . . . . . . . . . . . . . . . . .80 4.4 Animation and Event Handling . . . . . . . . . . . . . . . . . . . . . . . . . . 81 4.5 Rendering a 3D Color Cube . . . . . . . . . . . . . . . . . . . . . . . . . .. . 83 4.5.1 Color Cube . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 4.5.2 Rendering a Square Only . . . . . . . . . . . . . . . . . . . . . . . . .. . 89 4.5.3 Rendering a Rotating Cube . . . . . . . . . . . . . . . . . . . . . . . .. . 90 4.6 Rendering a 3D Texture Cube . . . . . . . . . . . . . . . . . . . . . . . .. . . 92 4.6.1 Displaying Images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 4.6.2 Rendering Texture Square . . . . . . . . . . . . . . . . . . . . . . . . . . 94 4.6.3 Rendering Texture Cube . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 4.7 Rendering a Rotating Cube . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 Chapter 5 File I/O and JNI 103 5.1 Read Raw Data From File . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 5.2 Read and Write Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 5.2.1 Read Assets and Display Files . . . . . . . . . . . . . . . . . . . . . . . 104 5.2.2 Write to Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 5.2.3 External Storage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 5.3 Android JNI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 5.3.1 Installing Android NDK . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 5.3.2 A Simple Example of JNI . . . . . . . . . .. . . . . . . . . . . . . . . . . 110 5.3.3 A Simple JNI Example with UI . . . . . . . . . . . . . . . . . . . . . . . . 113 Chapter 6 Graphics with OpenGL ES 2.X 117 6.1 Programmable Pipeline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 6.2 OpenGL Shading Language (GLSL) . . . . . . . . . . . . . . . . . . . . . . . . . 118 6.2.1 OpenGL Shaders Execution Model . . . . . . . . . . . . . . . . . . . . . . . 118 6.2.2 OpenGL Shading Language API . . . . . . . . . . . . . . . . . . . . . . . . 120 6.2.3 Data Types in GLSL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 6.3 Android Graphics with ES 2.0 . . . . . . . . . . . . . . . . . . . . . . . . . . 128 6.3.1 Drawing a Triangle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 6.3.2 Shaders in Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 6.3.3 Animation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 6.3.4 Drawing a Square . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 6.3.5 Drawing a Color Square . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 6.3.6 Temperature Shaders . . . . . . . . . . . . . . .. . . . . . . . . . . . . . 144 6.4 Drawing 3D Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 6.4.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 6.4.2 Drawing a Tetrahedron . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 6.4.3 Rotating a Color Tetrahedron . . . . . . . . . . . . . . . . . . . . . . . . 153 6.5 Drawing Spheres . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . 158 6.5.1 Spherical Coordinates . . . . . . . . . . . . . . . . . . . . . . . . . . . 158 6.5.2 Rendering a Wireframe Sphere . . . . . . . . . . . . . . . . . . . . . . . . 159 6.5.3 Rendering a Color Solid Sphere . . . . . . . . . . . . . . . . . . . . . . . 163 6.5.4 Lightling a Sphere . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 Chapter 7 Thread Programming 171 7.1 Processes and Threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 7.2 Java Threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . 172 7.2.1 Thread Creation by Extending Thread Class . . . . . . . . . . . . . . . . . . 172 7.2.2 Thread Creation by Implementing Runnable Interface . . . . . . . . . . . . . 173 7.2.3 Wait for a Thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 7.3 Synchronization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 7.3.1 Mutual Exclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . 177 7.3.2 Semaphore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 7.3.3 Producer-Consumer Problem . . . . . . . . . . . . . . . . . . . . . . . . . . 184 7.3.4 Condition Variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 7.3.5 Readers-Writers Problem . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 7.4 Deadlocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 Chapter 8 Network Communication 199 8.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 8.2 Connecting to a Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 8.3 Communication Between Android Devices . . . . . . . . . . . . . . . . . . . . . . 206 8.4 A Remote Calculator . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . 209 8.4.1 JSON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 8.4.2 Server Running on PC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 8.4.3 Client Running on Android . . . . . . . . . . . . . . . . . . . . . . . . . . 212 8.5 Broadcast Receiver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 8.6 Fetch Data From a Web Site . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 8.6.1 Using a Broadcast Receiver . . . . . . . . . . . . . . . . . . . . . . . . . . 220 8.6.2 Connecting to and Accessing a URL . . . . . .. . . . . . . . . . . . . . . . . 221 8.6.3 UI Handled by MainActivity . . . . . . . . . . . . . . . . . . . . . . . . . . 225 8.7 AIDL (Android Interface Definition Language) . . . . . . . . . . . . . . . . . . . 227 8.7.1 AIDL Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 8.7.2 The .aidl File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 8.7.3 Implement AIDL Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 8.7.4 Expose AIDL Interface to Clients . . . . . . . . . . . . . . . . . . . . . . . 229 8.7.5 A Remote Multiplier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 Chapter 9 Text To Speech (TTS) and Audio 237 9.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 9.2 The TextToSpeech Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 9.3 A Simple TTS Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 9.4 Writing Speech to a File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 9.4.1 Playback Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 9.4.2 Saving Speech . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . 244 9.5 Speak From a File with Pause/Resume . . . . . . . . . . . . . . . . . . . . . . . 245 9.5.1 Synchronization by Condition Variable . .. . . . . . . . . . . . . . . . . . . 245 9.5.2 Speak Using a Different Thread . . . . . . . . . . . . . . . . . . . . . . . . 246 9.6 Playing Audio Clips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 9.6.1 Playing Sound . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . 253 9.6.2 Simple Examples of Using MediaPlayer . . . . . . . . . . . . . . . . . . . . . 253 9.6.3 Asynchronous Playback of MediaPlayer . . . . . . . . . . . . . . . . . . . . . 256 Chapter 10 Speech Recognition 263 10.1 Introduction . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . 263 10.2 A Simple Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265 Chapter 11 Playing Video 269 11.1 Introduction . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . 269 11.2 A Simple Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269 Chapter 12 OpenCV For Android 273 12.1 Introduction . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . 273 12.2 OpenCV4Android SDK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 12.2.1 Getting the SDK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 12.2.2 Import OpenCV Library and Samples . . . . . . . . . . . . . . . . . . . . . . 274 12.2.3 Run OpenCV Samples . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . 275