1. Introduction....40
1.1 Downloading the Code Samples....41
1.2 Feedback....41
1.3 Errata....41
2. Setting up an Android Studio Development Environment....42
2.1 System requirements....42
2.2 Downloading the Android Studio package....42
2.3 Installing Android Studio....43
2.3.1 Installation on Windows....43
2.3.2 Installation on macOS....44
2.3.3 Installation on Linux....45
2.4 The Android Studio setup wizard....45
2.5 Installing additional Android SDK packages....47
2.6 Installing the Android SDK Command-line Tools....50
2.6.1 Windows 8.1....52
2.6.2 Windows 10....53
2.6.3 Windows 11....53
2.6.4 Linux....53
2.6.5 macOS....54
2.7 Android Studio memory management....54
2.8 Updating Android Studio and the SDK....56
2.9 Summary....56
3. Creating an Example Android App in Android Studio....57
3.1 About the Project....57
3.2 Creating a New Android Project....57
3.3 Creating an Activity....58
3.4 Defining the Project and SDK Settings....59
3.5 Enabling the New Android Studio UI....60
3.6 Modifying the Example Application....61
3.7 Modifying the User Interface....62
3.8 Reviewing the Layout and Resource Files....70
3.9 Adding Interaction....74
3.10 Summary....76
4. Creating an Android Virtual Device (AVD) in Android Studio....77
4.1 About Android Virtual Devices....77
4.2 Starting the Emulator....80
4.3 Running the Application in the AVD....81
4.4 Running on Multiple Devices....83
4.5 Stopping a Running Application....83
4.6 Supporting Dark Theme....84
4.7 Running the Emulator in a Separate Window....85
4.8 Enabling the Device Frame....88
4.9 Summary....89
5. Using and Configuring the Android Studio AVD Emulator....90
5.1 The Emulator Environment....90
5.2 Emulator Toolbar Options....91
5.3 Working in Zoom Mode....92
5.4 Resizing the Emulator Window....93
5.5 Extended Control Options....93
5.5.1 Location....93
5.5.2 Displays....94
5.5.3 Cellular....94
5.5.4 Battery....94
5.5.5 Camera....94
5.5.6 Phone....94
5.5.7 Directional Pad....95
5.5.8 Microphone....95
5.5.9 Fingerprint....95
5.5.10 Virtual Sensors....95
5.5.11 Snapshots....95
5.5.12 Record and Playback....96
5.5.13 Google Play....96
5.5.14 Settings....96
5.5.15 Help....96
5.6 Working with Snapshots....96
5.7 Configuring Fingerprint Emulation....98
5.8 The Emulator in Tool Window Mode....99
5.9 Creating a Resizable Emulator....100
5.10 Summary....101
6. A Tour of the Android Studio User Interface....102
6.1 The Welcome Screen....102
6.2 The Menu Bar....103
6.3 The Main Window....104
6.4 The Tool Windows....107
6.5 The Tool Window Menus....110
6.6 Android Studio Keyboard Shortcuts....111
6.7 Switcher and Recent Files Navigation....112
6.8 Changing the Android Studio Theme....113
6.9 Summary....114
7. Testing Android Studio Apps on a Physical Android Device....116
7.1 An Overview of the Android Debug Bridge (ADB)....116
7.2 Enabling USB Debugging ADB on Android Devices....117
7.2.1 macOS ADB Configuration....118
7.2.2 Windows ADB Configuration....119
7.2.3 Linux adb Configuration....120
7.3 Resolving USB Connection Issues....121
7.4 Enabling Wireless Debugging on Android Devices....121
7.5 Testing the adb Connection....124
7.6 Device Mirroring....124
7.7 Summary....124
8. The Basics of the Android Studio Code Editor....126
8.1 The Android Studio Editor....126
8.2 Splitting the Editor Window....130
8.3 Code Completion....131
8.4 Statement Completion....133
8.5 Parameter Information....133
8.6 Parameter Name Hints....134
8.7 Code Generation....134
8.8 Code Folding....136
8.9 Quick Documentation Lookup....137
8.10 Code Reformatting....138
8.11 Finding Sample Code....139
8.12 Live Templates....139
8.13 Summary....140
9. An Overview of the Android Architecture....141
9.1 The Android Software Stack....141
9.2 The Linux Kernel....142
9.3 Android Runtime – ART....143
9.4 Android Libraries....143
9.4.1 C/C++ Libraries....145
9.5 Application Framework....145
9.6 Applications....146
9.7 Summary....146
10. The Anatomy of an Android App....148
10.1 Android Activities....148
10.2 Android Fragments....149
10.3 Android Intents....150
10.4 Broadcast Intents....150
10.5 Broadcast Receivers....150
10.6 Android Services....151
10.7 Content Providers....151
10.8 The Application Manifest....152
10.9 Application Resources....152
10.10 Application Context....152
10.11 Summary....153
11. An Overview of Android View Binding....154
11.1 Find View by Id....154
11.2 View Binding....155
11.3 Converting the AndroidSample project....155
11.4 Enabling View Binding....155
11.5 Using View Binding....156
11.6 Choosing an Option....158
11.7 View Binding in the Book Examples....158
11.8 Migrating a Project to View Binding....158
11.9 Summary....160
12. Understanding Android Application and Activity Lifecycles....161
12.1 Android Applications and Resource Management....161
12.2 Android Process States....162
12.2.1 Foreground Process....162
12.2.2 Visible Process....163
12.2.3 Service Process....163
12.2.4 Background Process....163
12.2.5 Empty Process....163
12.3 Inter-Process Dependencies....164
12.4 The Activity Lifecycle....164
12.5 The Activity Stack....164
12.6 Activity States....165
12.7 Configuration Changes....166
12.8 Handling State Change....167
12.9 Summary....167
13. Handling Android Activity State Changes....169
13.1 New vs. Old Lifecycle Techniques....169
13.2 The Activity and Fragment Classes....170
13.3 Dynamic State vs. Persistent State....172
13.4 The Android Lifecycle Methods....173
13.5 Lifetimes....176
13.6 Foldable Devices and Multi-Resume....177
13.7 Disabling Configuration Change Restarts....178
13.8 Lifecycle Method Limitations....178
13.9 Summary....179
14. Android Activity State Changes by Example....181
14.1 Creating the State Change Example Project....181
14.2 Designing the User Interface....182
14.3 Overriding the Activity Lifecycle Methods....184
14.4 Filtering the Logcat Panel....187
14.5 Running the Application....189
14.6 Experimenting with the Activity....190
14.7 Summary....192
15. Saving and Restoring the State of an Android Activity....193
15.1 Saving Dynamic State....193
15.2 Default Saving of User Interface State....193
15.3 The Bundle Class....195
15.4 Saving the State....196
15.5 Restoring the State....198
15.6 Testing the Application....199
15.7 Summary....199
16. Understanding Android Views, View Groups and Layouts....201
16.1 Designing for Different Android Devices....201
16.2 Views and View Groups....202
16.3 Android Layout Managers....202
16.4 The View Hierarchy....204
16.5 Creating User Interfaces....206
16.6 Summary....206
17. A Guide to the Android Studio Layout Editor Tool....208
17.1 Basic vs. Empty Views Activity Templates....208
17.2 The Android Studio Layout Editor....214
17.3 Design Mode....214
17.4 The Palette....216
17.5 Design Mode and Layout Views....216
17.6 Night Mode....218
17.7 Code Mode....218
17.8 Split Mode....219
17.9 Setting Attributes....220
17.10 Transforms....222
17.11 Tools Visibility Toggles....222
17.12 Converting Views....225
17.13 Displaying Sample Data....226
17.14 Creating a Custom Device Definition....227
17.15 Changing the Current Device....228
17.16 Layout Validation....228
17.17 Summary....229
18. A Guide to the Android ConstraintLayout....231
18.1 How ConstraintLayout Works....231
18.1.1 Constraints....232
18.1.2 Margins....232
18.1.3 Opposing Constraints....233
18.1.4 Constraint Bias....234
18.1.5 Chains....235
18.1.6 Chain Styles....235
18.2 Baseline Alignment....236
18.3 Configuring Widget Dimensions....237
18.4 Guideline Helper....237
18.5 Group Helper....238
18.6 Barrier Helper....238
18.7 Flow Helper....240
18.8 Ratios....242
18.9 ConstraintLayout Advantages....242
18.10 ConstraintLayout Availability....243
18.11 Summary....243
19. A Guide to Using ConstraintLayout in Android Studio....244
19.1 Design and Layout Views....244
19.2 Autoconnect Mode....246
19.3 Inference Mode....246
19.4 Manipulating Constraints Manually....247
19.5 Adding Constraints in the Inspector....249
19.6 Viewing Constraints in the Attributes Window....250
19.7 Deleting Constraints....251
19.8 Adjusting Constraint Bias....252
19.9 Understanding ConstraintLayout Margins....252
19.10 The Importance of Opposing Constraints and Bias....254
19.11 Configuring Widget Dimensions....257
19.12 Design Time Tools Positioning....258
19.13 Adding Guidelines....259
19.14 Adding Barriers....261
19.15 Adding a Group....262
19.16 Working with the Flow Helper....264
19.17 Widget Group Alignment and Distribution....264
19.18 Converting other Layouts to ConstraintLayout....266
19.19 Summary....267
20. Working with ConstraintLayout Chains and Ratios in Android Studio....268
20.1 Creating a Chain....268
20.2 Changing the Chain Style....271
20.3 Spread Inside Chain Style....271
20.4 Packed Chain Style....272
20.5 Packed Chain Style with Bias....272
20.6 Weighted Chain....272
20.7 Working with Ratios....274
20.8 Summary....276
21. An Android Studio Layout Editor ConstraintLayout Tutorial....277
21.1 An Android Studio Layout Editor Tool Example....277
21.2 Preparing the Layout Editor Environment....277
21.3 Adding the Widgets to the User Interface....279
21.4 Adding the Constraints....282
21.5 Testing the Layout....285
21.6 Using the Layout Inspector....285
21.7 Summary....287
22. Manual XML Layout Design in Android Studio....288
22.1 Manually Creating an XML Layout....288
22.2 Manual XML vs. Visual Layout Design....292
22.3 Summary....293
23. Managing Constraints using Constraint Sets....294
23.1 Java Code vs. XML Layout Files....294
23.2 Creating Views....295
23.3 View Attributes....296
23.4 Constraint Sets....296
23.4.1 Establishing Connections....297
23.4.2 Applying Constraints to a Layout....297
23.4.3 Parent Constraint Connections....297
23.4.4 Sizing Constraints....297
23.4.5 Constraint Bias....297
23.4.6 Alignment Constraints....298
23.4.7 Copying and Applying Constraint Sets....298
23.4.8 ConstraintLayout Chains....299
23.4.9 Guidelines....300
23.4.10 Removing Constraints....300
23.4.11 Scaling....300
23.4.12 Rotation....301
23.5 Summary....301
24. An Android ConstraintSet Tutorial....303
24.1 Creating the Example Project in Android Studio....303
24.2 Adding Views to an Activity....303
24.3 Setting View Attributes....305
24.4 Creating View IDs....306
24.5 Configuring the Constraint Set....307
24.6 Adding the EditText View....309
24.7 Converting Density Independent Pixels (dp) to Pixels (px)....311
24.8 Summary....312
25. A Guide to Using Apply Changes in Android Studio....313
25.1 Introducing Apply Changes....313
25.2 Understanding Apply Changes Options....314
25.3 Using Apply Changes....314
25.4 Configuring Apply Changes Fallback Settings....316
25.5 An Apply Changes Tutorial....316
25.6 Using Apply Code Changes....316
25.7 Using Apply Changes and Restart Activity....318
25.8 Using Run App....318
25.9 Summary....318
26. An Overview and Example of Android Event Handling....320
26.1 Understanding Android Events....320
26.2 Using the android:onClick Resource....321
26.3 Event Listeners and Callback Methods....322
26.4 An Event Handling Example....323
26.5 Designing the User Interface....323
26.6 The Event Listener and Callback Method....324
26.7 Consuming Events....327
26.8 Summary....329
27. Android Touch and Multi-touch Event Handling....330
27.1 Intercepting Touch Events....330
27.2 The MotionEvent Object....331
27.3 Understanding Touch Actions....331
27.4 Handling Multiple Touches....332
27.5 An Example Multi-Touch Application....333
27.6 Designing the Activity User Interface....333
27.7 Implementing the Touch Event Listener....334
27.8 Running the Example Application....339
27.9 Summary....339
28. Detecting Common Gestures Using the Android Gesture Detector Class....341
28.1 Implementing Common Gesture Detection....341
28.2 Creating an Example Gesture Detection Project....343
28.3 Implementing the Listener Class....343
28.4 Creating the GestureDetectorCompat Instance....346
28.5 Implementing the onTouchEvent() Method....347
28.6 Testing the Application....348
28.7 Summary....349
29. Implementing Custom Gesture and Pinch Recognition on Android....350
29.1 The Android Gesture Builder Application....350
29.2 The GestureOverlayView Class....350
29.3 Detecting Gestures....351
29.4 Identifying Specific Gestures....351
29.5 Installing and Running the Gesture Builder Application....351
29.6 Creating a Gestures File....352
29.7 Creating the Example Project....352
29.8 Extracting the Gestures File from the SD Card....353
29.9 Adding the Gestures File to the Project....354
29.10 Designing the User Interface....354
29.11 Loading the Gestures File....355
29.12 Registering the Event Listener....356
29.13 Implementing the onGesturePerformed Method....357
29.14 Testing the Application....358
29.15 Configuring the GestureOverlayView....359
29.16 Intercepting Gestures....359
29.17 Detecting Pinch Gestures....360
29.18 A Pinch Gesture Example Project....360
29.19 Summary....364
30. An Introduction to Android Fragments....365
30.1 What is a Fragment?....365
30.2 Creating a Fragment....365
30.3 Adding a Fragment to an Activity using the Layout XML File....367
30.4 Adding and Managing Fragments in Code....369
30.5 Handling Fragment Events....371
30.6 Implementing Fragment Communication....372
30.7 Summary....374
31. Using Fragments in Android Studio - An Example....376
31.1 About the Example Fragment Application....376
31.2 Creating the Example Project....377
31.3 Creating the First Fragment Layout....377
31.4 Migrating a Fragment to View Binding....379
31.5 Adding the Second Fragment....380
31.6 Adding the Fragments to the Activity....382
31.7 Making the Toolbar Fragment Talk to the Activity....384
31.8 Making the Activity Talk to the Text Fragment....388
31.9 Testing the Application....389
31.10 Summary....390
32. Modern Android App Architecture with Jetpack....391
32.1 What is Android Jetpack?....391
32.2 The “Old” Architecture....392
32.3 Modern Android Architecture....392
32.4 The ViewModel Component....392
32.5 The LiveData Component....393
32.6 ViewModel Saved State....395
32.7 LiveData and Data Binding....395
32.8 Android Lifecycles....396
32.9 Repository Modules....397
32.10 Summary....398
33. An Android ViewModel Tutorial....400
33.1 About the Project....400
33.2 Creating the ViewModel Example Project....400
33.3 Removing Unwanted Project Elements....401
33.4 Designing the Fragment Layout....402
33.5 Implementing the View Model....404
33.6 Associating the Fragment with the View Model....405
33.7 Modifying the Fragment....406
33.8 Accessing the ViewModel Data....407
33.9 Testing the Project....408
33.10 Summary....409
34. An Android Jetpack LiveData Tutorial....410
34.1 LiveData - A Recap....410
34.2 Adding LiveData to the ViewModel....410
34.3 Implementing the Observer....413
34.4 Summary....416
35. An Overview of Android Jetpack Data Binding....417
35.1 An Overview of Data Binding....417
35.2 The Key Components of Data Binding....418
35.2.1 The Project Build Configuration....418
35.2.2 The Data Binding Layout File....419
35.2.3 The Layout File Data Element....420
35.2.4 The Binding Classes....421
35.2.5 Data Binding Variable Configuration....422
35.2.6 Binding Expressions (One-Way)....423
35.2.7 Binding Expressions (Two-Way)....426
35.2.8 Event and Listener Bindings....426
35.3 Summary....427
36. An Android Jetpack Data Binding Tutorial....428
36.1 Removing the Redundant Code....428
36.2 Enabling Data Binding....430
36.3 Adding the Layout Element....431
36.4 Adding the Data Element to Layout File....432
36.5 Working with the Binding Class....433
36.6 Assigning the ViewModel Instance to the Data Binding Variable....435
36.7 Adding Binding Expressions....435
36.8 Adding the Conversion Method....437
36.9 Adding a Listener Binding....438
36.10 Testing the App....438
36.11 Summary....438
37. An Android ViewModel Saved State Tutorial....440
37.1 Understanding ViewModel State Saving....440
37.2 Implementing ViewModel State Saving....441
37.3 Saving and Restoring State....443
37.4 Adding Saved State Support to the ViewModelDemo Project....444
37.5 Summary....446
38. Working with Android Lifecycle-Aware Components....448
38.1 Lifecycle Awareness....448
38.2 Lifecycle Owners....449
38.3 Lifecycle Observers....450
38.4 Lifecycle States and Events....451
38.5 Summary....452
39. An Android Jetpack Lifecycle Awareness Tutorial....453
39.1 Creating the Example Lifecycle Project....453
39.2 Creating a Lifecycle Observer....453
39.3 Adding the Observer....455
39.4 Testing the Observer....456
39.5 Creating a Lifecycle Owner....457
39.6 Testing the Custom Lifecycle Owner....460
39.7 Summary....460
40. An Overview of the Navigation Architecture Component....461
40.1 Understanding Navigation....461
40.2 Declaring a Navigation Host....463
40.3 The Navigation Graph....465
40.4 Accessing the Navigation Controller....467
40.5 Triggering a Navigation Action....468
40.6 Passing Arguments....468
40.7 Summary....469
41. An Android Jetpack Navigation Component Tutorial....471
41.1 Creating the NavigationDemo Project....471
41.2 Adding Navigation to the Build Configuration....471
41.3 Creating the Navigation Graph Resource File....472
41.4 Declaring a Navigation Host....474
41.5 Adding Navigation Destinations....476
41.6 Designing the Destination Fragment Layouts....478
41.7 Adding an Action to the Navigation Graph....480
41.8 Implement the OnFragmentInteractionListener....482
41.9 Adding View Binding Support to the Destination Fragments....483
41.10 Triggering the Action....484
41.11 Passing Data Using Safeargs....486
41.12 Summary....490
42. An Introduction to MotionLayout....491
42.1 An Overview of MotionLayout....491
42.2 MotionLayout....492
42.3 MotionScene....492
42.4 Configuring ConstraintSets....494
42.5 Custom Attributes....495
42.6 Triggering an Animation....497
42.7 Arc Motion....498
42.8 Keyframes....499
42.8.1 Attribute Keyframes....500
42.8.2 Position Keyframes....500
42.9 Time Linearity....504
42.10 KeyTrigger....505
42.11 Cycle and Time Cycle Keyframes....506
42.12 Starting an Animation from Code....506
43. An Android MotionLayout Editor Tutorial....508
43.1 Creating the MotionLayoutDemo Project....508
43.2 ConstraintLayout to MotionLayout Conversion....508
43.3 Configuring Start and End Constraints....511
43.4 Previewing the MotionLayout Animation....514
43.5 Adding an OnClick Gesture....515
43.6 Adding an Attribute Keyframe to the Transition....517
43.7 Adding a CustomAttribute to a Transition....520
43.8 Adding Position Keyframes....522
43.9 Summary....525
44. A MotionLayout KeyCycle Tutorial....526
44.1 An Overview of Cycle Keyframes....526
44.2 Using the Cycle Editor....530
44.3 Creating the KeyCycleDemo Project....531
44.4 Configuring the Start and End Constraints....532
44.5 Creating the Cycles....533
44.6 Previewing the Animation....536
44.7 Adding the KeyFrameSet to the MotionScene....536
44.8 Summary....539
45. Working with the Floating Action Button and Snackbar....540
45.1 The Material Design....540
45.2 The Design Library....541
45.3 The Floating Action Button (FAB)....541
45.4 The Snackbar....542
45.5 Creating the Example Project....543
45.6 Reviewing the Project....543
45.7 Removing Navigation Features....545
45.8 Changing the Floating Action Button....546
45.9 Adding an Action to the Snackbar....547
45.10 Summary....549
46. Creating a Tabbed Interface using the TabLayout Component....550
46.1 An Introduction to the ViewPager2....550
46.2 An Overview of the TabLayout Component....550
46.3 Creating the TabLayoutDemo Project....551
46.4 Creating the First Fragment....553
46.5 Duplicating the Fragments....554
46.6 Adding the TabLayout and ViewPager2....556
46.7 Creating the Pager Adapter....558
46.8 Performing the Initialization Tasks....559
46.9 Testing the Application....561
46.10 Customizing the TabLayout....562
46.11 Summary....564
47. Working with the RecyclerView and CardView Widgets....565
47.1 An Overview of the RecyclerView....565
47.2 An Overview of the CardView....568
47.3 Summary....570
48. An Android RecyclerView and CardView Tutorial....571
48.1 Creating the CardDemo Project....571
48.2 Modifying the Basic Views Activity Project....571
48.3 Designing the CardView Layout....572
48.4 Adding the RecyclerView....574
48.5 Adding the Image Files....575
48.6 Creating the RecyclerView Adapter....575
48.7 Initializing the RecyclerView Component....578
48.8 Testing the Application....580
48.9 Responding to Card Selections....581
48.10 Summary....583
49. A Layout Editor Sample Data Tutorial....585
49.1 Adding Sample Data to a Project....585
49.2 Using Custom Sample Data....590
49.3 Summary....594
50. Working with the AppBar and Collapsing Toolbar Layouts....595
50.1 The Anatomy of an AppBar....595
50.2 The Example Project....596
50.3 Coordinating the RecyclerView and Toolbar....597
50.4 Introducing the Collapsing Toolbar Layout....599
50.5 Changing the Title and Scrim Color....603
50.6 Summary....605
51. An Android Studio Primary/Detail Flow Tutorial....606
51.1 The Primary/Detail Flow....606
51.2 Creating a Primary/Detail Flow Activity....607
51.3 Adding the Primary/Detail Flow Activity....608
51.4 Modifying the Primary/Detail Flow Template....609
51.5 Changing the Content Model....609
51.6 Changing the Detail Pane....611
51.7 Modifying the ItemDetailFragment Class....613
51.8 Modifying the ItemListFragment Class....614
51.9 Adding Manifest Permissions....615
51.10 Running the Application....616
51.11 Summary....617
52. An Overview of Android Services....618
52.1 Intent Service....618
52.2 Bound Service....619
52.3 The Anatomy of a Service....620
52.4 Controlling Destroyed Service Restart Options....621
52.5 Declaring a Service in the Manifest File....621
52.6 Starting a Service Running on System Startup....623
52.7 Summary....623
53. An Overview of Android Intents....625
53.1 An Overview of Intents....625
53.2 Explicit Intents....626
53.3 Returning Data from an Activity....628
53.4 Implicit Intents....629
53.5 Using Intent Filters....630
53.6 Automatic Link Verification....631
53.7 Manually Enabling Links....635
53.8 Checking Intent Availability....636
53.9 Summary....637
54. Android Explicit Intents – A Worked Example....639
54.1 Creating the Explicit Intent Example Application....639
54.2 Designing the User Interface Layout for MainActivity....639
54.3 Creating the Second Activity Class....641
54.4 Designing the User Interface Layout for SecondActivity....642
54.5 Reviewing the Application Manifest File....642
54.6 Creating the Intent....644
54.7 Extracting Intent Data....645
54.8 Launching SecondActivity as a Sub-Activity....646
54.9 Returning Data from a Sub-Activity....648
54.10 Testing the Application....649
54.11 Summary....649
55. Android Implicit Intents – A Worked Example....650
55.1 Creating the Android Studio Implicit Intent Example Project....650
55.2 Designing the User Interface....650
55.3 Creating the Implicit Intent....651
55.4 Adding a Second Matching Activity....653
55.5 Adding the Web View to the UI....653
55.6 Obtaining the Intent URL....654
55.7 Modifying the MyWebView Project Manifest File....656
55.8 Installing the MyWebView Package on a Device....658
55.9 Testing the Application....659
55.10 Manually Enabling the Link....659
55.11 Automatic Link Verification....662
55.12 Summary....664
56. Android Broadcast Intents and Broadcast Receivers....665
56.1 An Overview of Broadcast Intents....665
56.2 An Overview of Broadcast Receivers....666
56.3 Obtaining Results from a Broadcast....669
56.4 Sticky Broadcast Intents....669
56.5 The Broadcast Intent Example....670
56.6 Creating the Example Application....670
56.7 Creating and Sending the Broadcast Intent....670
56.8 Creating the Broadcast Receiver....671
56.9 Registering the Broadcast Receiver....673
56.10 Testing the Broadcast Example....674
56.11 Listening for System Broadcasts....675
56.12 Summary....676
57. Android Local Bound Services – A Worked Example....677
57.1 Understanding Bound Services....677
57.2 Bound Service Interaction Options....677
57.3 A Local Bound Service Example....678
57.4 Adding a Bound Service to the Project....678
57.5 Implementing the Binder....679
57.6 Binding the Client to the Service....683
57.7 Completing the Example....685
57.8 Testing the Application....687
57.9 Summary....687
58. Android Remote Bound Services – A Worked Example....688
58.1 Client to Remote Service Communication....688
58.2 Creating the Example Application....689
58.3 Designing the User Interface....689
58.4 Implementing the Remote Bound Service....689
58.5 Configuring a Remote Service in the Manifest File....691
58.6 Launching and Binding to the Remote Service....693
58.7 Sending a Message to the Remote Service....695
58.8 Summary....696
59. A Basic Overview of Java Threads, Handlers and Executors....697
59.1 The Application Main Thread....697
59.2 Thread Handlers....697
59.3 A Threading Example....698
59.4 Building the App....698
59.5 Creating a New Thread....700
59.6 Implementing a Thread Handler....702
59.7 Passing a Message to the Handler....704
59.8 Java Executor Concurrency....705
59.9 Working with Runnable Tasks....706
59.10 Shutting down an Executor Service....708
59.11 Working with Callable Tasks and Futures....708
59.12 Handling a Future Result....710
59.13 Scheduling Tasks....712
59.14 Summary....713
60. Making Runtime Permission Requests in Android....714
60.1 Understanding Normal and Dangerous Permissions....714
60.2 Creating the Permissions Example Project....717
60.3 Checking for a Permission....717
60.4 Requesting Permission at Runtime....720
60.5 Providing a Rationale for the Permission Request....722
60.6 Testing the Permissions App....724
60.7 Summary....725
61. An Android Notifications Tutorial....726
61.1 An Overview of Notifications....726
61.2 Creating the NotifyDemo Project....728
61.3 Designing the User Interface....728
61.4 Creating the Second Activity....729
61.5 Creating a Notification Channel....730
61.6 Requesting Notification Permission....732
61.7 Creating and Issuing a Notification....736
61.8 Launching an Activity from a Notification....739
61.9 Adding Actions to a Notification....741
61.10 Bundled Notifications....743
61.11 Summary....745
62. An Android Direct Reply Notification Tutorial....747
62.1 Creating the DirectReply Project....747
62.2 Designing the User Interface....747
62.3 Requesting Notification Permission....748
62.4 Creating the Notification Channel....750
62.5 Building the RemoteInput Object....752
62.6 Creating the PendingIntent....754
62.7 Creating the Reply Action....754
62.8 Receiving Direct Reply Input....758
62.9 Updating the Notification....759
62.10 Summary....761
63. Foldable Devices and Multi-Window Support....762
63.1 Foldables and Multi-Window Support....762
63.2 Using a Foldable Emulator....763
63.3 Entering Multi-Window Mode....764
63.4 Enabling and using Freeform Support....765
63.5 Checking for Freeform Support....766
63.6 Enabling Multi-Window Support in an App....767
63.7 Specifying Multi-Window Attributes....767
63.8 Detecting Multi-Window Mode in an Activity....769
63.9 Receiving Multi-Window Notifications....769
63.10 Launching an Activity in Multi-Window Mode....770
63.11 Configuring Freeform Activity Size and Position....771
63.12 Summary....772
64. An Overview of Android SQLite Databases....774
64.1 Understanding Database Tables....774
64.2 Introducing Database Schema....775
64.3 Columns and Data Types....775
64.4 Database Rows....775
64.5 Introducing Primary Keys....776
64.6 What is SQLite?....776
64.7 Structured Query Language (SQL)....777
64.8 Trying SQLite on an Android Virtual Device (AVD)....778
64.9 The Android Room Persistence Library....781
64.10 Summary....781
65. The Android Room Persistence Library....783
65.1 Revisiting Modern App Architecture....783
65.2 Key Elements of Room Database Persistence....784
65.2.1 Repository....784
65.2.2 Room Database....784
65.2.3 Data Access Object (DAO)....784
65.2.4 Entities....784
65.2.5 SQLite Database....785
65.3 Understanding Entities....786
65.4 Data Access Objects....790
65.5 The Room Database....792
65.6 The Repository....793
65.7 In-Memory Databases....794
65.8 Database Inspector....795
65.9 Summary....796
66. An Android TableLayout and TableRow Tutorial....797
66.1 The TableLayout and TableRow Layout Views....797
66.2 Creating the Room Database Project....799
66.3 Converting to a LinearLayout....799
66.4 Adding the TableLayout to the User Interface....800
66.5 Configuring the TableRows....801
66.6 Adding the Button Bar to the Layout....802
66.7 Adding the RecyclerView....803
66.8 Adjusting the Layout Margins....804
66.9 Summary....805
67. An Android Room Database and Repository Tutorial....806
67.1 About the RoomDemo Project....806
67.2 Modifying the Build Configuration....806
67.3 Building the Entity....807
67.4 Creating the Data Access Object....810
67.5 Adding the Room Database....811
67.6 Adding the Repository....812
67.7 Adding the ViewModel....816
67.8 Creating the Product Item Layout....818
67.9 Adding the RecyclerView Adapter....819
67.10 Preparing the Main Activity....821
67.11 Adding the Button Listeners....822
67.12 Adding LiveData Observers....823
67.13 Initializing the RecyclerView....825
67.14 Testing the RoomDemo App....825
67.15 Using the Database Inspector....826
67.16 Summary....827
68. Accessing Cloud Storage using the Android Storage Access Framework....828
68.1 The Storage Access Framework....828
68.2 Working with the Storage Access Framework....829
68.3 Filtering Picker File Listings....830
68.4 Handling Intent Results....831
68.5 Reading the Content of a File....832
68.6 Writing Content to a File....833
68.7 Deleting a File....834
68.8 Gaining Persistent Access to a File....834
68.9 Summary....835
69. An Android Storage Access Framework Example....837
69.1 About the Storage Access Framework Example....837
69.2 Creating the Storage Access Framework Example....837
69.3 Designing the User Interface....838
69.4 Adding the Activity Launchers....839
69.5 Creating a New Storage File....841
69.6 Saving to a Storage File....842
69.7 Opening and Reading a Storage File....844
69.8 Testing the Storage Access Application....846
69.9 Summary....848
70. Video Playback on Android using the VideoView and MediaController Classes....849
70.1 Introducing the Android VideoView Class....849
70.2 Introducing the Android MediaController Class....850
70.3 Creating the Video Playback Example....851
70.4 Designing the VideoPlayer Layout....852
70.5 Downloading the Video File....852
70.6 Configuring the VideoView....853
70.7 Adding the MediaController to the Video View....855
70.8 Setting up the onPreparedListener....856
70.9 Summary....857
71. Android Picture-in-Picture Mode....858
71.1 Picture-in-Picture Features....858
71.2 Enabling Picture-in-Picture Mode....859
71.3 Configuring Picture-in-Picture Parameters....860
71.4 Entering Picture-in-Picture Mode....861
71.5 Detecting Picture-in-Picture Mode Changes....861
71.6 Adding Picture-in-Picture Actions....862
71.7 Summary....863
72. An Android Picture-in-Picture Tutorial....865
72.1 Adding Picture-in-Picture Support to the Manifest....865
72.2 Adding a Picture-in-Picture Button....865
72.3 Entering Picture-in-Picture Mode....866
72.4 Detecting Picture-in-Picture Mode Changes....867
72.5 Adding a Broadcast Receiver....868
72.6 Adding the PiP Action....870
72.7 Testing the Picture-in-Picture Action....874
72.8 Summary....875
73. Android Audio Recording and Playback using MediaPlayer and MediaRecorder....876
73.1 Playing Audio....876
73.2 Recording Audio and Video using the MediaRecorder Class....877
73.3 About the Example Project....879
73.4 Creating the AudioApp Project....880
73.5 Designing the User Interface....880
73.6 Checking for Microphone Availability....881
73.7 Initializing the Activity....882
73.8 Implementing the recordAudio() Method....884
73.9 Implementing the stopAudio() Method....884
73.10 Implementing the playAudio() method....885
73.11 Configuring and Requesting Permissions....886
73.12 Testing the Application....889
73.13 Summary....889
74. Working with the Google Maps Android API in Android Studio....890
74.1 The Elements of the Google Maps Android API....890
74.2 Creating the Google Maps Project....892
74.3 Creating a Google Cloud Billing Account....892
74.4 Creating a New Google Cloud Project....893
74.5 Enabling the Google Maps SDK....894
74.6 Generating a Google Maps API Key....895
74.7 Adding the API Key to the Android Studio Project....896
74.8 Testing the Application....897
74.9 Understanding Geocoding and Reverse Geocoding....897
74.10 Adding a Map to an Application....900
74.11 Requesting Current Location Permission....900
74.12 Displaying the User’s Current Location....903
74.13 Changing the Map Type....904
74.14 Displaying Map Controls to the User....906
74.15 Handling Map Gesture Interaction....907
74.15.1 Map Zooming Gestures....907
74.15.2 Map Scrolling/Panning Gestures....908
74.15.3 Map Tilt Gestures....908
74.15.4 Map Rotation Gestures....908
74.16 Creating Map Markers....909
74.17 Controlling the Map Camera....910
74.18 Summary....912
75. Printing with the Android Printing Framework....913
75.1 The Android Printing Architecture....913
75.2 The Print Service Plugins....914
75.3 Google Cloud Print....914
75.4 Printing to Google Drive....915
75.5 Save as PDF....915
75.6 Printing from Android Devices....916
75.7 Options for Building Print Support into Android Apps....917
75.7.1 Image Printing....917
75.7.2 Creating and Printing HTML Content....919
75.7.3 Printing a Web Page....921
75.7.4 Printing a Custom Document....922
75.8 Summary....923
76. An Android HTML and Web Content Printing Example....924
76.1 Creating the HTML Printing Example Application....924
76.2 Printing Dynamic HTML Content....924
76.3 Creating the Web Page Printing Example....928
76.4 Removing the Floating Action Button....929
76.5 Removing Navigation Features....929
76.6 Designing the User Interface Layout....931
76.7 Accessing the WebView from the Main Activity....932
76.8 Loading the Web Page into the WebView....933
76.9 Adding the Print Menu Option....934
76.10 Summary....937
77. A Guide to Android Custom Document Printing....939
77.1 An Overview of Android Custom Document Printing....939
77.1.1 Custom Print Adapters....940
77.2 Preparing the Custom Document Printing Project....941
77.3 Creating the Custom Print Adapter....942
77.4 Implementing the onLayout() Callback Method....944
77.5 Implementing the onWrite() Callback Method....948
77.6 Checking a Page is in Range....952
77.7 Drawing the Content on the Page Canvas....953
77.8 Starting the Print Job....956
77.9 Testing the Application....957
77.10 Summary....958
78. An Introduction to Android App Links....959
78.1 An Overview of Android App Links....959
78.2 App Link Intent Filters....960
78.3 Handling App Link Intents....961
78.4 Associating the App with a Website....962
78.5 Summary....962
79. An Android Studio App Links Tutorial....963
79.1 About the Example App....963
79.2 The Database Schema....963
79.3 Loading and Running the Project....964
79.4 Adding the URL Mapping....966
79.5 Adding the Intent Filter....969
79.6 Adding Intent Handling Code....970
79.7 Testing the App....974
79.8 Creating the Digital Asset Links File....974
79.9 Testing the App Link....975
79.10 Summary....976
80. An Android Biometric Authentication Tutorial....977
80.1 An Overview of Biometric Authentication....977
80.2 Creating the Biometric Authentication Project....978
80.3 Configuring Device Fingerprint Authentication....978
80.4 Adding the Biometric Permission to the Manifest File....979
80.5 Designing the User Interface....980
80.6 Adding a Toast Convenience Method....980
80.7 Checking the Security Settings....981
80.8 Configuring the Authentication Callbacks....983
80.9 Adding the CancellationSignal....984
80.10 Starting the Biometric Prompt....985
80.11 Testing the Project....986
80.12 Summary....988
81. Creating, Testing, and Uploading an Android App Bundle....989
81.1 The Release Preparation Process....989
81.2 Android App Bundles....989
81.3 Register for a Google Play Developer Console Account....991
81.4 Configuring the App in the Console....992
81.5 Enabling Google Play App Signing....993
81.6 Creating a Keystore File....994
81.7 Creating the Android App Bundle....996
81.8 Generating Test APK Files....997
81.9 Uploading the App Bundle to the Google Play Developer Console....999
81.10 Exploring the App Bundle....1000
81.11 Managing Testers....1002
81.12 Rolling the App Out for Testing....1002
81.13 Uploading New App Bundle Revisions....1003
81.14 Analyzing the App Bundle File....1004
81.15 Summary....1005
82. An Overview of Android In-App Billing....1006
82.1 Preparing a Project for In-App Purchasing....1006
82.2 Creating In-App Products and Subscriptions....1007
82.3 Billing Client Initialization....1008
82.4 Connecting to the Google Play Billing Library....1009
82.5 Querying Available Products....1010
82.6 Starting the Purchase Process....1011
82.7 Completing the Purchase....1012
82.8 Querying Previous Purchases....1014
82.9 Summary....1015
83. An Android In-App Purchasing Tutorial....1016
83.1 About the In-App Purchasing Example Project....1016
83.2 Creating the InAppPurchase Project....1016
83.3 Adding Libraries to the Project....1017
83.4 Designing the User Interface....1017
83.5 Adding the App to the Google Play Store....1018
83.6 Creating an In-App Product....1019
83.7 Enabling License Testers....1020
83.8 Initializing the Billing Client....1020
83.9 Querying the Product....1023
83.10 Launching the Purchase Flow....1024
83.11 Handling Purchase Updates....1025
83.12 Consuming the Product....1026
83.13 Restoring a Previous Purchase....1027
83.14 Testing the App....1029
83.15 Troubleshooting....1031
83.16 Summary....1032
84. Working with Material Design 3 Theming....1033
84.1 Material Design 2 vs. Material Design 3....1033
84.2 Understanding Material Design Theming....1033
84.3 Material Design 3 Theming....1034
84.4 Building a Custom Theme....1037
84.5 Summary....1038
85. A Material Design 3 Theming and Dynamic Color Tutorial....1039
85.1 Creating the ThemeDemo Project....1039
85.2....1039
85.3 Designing the User Interface....1039
85.4 Building a New Theme....1041
85.5 Adding the Theme to the Project....1042
85.6 Enabling Dynamic Color Support....1044
85.7 Previewing Dynamic Colors....1046
85.8 Summary....1047
86. An Overview of Gradle in Android Studio....1048
86.1 An Overview of Gradle....1048
86.2 Gradle and Android Studio....1049
86.2.1 Sensible Defaults....1049
86.2.2 Dependencies....1049
86.2.3 Build Variants....1050
86.2.4 Manifest Entries....1050
86.2.5 APK Signing....1050
86.2.6 ProGuard Support....1051
86.3 The Property and Settings Gradle Build File....1051
86.4 The Top-level Gradle Build File....1052
86.5 Module Level Gradle Build Files....1053
86.6 Configuring Signing Settings in the Build File....1056
86.7 Running Gradle Tasks from the Command Line....1058
86.8 Summary....1059
Index....1060
Fully updated for Android Studio Giraffe and the new UI, this book aims to teach you how to develop Android-based applications using the Java programming language.
This book begins with the basics and outlines how to set up an Android development and testing environment, followed by an overview of areas such as tool windows, the code editor, and the Layout Editor tool. An introduction to the architecture of Android is followed by an in-depth look at the design of Android applications and user interfaces using the Android Studio environment.
Chapters also cover the Android Architecture Components, including view models, lifecycle management, Room database access, the Database Inspector, app navigation, live data, and data binding.
More advanced topics such as intents are also covered, as are touch screen handling, gesture recognition, and the recording and playback of audio. This book edition also covers printing, transitions, and foldable device support.
The concepts of material design are also covered in detail, including the use of floating action buttons, Snackbars, tabbed interfaces, card views, navigation drawers, and collapsing toolbars.
Other key features of Android Studio and Android are also covered in detail, including the Layout Editor, the ConstraintLayout and ConstraintSet classes, MotionLayout Editor, view binding, constraint chains, barriers, and direct reply notifications.
Chapters also cover advanced features of Android Studio, such as App Links, Gradle build configuration, in-app billing, and submitting apps to the Google Play Developer Console.
Assuming you already have some Java programming experience, are ready to download Android Studio and the Android SDK, have access to a Windows, Mac, or Linux system, and have ideas for some apps to develop, you are ready to get started.