1 toc: 2 - title: Getting Started 3 path: /training/index.html 4 section: 5 - title: Building Your First App 6 path: /training/basics/firstapp/index.html 7 path_attributes: 8 - name: description 9 value: After you've installed the Android SDK, start with this class to learn the basics about Android app development. 10 section: 11 - title: Creating an Android Project 12 path: /training/basics/firstapp/creating-project.html 13 - title: Running Your Application 14 path: /training/basics/firstapp/running-app.html 15 - title: Building a Simple User Interface 16 path: /training/basics/firstapp/building-ui.html 17 - title: Starting Another Activity 18 path: /training/basics/firstapp/starting-activity.html 19 - title: Supporting Different Devices 20 path: /training/basics/supporting-devices/index.html 21 path_attributes: 22 - name: description 23 value: How to build your app with alternative resources that provide an optimized user experience on multiple device form factors using a single APK. 24 section: 25 - title: Supporting Different Languages 26 path: /training/basics/supporting-devices/languages.html 27 - title: Supporting Different Screens 28 path: /training/basics/supporting-devices/screens.html 29 - title: Supporting Different Platform Versions 30 path: /training/basics/supporting-devices/platforms.html 31 - title: Managing the Activity Lifecycle 32 path: /training/basics/activity-lifecycle/index.html 33 path_attributes: 34 - name: ja-lang 35 value: 36 - name: ko-lang 37 value: 38 - name: pt-br-lang 39 value: Como gerenciar o ciclo de vida da atividade 40 - name: ru-lang 41 value: 42 - name: zh-cn-lang 43 value: 44 - name: zh-tw-lang 45 value: 46 - name: description 47 value: How Android activities live and die and how to create a seamless user experience by implementing lifecycle callback methods. 48 section: 49 - title: Starting an Activity 50 path: /training/basics/activity-lifecycle/starting.html 51 path_attributes: 52 - name: ja-lang 53 value: 54 - name: ko-lang 55 value: 56 - name: pt-br-lang 57 value: Iniciando uma atividade 58 - name: ru-lang 59 value: 60 - name: zh-cn-lang 61 value: 62 - name: zh-tw-lang 63 value: 64 - title: Pausing and Resuming an Activity 65 path: /training/basics/activity-lifecycle/pausing.html 66 - title: Stopping and Restarting an Activity 67 path: /training/basics/activity-lifecycle/stopping.html 68 path_attributes: 69 - name: ja-lang 70 value: 71 - name: ko-lang 72 value: 73 - name: pt-br-lang 74 value: Pausando e reiniciando uma atividade 75 - name: ru-lang 76 value: 77 - name: zh-cn-lang 78 value: 79 - name: zh-tw-lang 80 value: 81 - title: Recreating an Activity 82 path: /training/basics/activity-lifecycle/recreating.html 83 path_attributes: 84 - name: ja-lang 85 value: 86 - name: ko-lang 87 value: 88 - name: pt-br-lang 89 value: Recriando uma atividade 90 - name: ru-lang 91 value: 92 - name: zh-cn-lang 93 value: 94 - name: zh-tw-lang 95 value: 96 - title: Building a Dynamic UI with Fragments 97 path: /training/basics/fragments/index.html 98 path_attributes: 99 - name: description 100 value: How to build a user interface for your app that is flexible enough to present multiple UI components on large screens and a more constrained set of UI components on smaller screensessential for building a single APK for both phones and tablets. 101 section: 102 - title: Creating a Fragment 103 path: /training/basics/fragments/creating.html 104 - title: Building a Flexible UI 105 path: /training/basics/fragments/fragment-ui.html 106 path_attributes: 107 - name: zh-cn-lang 108 value: 109 - title: Communicating with Other Fragments 110 path: /training/basics/fragments/communicating.html 111 - title: Saving Data 112 path: /training/basics/data-storage/index.html 113 path_attributes: 114 - name: ja-lang 115 value: 116 - name: ko-lang 117 value: 118 - name: pt-br-lang 119 value: Salvando dados 120 - name: ru-lang 121 value: 122 - name: zh-cn-lang 123 value: 124 - name: zh-tw-lang 125 value: 126 - name: description 127 value: How to save data on the device, whether it's temporary files, downloaded app assets, user media, structured data, or something else. 128 section: 129 - title: Saving Key-Value Sets 130 path: /training/basics/data-storage/shared-preferences.html 131 path_attributes: 132 - name: ja-lang 133 value: 134 - name: ko-lang 135 value: - 136 - name: pt-br-lang 137 value: Salvando conjuntos de valor-chave 138 - name: ru-lang 139 value: "-" 140 - name: zh-cn-lang 141 value: 142 - name: zh-tw-lang 143 value: 144 - title: Saving Files 145 path: /training/basics/data-storage/files.html 146 path_attributes: 147 - name: ja-lang 148 value: 149 - name: ko-lang 150 value: 151 - name: pt-br-lang 152 value: Salvando arquivos 153 - name: ru-lang 154 value: 155 - name: zh-cn-lang 156 value: 157 - name: zh-tw-lang 158 value: 159 - title: Saving Data in SQL Databases 160 path: /training/basics/data-storage/databases.html 161 path_attributes: 162 - name: ja-lang 163 value: SQL 164 - name: ko-lang 165 value: SQL 166 - name: pt-br-lang 167 value: Salvando dados em bancos de dados do SQL 168 - name: ru-lang 169 value: SQL 170 - name: zh-cn-lang 171 value: SQL 172 - name: zh-tw-lang 173 value: SQL 174 - title: Interacting with Other Apps 175 path: /training/basics/intents/index.html 176 path_attributes: 177 - name: ja-lang 178 value: 179 - name: ko-lang 180 value: 181 - name: pt-br-lang 182 value: Interagindo com outros aplicativos 183 - name: ru-lang 184 value: 185 - name: zh-cn-lang 186 value: 187 - name: zh-tw-lang 188 value: 189 - name: description 190 value: How to build a user experience that leverages other apps available on the device to perform advanced user tasks, such as capture a photo or view an address on a map. 191 section: 192 - title: Sending the User to Another App 193 path: /training/basics/intents/sending.html 194 path_attributes: 195 - name: ja-lang 196 value: 197 - name: ko-lang 198 value: 199 - name: pt-br-lang 200 value: Enviando o usurio para outro aplicativo 201 - name: ru-lang 202 value: 203 - name: zh-cn-lang 204 value: 205 - name: zh-tw-lang 206 value: 207 - title: Getting a Result from the Activity 208 path: /training/basics/intents/result.html 209 path_attributes: 210 - name: ja-lang 211 value: 212 - name: ko-lang 213 value: 214 - name: pt-br-lang 215 value: Obtendo resultados de uma atividade 216 - name: ru-lang 217 value: 218 - name: zh-cn-lang 219 value: 220 - name: zh-tw-lang 221 value: 222 - title: Allowing Other Apps to Start Your Activity 223 path: /training/basics/intents/filters.html 224 path_attributes: 225 - name: ja-lang 226 value: 227 - name: ko-lang 228 value: 229 - name: pt-br-lang 230 value: Permitindo que outros aplicativos iniciem sua atividade 231 - name: ru-lang 232 value: 233 - name: zh-cn-lang 234 value: 235 - name: zh-tw-lang 236 value: 237 - title: Working with System Permissions 238 path: /training/permissions/index.html 239 path_attributes: 240 - name: description 241 value: How to declare that your app needs access to features and resources outside of its 'sandbox', and how to request those privileges at runtime. 242 section: 243 - title: Declaring Permissions 244 path: /training/permissions/declaring.html 245 - title: Requesting Permissions at Run Time 246 path: /training/permissions/requesting.html 247 - title: Best Practices for Runtime Permissions 248 path: /training/permissions/best-practices.html 249 250 - title: Building Apps with Content Sharing 251 path: /training/building-content-sharing.html 252 section: 253 - title: Sharing Simple Data 254 path: /training/sharing/index.html 255 path_attributes: 256 - name: description 257 value: How to take your app interaction to the next level by sharing information with other apps, receive information back, and provide a simple and scalable way to perform Share actions with user content. 258 section: 259 - title: Sending Simple Data to Other Apps 260 path: /training/sharing/send.html 261 - title: Receiving Simple Data from Other Apps 262 path: /training/sharing/receive.html 263 - title: Adding an Easy Share Action 264 path: /training/sharing/shareaction.html 265 - title: Sharing Files 266 path: /training/secure-file-sharing/index.html 267 path_attributes: 268 - name: description 269 value: How to provide secure access to a file associated with your app using a content URI and temporary access permissions. 270 section: 271 - title: Setting Up File Sharing 272 path: /training/secure-file-sharing/setup-sharing.html 273 - title: Sharing a File 274 path: /training/secure-file-sharing/share-file.html 275 - title: Requesting a Shared File 276 path: /training/secure-file-sharing/request-file.html 277 - title: Retrieving File Information 278 path: /training/secure-file-sharing/retrieve-info.html 279 - title: Sharing Files with NFC 280 path: /training/beam-files/index.html 281 path_attributes: 282 - name: description 283 value: How to transfer files between devices using the NFC Android Beam feature. 284 section: 285 - title: Sending Files to Another Device 286 path: /training/beam-files/send-files.html 287 - title: Receiving Files from Another Device 288 path: /training/beam-files/receive-files.html 289 290 - title: Building Apps with Multimedia 291 path: /training/building-multimedia.html 292 section: 293 - title: Managing Audio Playback 294 path: /training/managing-audio/index.html 295 path_attributes: 296 - name: description 297 value: How to respond to hardware audio key presses, request audio focus when playing audio, and respond appropriately to changes in audio focus. 298 section: 299 - title: Controlling Your App's Volume and Playback 300 path: /training/managing-audio/volume-playback.html 301 - title: Managing Audio Focus 302 path: /training/managing-audio/audio-focus.html 303 - title: Dealing with Audio Output Hardware 304 path: /training/managing-audio/audio-output.html 305 - title: Capturing Photos 306 path: /training/camera/index.html 307 path_attributes: 308 - name: description 309 value: How to leverage existing camera apps on the user's device to capture photos or control the camera hardware directly and build your own camera app. 310 section: 311 - title: Taking Photos Simply 312 path: /training/camera/photobasics.html 313 - title: Recording Videos Simply 314 path: /training/camera/videobasics.html 315 - title: Controlling the Camera 316 path: /training/camera/cameradirect.html 317 - title: Printing Content 318 path: /training/printing/index.html 319 path_attributes: 320 - name: description 321 value: How to print photos, HTML documents, and custom documents from your app. 322 section: 323 - title: Photos 324 path: /training/printing/photos.html 325 - title: HTML Documents 326 path: /training/printing/html-docs.html 327 - title: Custom Documents 328 path: /training/printing/custom-docs.html 329 330 - title: Building Apps with Graphics & Animation 331 path: /training/building-graphics.html 332 section: 333 - title: Displaying Bitmaps Efficiently 334 path: /training/displaying-bitmaps/index.html 335 path_attributes: 336 - name: description 337 value: How to load and process bitmaps while keeping your user interface responsive and avoid exceeding memory limits. 338 section: 339 - title: Loading Large Bitmaps Efficiently 340 path: /training/displaying-bitmaps/load-bitmap.html 341 - title: Processing Bitmaps Off the UI Thread 342 path: /training/displaying-bitmaps/process-bitmap.html 343 - title: Caching Bitmaps 344 path: /training/displaying-bitmaps/cache-bitmap.html 345 - title: Managing Bitmap Memory 346 path: /training/displaying-bitmaps/manage-memory.html 347 - title: Displaying Bitmaps in Your UI 348 path: /training/displaying-bitmaps/display-bitmap.html 349 - title: Displaying Graphics with OpenGL ES 350 path: /training/graphics/opengl/index.html 351 path_attributes: 352 - name: description 353 value: How to create OpenGL graphics within the Android app framework and respond to touch input. 354 section: 355 - title: Building an OpenGL ES Environment 356 path: /training/graphics/opengl/environment.html 357 - title: Defining Shapes 358 path: /training/graphics/opengl/shapes.html 359 - title: Drawing Shapes 360 path: /training/graphics/opengl/draw.html 361 - title: Applying Projection and Camera Views 362 path: /training/graphics/opengl/projection.html 363 - title: Adding Motion 364 path: /training/graphics/opengl/motion.html 365 - title: Responding to Touch Events 366 path: /training/graphics/opengl/touch.html 367 - title: Animating Views Using Scenes and Transitions 368 path: /training/transitions/index.html 369 path_attributes: 370 - name: description 371 value: How to animate state changes in a view hierarchy using transitions. 372 section: 373 - title: The Transitions Framework 374 path: /training/transitions/overview.html 375 - title: Creating a Scene 376 path: /training/transitions/scenes.html 377 - title: Applying a Transition 378 path: /training/transitions/transitions.html 379 - title: Creating Custom Transitions 380 path: /training/transitions/custom-transitions.html 381 - title: Adding Animations 382 path: /training/animation/index.html 383 path_attributes: 384 - name: description 385 value: How to add transitional animations to your user interface. 386 section: 387 - title: Crossfading Two Views 388 path: /training/animation/crossfade.html 389 - title: Using ViewPager for Screen Slide 390 path: /training/animation/screen-slide.html 391 - title: Displaying Card Flip Animations 392 path: /training/animation/cardflip.html 393 - title: Zooming a View 394 path: /training/animation/zoom.html 395 - title: Animating Layout Changes 396 path: /training/animation/layout.html 397 398 - title: Building Apps with Connectivity & the Cloud 399 path: /training/building-connectivity.html 400 section: 401 - title: Connecting Devices Wirelessly 402 path: /training/connect-devices-wirelessly/index.html 403 path_attributes: 404 - name: description 405 value: How to find and connect to local devices using Network Service Discovery and how to create peer-to-peer connections with Wi-Fi. 406 section: 407 - title: Using Network Service Discovery 408 path: /training/connect-devices-wirelessly/nsd.html 409 - title: Creating P2P Connections with Wi-Fi 410 path: /training/connect-devices-wirelessly/wifi-direct.html 411 - title: Using Wi-Fi P2P for Service Discovery 412 path: /training/connect-devices-wirelessly/nsd-wifi-direct.html 413 - title: Performing Network Operations 414 path: /training/basics/network-ops/index.html 415 path_attributes: 416 - name: description 417 value: How to create a network connection, monitor the connection for changes in connectivity, and perform transactions with XML data. 418 section: 419 - title: Connecting to the Network 420 path: /training/basics/network-ops/connecting.html 421 - title: Managing Network Usage 422 path: /training/basics/network-ops/managing.html 423 - title: Optimizing Network Data Usage 424 path: /training/basics/network-ops/data-saver.html 425 - title: Parsing XML Data 426 path: /training/basics/network-ops/xml.html 427 - title: Transferring Data Without Draining the Battery 428 path: /training/efficient-downloads/index.html 429 path_attributes: 430 - name: description 431 value: How to minimize your app's impact on the battery when performing downloads and other network transactions. 432 section: 433 - title: Optimizing Downloads for Efficient Network Access 434 path: /training/efficient-downloads/efficient-network-access.html 435 - title: Minimizing the Effect of Regular Updates 436 path: /training/efficient-downloads/regular_updates.html 437 - title: Redundant Downloads are Redundant 438 path: /training/efficient-downloads/redundant_redundant.html 439 - title: Modifying Patterns Based on the Connectivity Type 440 path: /training/efficient-downloads/connectivity_patterns.html 441 - title: Resolving Cloud Save Conflicts 442 path: /training/cloudsave/conflict-res.html 443 path_attributes: 444 - name: description 445 value: How to design a robust conflict resolution strategy for apps that save data to the cloud. 446 - title: Transferring Data Using Sync Adapters 447 path: /training/sync-adapters/index.html 448 path_attributes: 449 - name: description 450 value: How to transfer data between the cloud and the device using the Android sync adapter framework 451 section: 452 - title: Creating a Stub Authenticator 453 path: /training/sync-adapters/creating-authenticator.html 454 - title: Creating a Stub Content Provider 455 path: /training/sync-adapters/creating-stub-provider.html 456 - title: Creating a Sync Adapter 457 path: /training/sync-adapters/creating-sync-adapter.html 458 - title: Running a Sync Adapter 459 path: /training/sync-adapters/running-sync-adapter.html 460 - title: Transmitting Network Data Using Volley 461 path: /training/volley/index.html 462 path_attributes: 463 - name: description 464 value: How to perform fast, scalable UI operations over the network using Volley 465 section: 466 - title: Sending a Simple Request 467 path: /training/volley/simple.html 468 - title: Setting Up a RequestQueue 469 path: /training/volley/requestqueue.html 470 - title: Making a Standard Request 471 path: /training/volley/request.html 472 - title: Implementing a Custom Request 473 path: /training/volley/request-custom.html 474 475 - title: Building Apps with Location & Maps 476 path: /training/building-location.html 477 section: 478 - title: Making Your App Location-Aware 479 path: /training/location/index.html 480 path_attributes: 481 - name: description 482 value: How to add location-aware features to your app by getting the user's current location. 483 section: 484 - title: Getting the Last Known Location 485 path: /training/location/retrieve-current.html 486 - title: Changing Location Settings 487 path: /training/location/change-location-settings.html 488 - title: Receiving Location Updates 489 path: /training/location/receive-location-updates.html 490 - title: Displaying a Location Address 491 path: /training/location/display-address.html 492 - title: Creating and Monitoring Geofences 493 path: /training/location/geofencing.html 494 - title: Adding Maps 495 path: /training/maps/index.html 496 path_attributes: 497 - name: description 498 value: How to add maps and mapping information to your app. 499 500 - title: Building Apps with User Info & Sign-In 501 path: /training/building-userinfo.html 502 section: 503 - title: Accessing Contacts Data 504 path: /training/contacts-provider/index.html 505 path_attributes: 506 - name: description 507 value: How to use Android's central address book, the Contacts Provider, to display contacts and their details and modify contact information. 508 section: 509 - title: Retrieving a List of Contacts 510 path: /training/contacts-provider/retrieve-names.html 511 - title: Retrieving Details for a Contact 512 path: /training/contacts-provider/retrieve-details.html 513 - title: Modifying Contacts Using Intents 514 path: /training/contacts-provider/modify-data.html 515 - title: Displaying the Quick Contact Badge 516 path: /training/contacts-provider/display-contact-badge.html 517 - title: Adding Sign-In 518 path: /training/sign-in/index.html 519 path_attributes: 520 - name: description 521 value: How to add user sign-in functionality to your app. 522 523 - title: Building Apps for Wearables 524 path: /training/building-wearables.html 525 section: 526 - title: Adding Wearable Features to Notifications 527 path: /training/wearables/notifications/index.html 528 path_attributes: 529 - name: description 530 value: How to build handheld notifications that are synced to and look great on wearables. 531 section: 532 - title: Creating a Notification 533 path: /training/wearables/notifications/creating.html 534 - title: Receiving Voice Input in a Notification 535 path: /training/wearables/notifications/voice-input.html 536 - title: Adding Pages to a Notification 537 path: /training/wearables/notifications/pages.html 538 - title: Stacking Notifications 539 path: /training/wearables/notifications/stacks.html 540 - title: Creating Wearable Apps 541 path: /training/wearables/apps/index.html 542 path_attributes: 543 - name: description 544 value: How to build apps that run directly on wearables. 545 section: 546 - title: Creating and Running a Wearable App 547 path: /training/wearables/apps/creating.html 548 - title: Creating Custom Layouts 549 path: /training/wearables/apps/layouts.html 550 - title: Keeping Your App Visible 551 path: /training/wearables/apps/always-on.html 552 - title: Adding Voice Capabilities 553 path: /training/wearables/apps/voice.html 554 - title: Packaging Wearable Apps 555 path: /training/wearables/apps/packaging.html 556 - title: Debugging over Bluetooth 557 path: /training/wearables/apps/bt-debugging.html 558 - title: Creating Custom UIs 559 path: /training/wearables/ui/index.html 560 path_attributes: 561 - name: description 562 value: How to create custom user interfaces for wearable apps. 563 section: 564 - title: Defining Layouts 565 path: /training/wearables/ui/layouts.html 566 - title: Creating Cards 567 path: /training/wearables/ui/cards.html 568 - title: Creating Lists 569 path: /training/wearables/ui/lists.html 570 - title: Creating a 2D Picker 571 path: /training/wearables/ui/2d-picker.html 572 - title: Showing Confirmations 573 path: /training/wearables/ui/confirm.html 574 - title: Exiting Full-Screen Activities 575 path: /training/wearables/ui/exit.html 576 - title: Sending and Syncing Data 577 path: /training/wearables/data-layer/index.html 578 path_attributes: 579 - name: description 580 value: How to sync data between handhelds and wearables. 581 section: 582 - title: Accessing the Wearable Data Layer 583 path: /training/wearables/data-layer/accessing.html 584 - title: Syncing Data Items 585 path: /training/wearables/data-layer/data-items.html 586 - title: Transferring Assets 587 path: /training/wearables/data-layer/assets.html 588 - title: Sending and Receiving Messages 589 path: /training/wearables/data-layer/messages.html 590 - title: Handling Data Layer Events 591 path: /training/wearables/data-layer/events.html 592 - title: Creating Watch Faces 593 path: /training/wearables/watch-faces/index.html 594 path_attributes: 595 - name: description 596 value: How to create watch faces for wearables. 597 section: 598 - title: Designing Watch Faces 599 path: /training/wearables/watch-faces/designing.html 600 - title: Building a Watch Face Service 601 path: /training/wearables/watch-faces/service.html 602 - title: Drawing Watch Faces 603 path: /training/wearables/watch-faces/drawing.html 604 - title: Showing Information in Watch Faces 605 path: /training/wearables/watch-faces/information.html 606 - title: Creating Interactive Watch Faces 607 path: /training/wearables/watch-faces/interacting.html 608 - title: Providing Configuration Activities 609 path: /training/wearables/watch-faces/configuration.html 610 - title: Addressing Common Issues 611 path: /training/wearables/watch-faces/issues.html 612 - title: Optimizing Performance and Battery Life 613 path: /training/wearables/watch-faces/performance.html 614 - title: Detecting Location 615 path: /training/articles/wear-location-detection.html 616 path_attributes: 617 - name: description 618 value: How to detect location data on Android Wear devices. 619 - title: Requesting Permissions 620 path: /training/articles/wear-permissions.html 621 path_attributes: 622 - name: description 623 value: How to request permissions on Android Wear devices. 624 - title: Using the Speaker 625 path: /training/wearables/wearable-sounds.html 626 path_attributes: 627 - name: description 628 value: How to use the speaker on Android Wear devices. 629 630 - title: Building Apps for TV 631 path: /training/tv/index.html 632 section: 633 - title: Building TV Apps 634 path: /training/tv/start/index.html 635 path_attributes: 636 - name: ja-lang 637 value: TV 638 - name: description 639 value: How to start building TV apps or extend your existing app to run on TV devices. 640 section: 641 - title: Getting Started with TV Apps 642 path: /training/tv/start/start.html 643 path_attributes: 644 - name: ja-lang 645 value: TV 646 - title: Handling TV Hardware 647 path: /training/tv/start/hardware.html 648 path_attributes: 649 - name: ja-lang 650 value: TV 651 - title: Building TV Layouts 652 path: /training/tv/start/layouts.html 653 path_attributes: 654 - name: ja-lang 655 value: TV 656 - title: Creating TV Navigation 657 path: /training/tv/start/navigation.html 658 path_attributes: 659 - name: ja-lang 660 value: TV 661 - title: Building TV Playback Apps 662 path: /training/tv/playback/index.html 663 path_attributes: 664 - name: ja-lang 665 value: TV 666 - name: description 667 value: How to build apps that provide media catalogs and play content. 668 section: 669 - title: Creating a Catalog Browser 670 path: /training/tv/playback/browse.html 671 path_attributes: 672 - name: ja-lang 673 value: 674 - title: Providing a Card View 675 path: /training/tv/playback/card.html 676 - title: Building a Details View 677 path: /training/tv/playback/details.html 678 path_attributes: 679 - name: ja-lang 680 value: 681 - title: Displaying a Now Playing Card 682 path: /training/tv/playback/now-playing.html 683 path_attributes: 684 - name: ja-lang 685 value: 686 - title: Adding a Guided Step 687 path: /training/tv/playback/guided-step.html 688 - title: Introducing First-time Users to Your App 689 path: /training/tv/playback/onboarding.html 690 - title: Enabling Background Playback 691 path: /training/tv/playback/options.html 692 - title: Adding Picture-in-picture 693 path: /training/tv/playback/picture-in-picture.html 694 - title: Helping Users Find Content on TV 695 path: /training/tv/discovery/index.html 696 path_attributes: 697 - name: description 698 value: How to help users discover content from your app. 699 section: 700 - title: Recommending TV Content 701 path: /training/tv/discovery/recommendations.html 702 - title: Making TV Apps Searchable 703 path: /training/tv/discovery/searchable.html 704 - title: Searching within TV Apps 705 path: /training/tv/discovery/in-app-search.html 706 - title: Building TV Games 707 path: /training/tv/games/index.html 708 path_attributes: 709 - name: description 710 value: How to build games for TV. 711 - title: Building TV Channels 712 path: /training/tv/tif/index.html 713 path_attributes: 714 - name: description 715 value: How to build channels for TV. 716 section: 717 - title: Developing a TV Input Service 718 path: /training/tv/tif/tvinput.html 719 - title: Working with Channel Data 720 path: /training/tv/tif/channel.html 721 - title: Managing User Interaction 722 path: /training/tv/tif/ui.html 723 - title: Supporting Content Recording 724 path: /training/tv/tif/content-recording.html 725 - title: TV Apps Checklist 726 path: /training/tv/publishing/checklist.html 727 path_attributes: 728 - name: description 729 value: An itemized list of requirements for TV apps. 730 731 - title: Building Apps for Auto 732 path: /training/auto/index.html 733 section: 734 - title: Getting Started with Auto 735 path: /training/auto/start/index.html 736 path_attributes: 737 - name: description 738 value: How to start building or extending apps that work with Auto devices. 739 - title: Playing Audio for Auto 740 path: /training/auto/audio/index.html 741 path_attributes: 742 - name: description 743 value: How to extend audio apps to play content on Auto devices. 744 - title: Messaging for Auto 745 path: /training/auto/messaging/index.html 746 path_attributes: 747 - name: description 748 value: How to extend text messaging apps to work with Auto devices. 749 - title: Testing for Auto 750 path: /training/auto/testing/index.html 751 path_attributes: 752 - name: description 753 value: How to use DHU to test Auto apps. 754 755 - title: Best Practices for Interaction & Engagement 756 path: /training/best-ux.html 757 section: 758 - title: Designing Effective Navigation 759 path: /training/design-navigation/index.html 760 path_attributes: 761 - name: description 762 value: How to plan your app's screen hierarchy and forms of navigation so users can effectively and intuitively traverse your app content using various navigation patterns. 763 section: 764 - title: Planning Screens and Their Relationships 765 path: /training/design-navigation/screen-planning.html 766 - title: Planning for Multiple Touchscreen Sizes 767 path: /training/design-navigation/multiple-sizes.html 768 - title: Providing Descendant and Lateral Navigation 769 path: /training/design-navigation/descendant-lateral.html 770 - title: Providing Ancestral and Temporal Navigation 771 path: /training/design-navigation/ancestral-temporal.html 772 - title: "Putting it All Together: Wireframing the Example App" 773 path: /training/design-navigation/wireframing.html 774 - title: Implementing Effective Navigation 775 path: /training/implementing-navigation/index.html 776 path_attributes: 777 - name: description 778 value: How to implement various navigation patterns such as swipe views, a navigation drawer, and up navigation. 779 section: 780 - title: Creating Swipe Views with Tabs 781 path: /training/implementing-navigation/lateral.html 782 - title: Creating a Navigation Drawer 783 path: /training/implementing-navigation/nav-drawer.html 784 - title: Providing Up Navigation 785 path: /training/implementing-navigation/ancestral.html 786 - title: Providing Proper Back Navigation 787 path: /training/implementing-navigation/temporal.html 788 - title: Implementing Descendant Navigation 789 path: /training/implementing-navigation/descendant.html 790 - title: Notifying the User 791 path: /training/notify-user/index.html 792 path_attributes: 793 - name: description 794 value: How to display messages called notifications outside of your application's UI. 795 section: 796 - title: Building a Notification 797 path: /training/notify-user/build-notification.html 798 - title: Preserving Navigation when Starting an Activity 799 path: /training/notify-user/navigation.html 800 - title: Updating Notifications 801 path: /training/notify-user/managing.html 802 - title: Using Big View Styles 803 path: /training/notify-user/expanded.html 804 - title: Displaying Progress in a Notification 805 path: /training/notify-user/display-progress.html 806 - title: Supporting Swipe-to-Refresh 807 path: /training/swipe/index.html 808 path_attributes: 809 - name: description 810 value: How to modify your app's layout to support manual content updates triggered by the swipe-to-refresh gesture. 811 section: 812 - title: Adding Swipe-to-Refresh To Your App 813 path: /training/swipe/add-swipe-interface.html 814 - title: Responding to a Refresh Gesture 815 path: /training/swipe/respond-refresh-request.html 816 - title: Adding Search Functionality 817 path: /training/search/index.html 818 path_attributes: 819 - name: description 820 value: How to properly add a search interface to your app and create a searchable database. 821 section: 822 - title: Setting up the Search Interface 823 path: /training/search/setup.html 824 - title: Storing and Searching for Data 825 path: /training/search/search.html 826 - title: Remaining Backward Compatible 827 path: /training/search/backward-compat.html 828 - title: Making Your App Content Searchable by Google 829 path: /training/app-indexing/index.html 830 path_attributes: 831 - name: description 832 value: How to enable deep linking and indexing of your application content so that users can open this content directly from their mobile search results. 833 section: 834 - title: Enabling Deep Links for App Content 835 path: /training/app-indexing/deep-linking.html 836 - title: Specifying App Content for Indexing 837 path: /training/app-indexing/enabling-app-indexing.html 838 - title: Optimizing Content for the Assistant 839 path: /training/articles/assistant.html 840 path_attributes: 841 - name: description 842 value: Support contextually relevant actions through the Assist API. 843 - title: Handling App Links 844 path: /training/app-links/index.html 845 path_attributes: 846 - name: description 847 value: How to enable the system to handle web requests by taking the user directly to your app instead of your website. 848 849 - title: Best Practices for User Interface 850 path: /training/best-ui.html 851 section: 852 - title: Designing for Multiple Screens 853 path: /training/multiscreen/index.html 854 path_attributes: 855 - name: es-lang 856 value: Cmo disear aplicaciones para varias pantallas 857 - name: ja-lang 858 value: 859 - name: zh-cn-lang 860 value: 861 - name: description 862 value: How to build a user interface that's flexible enough to fit perfectly on any screen and how to create different interaction patterns that are optimized for different screen sizes. 863 section: 864 - title: Supporting Different Screen Sizes 865 path: /training/multiscreen/screensizes.html 866 path_attributes: 867 - name: es-lang 868 value: Cmo admitir varios tamaos de pantalla 869 - name: ja-lang 870 value: 871 - name: ko-lang 872 value: 873 - name: zh-cn-lang 874 value: 875 - title: Supporting Different Screen Densities 876 path: /training/multiscreen/screendensities.html 877 path_attributes: 878 - name: es-lang 879 value: Cmo admitir varias densidades de pantalla 880 - name: ja-lang 881 value: 882 - name: zh-cn-lang 883 value: 884 - title: Implementing Adaptive UI Flows 885 path: /training/multiscreen/adaptui.html 886 path_attributes: 887 - name: es-lang 888 value: Cmo implementar interfaces de usuario adaptables 889 - name: ja-lang 890 value: UI 891 - name: zh-cn-lang 892 value: 893 - title: Build a Responsive UI with ConstraintLayout 894 path: /training/constraint-layout/index.html 895 path_attributes: 896 - name: description 897 value: How to build a layout using ConstraintLayout and the Android Studio Layout Editor. 898 - title: Adding the App Bar 899 path: /training/appbar/index.html 900 path_attributes: 901 - name: description 902 value: How to use the support library's toolbar widget to implement an app bar that displays properly on a wide range of devices. 903 section: 904 - title: Setting Up the App Bar 905 path: /training/appbar/setting-up.html 906 - title: Adding and Handling Actions 907 path: /training/appbar/actions.html 908 - title: Adding an Up Action 909 path: /training/appbar/up-action.html 910 - title: Action Views and Action Providers 911 path: /training/appbar/action-views.html 912 - title: Showing Pop-Up Messages 913 path: /training/snackbar/index.html 914 path_attributes: 915 - name: description 916 value: How to use the support library's Snackbar widget to display a brief pop-up message. 917 section: 918 - title: Building and Displaying a Pop-Up Message 919 path: /training/snackbar/showing.html 920 - title: Adding an Action to a Message 921 path: /training/snackbar/action.html 922 - title: Creating Custom Views 923 path: /training/custom-views/index.html 924 path_attributes: 925 - name: description 926 value: How to build custom UI widgets that are interactive and smooth. 927 section: 928 - title: Creating a Custom View Class 929 path: /training/custom-views/create-view.html 930 - title: Implementing Custom Drawing 931 path: /training/custom-views/custom-drawing.html 932 - title: Making the View Interactive 933 path: /training/custom-views/making-interactive.html 934 - title: Optimizing the View 935 path: /training/custom-views/optimizing-view.html 936 - title: Creating Backward-Compatible UIs 937 path: /training/backward-compatible-ui/index.html 938 path_attributes: 939 - name: description 940 value: How to use UI components and other APIs from the more recent versions of Android while remaining compatible with older versions of the platform. 941 section: 942 - title: Abstracting the New APIs 943 path: /training/backward-compatible-ui/abstracting.html 944 - title: Proxying to the New APIs 945 path: /training/backward-compatible-ui/new-implementation.html 946 - title: Creating an Implementation with Older APIs 947 path: /training/backward-compatible-ui/older-implementation.html 948 - title: Using the Version-Aware Component 949 path: /training/backward-compatible-ui/using-component.html 950 - title: Implementing Accessibility 951 path: /training/accessibility/index.html 952 path_attributes: 953 - name: description 954 value: How to make your app accessible to users with vision impairment or other physical disabilities. 955 section: 956 - title: Developing Accessible Applications 957 path: /training/accessibility/accessible-app.html 958 - title: Developing Accessibility Services 959 path: /training/accessibility/service.html 960 - title: Accessibility Testing Checklist 961 path: /training/accessibility/testing.html 962 - title: Managing the System UI 963 path: /training/system-ui/index.html 964 path_attributes: 965 - name: description 966 value: How to hide and show status and navigation bars across different versions of Android, while managing the display of other screen components. 967 section: 968 - title: Dimming the System Bars 969 path: /training/system-ui/dim.html 970 - title: Hiding the Status Bar 971 path: /training/system-ui/status.html 972 - title: Hiding the Navigation Bar 973 path: /training/system-ui/navigation.html 974 - title: Using Immersive Full-Screen Mode 975 path: /training/system-ui/immersive.html 976 - title: Responding to UI Visibility Changes 977 path: /training/system-ui/visibility.html 978 - title: Creating Apps with Material Design 979 path: /training/material/index.html 980 path_attributes: 981 - name: es-lang 982 value: Crear aplicaciones con Material Design 983 - name: in-lang 984 value: Desain Bahan untuk Pengembang 985 - name: ja-lang 986 value: 987 - name: ko-lang 988 value: 989 - name: pt-br-lang 990 value: Material Design para desenvolvedores 991 - name: ru-lang 992 value: Material Design 993 - name: vi-lang 994 value: Material Design cho Nh pht trin 995 - name: zh-cn-lang 996 value: 997 - name: zh-tw-lang 998 value: 999 - name: description 1000 value: How to implement material design on Android. 1001 section: 1002 - title: Getting Started 1003 path: /training/material/get-started.html 1004 path_attributes: 1005 - name: es-lang 1006 value: Comencemos 1007 - name: in-lang 1008 value: Memulai 1009 - name: ja-lang 1010 value: 1011 - name: ko-lang 1012 value: 1013 - name: pt-br-lang 1014 value: Como iniciar 1015 - name: ru-lang 1016 value: 1017 - name: vi-lang 1018 value: Bt u 1019 - name: zh-cn-lang 1020 value: 1021 - name: zh-tw-lang 1022 value: 1023 - title: Using the Material Theme 1024 path: /training/material/theme.html 1025 path_attributes: 1026 - name: es-lang 1027 value: Usar el tema Material 1028 - name: in-lang 1029 value: Menggunakan Tema Bahan 1030 - name: ja-lang 1031 value: 1032 - name: ko-lang 1033 value: 1034 - name: pt-br-lang 1035 value: Como usar o tema do Material 1036 - name: ru-lang 1037 value: Material Design 1038 - name: vi-lang 1039 value: S dng Ch Material 1040 - name: zh-cn-lang 1041 value: 1042 - name: zh-tw-lang 1043 value: 1044 - title: Creating Lists and Cards 1045 path: /training/material/lists-cards.html 1046 path_attributes: 1047 - name: es-lang 1048 value: Crear listas y tarjetas 1049 - name: in-lang 1050 value: Membuat Daftar dan Kartu 1051 - name: ja-lang 1052 value: 1053 - name: ko-lang 1054 value: 1055 - name: pt-br-lang 1056 value: Como criar listas e cartes 1057 - name: ru-lang 1058 value: 1059 - name: vi-lang 1060 value: To Danh sch v Th 1061 - name: zh-cn-lang 1062 value: 1063 - name: zh-tw-lang 1064 value: 1065 - title: Defining Shadows and Clipping Views 1066 path: /training/material/shadows-clipping.html 1067 path_attributes: 1068 - name: es-lang 1069 value: Definir vistas de recorte y sombras 1070 - name: in-lang 1071 value: Mendefinisikan Bayangan dan Memangkas Tampilan 1072 - name: ja-lang 1073 value: 1074 - name: ko-lang 1075 value: 1076 - name: pt-br-lang 1077 value: Como definir sombras e recortar visualizaes 1078 - name: ru-lang 1079 value: 1080 - name: vi-lang 1081 value: nh ngha bng v Dng xem Ct hnh 1082 - name: zh-cn-lang 1083 value: 1084 - name: zh-tw-lang 1085 value: 1086 - title: Working with Drawables 1087 path: /training/material/drawables.html 1088 path_attributes: 1089 - name: es-lang 1090 value: Trabajar con interfaces dibujables 1091 - name: in-lang 1092 value: Bekerja dengan Drawable 1093 - name: ja-lang 1094 value: 1095 - name: ko-lang 1096 value: Drawable 1097 - name: pt-br-lang 1098 value: Como trabalhar com desenhveis 1099 - name: ru-lang 1100 value: 1101 - name: vi-lang 1102 value: Lm vic vi Ni dung v c 1103 - name: zh-cn-lang 1104 value: Drawables 1105 - name: zh-tw-lang 1106 value: 1107 - title: Defining Custom Animations 1108 path: /training/material/animations.html 1109 path_attributes: 1110 - name: es-lang 1111 value: Definir animaciones personalizadas 1112 - name: in-lang 1113 value: Mendefinisikan Animasi Custom 1114 - name: ja-lang 1115 value: 1116 - name: ko-lang 1117 value: 1118 - name: pt-br-lang 1119 value: Como definir animaes personalizadas 1120 - name: ru-lang 1121 value: 1122 - name: vi-lang 1123 value: nh ngha Hot hnh Ty chnh 1124 - name: zh-cn-lang 1125 value: 1126 - name: zh-tw-lang 1127 value: 1128 - title: Maintaining Compatibility 1129 path: /training/material/compatibility.html 1130 path_attributes: 1131 - name: es-lang 1132 value: Mantener la compatibilidad 1133 - name: in-lang 1134 value: Mempertahankan Kompatibilitas 1135 - name: ja-lang 1136 value: 1137 - name: ko-lang 1138 value: 1139 - name: pt-br-lang 1140 value: Como manter a compatibilidade 1141 - name: ru-lang 1142 value: 1143 - name: vi-lang 1144 value: Duy tr Tnh tng thch 1145 - name: zh-cn-lang 1146 value: 1147 - name: zh-tw-lang 1148 value: 1149 - title: Selecting Colors with the Palette API 1150 path: /training/material/palette-colors.html 1151 1152 - title: Best Practices for User Input 1153 path: /training/best-user-input.html 1154 section: 1155 - title: Using Touch Gestures 1156 path: /training/gestures/index.html 1157 path_attributes: 1158 - name: description 1159 value: How to write apps that allow users to interact with the touch screen via touch gestures. 1160 section: 1161 - title: Detecting Common Gestures 1162 path: /training/gestures/detector.html 1163 - title: Tracking Movement 1164 path: /training/gestures/movement.html 1165 - title: Animating a Scroll Gesture 1166 path: /training/gestures/scroll.html 1167 - title: Handling Multi-Touch Gestures 1168 path: /training/gestures/multi.html 1169 - title: Dragging and Scaling 1170 path: /training/gestures/scale.html 1171 - title: Managing Touch Events in a ViewGroup 1172 path: /training/gestures/viewgroup.html 1173 - title: Handling Keyboard Input 1174 path: /training/keyboard-input/index.html 1175 path_attributes: 1176 - name: description 1177 value: How to specify the appearance and behaviors of soft input methods (such as on-screen keyboards) and how to optimize the experience with hardware keyboards. 1178 section: 1179 - title: Specifying the Input Method Type 1180 path: /training/keyboard-input/style.html 1181 - title: Handling Input Method Visibility 1182 path: /training/keyboard-input/visibility.html 1183 - title: Supporting Keyboard Navigation 1184 path: /training/keyboard-input/navigation.html 1185 - title: Handling Keyboard Actions 1186 path: /training/keyboard-input/commands.html 1187 - title: Supporting Game Controllers 1188 path: /training/game-controllers/index.html 1189 path_attributes: 1190 - name: description 1191 value: How to write apps that support game controllers. 1192 section: 1193 - title: Handling Controller Actions 1194 path: /training/game-controllers/controller-input.html 1195 - title: Supporting Controllers Across Android Versions 1196 path: /training/game-controllers/compatibility.html 1197 - title: Supporting Multiple Game Controllers 1198 path: /training/game-controllers/multiple-controllers.html 1199 1200 - title: Best Practices for Background Jobs 1201 path: /training/best-background.html 1202 section: 1203 - title: Running in a Background Service 1204 path: /training/run-background-service/index.html 1205 path_attributes: 1206 - name: description 1207 value: How to improve UI performance and responsiveness by sending work to a Service running in the background 1208 section: 1209 - title: Creating a Background Service 1210 path: /training/run-background-service/create-service.html 1211 - title: Sending Work Requests to the Background Service 1212 path: /training/run-background-service/send-request.html 1213 - title: Reporting Work Status 1214 path: /training/run-background-service/report-status.html 1215 - title: Loading Data in the Background 1216 path: /training/load-data-background/index.html 1217 path_attributes: 1218 - name: description 1219 value: How to use CursorLoader to query data without affecting UI responsiveness. 1220 section: 1221 - title: Running a Query with a CursorLoader 1222 path: /training/load-data-background/setup-loader.html 1223 - title: Handling the Results 1224 path: /training/load-data-background/handle-results.html 1225 - title: Managing Device Awake State 1226 path: /training/scheduling/index.html 1227 path_attributes: 1228 - name: description 1229 value: How to use repeating alarms and wake locks to run background jobs. 1230 section: 1231 - title: Keeping the Device Awake 1232 path: /training/scheduling/wakelock.html 1233 - title: Scheduling Repeating Alarms 1234 path: /training/scheduling/alarms.html 1235 - title: Best Practices for Performance 1236 path: /training/best-performance.html 1237 section: 1238 - title: Performance Tips 1239 path: /training/articles/perf-tips.html 1240 path_attributes: 1241 - name: description 1242 value: How to optimize your app's performance in various ways to improve its responsiveness and battery efficiency. 1243 - title: Improving Layout Performance 1244 path: /training/improving-layouts/index.html 1245 path_attributes: 1246 - name: description 1247 value: How to identify problems in your app's layout performance and improve the UI responsiveness. 1248 section: 1249 - title: Optimizing Layout Hierarchies 1250 path: /training/improving-layouts/optimizing-layout.html 1251 - title: Re-using Layouts with <include/> 1252 path: /training/improving-layouts/reusing-layouts.html 1253 - title: Loading Views On Demand 1254 path: /training/improving-layouts/loading-ondemand.html 1255 - title: Making ListView Scrolling Smooth 1256 path: /training/improving-layouts/smooth-scrolling.html 1257 - title: Optimizing Battery Life 1258 path: /training/monitoring-device-state/index.html 1259 path_attributes: 1260 - name: es-lang 1261 value: Cmo optimizar la duracin de la batera 1262 - name: ja-lang 1263 value: 1264 - name: zh-cn-lang 1265 value: 1266 - name: description 1267 value: How to minimize the amount of power your app requires by adapting to current power conditions and performing power-hungry tasks at proper intervals. 1268 section: 1269 - title: Monitoring the Battery Level and Charging State 1270 path: /training/monitoring-device-state/battery-monitoring.html 1271 path_attributes: 1272 - name: es-lang 1273 value: Cmo controlar el nivel de batera y el estado de carga 1274 - name: ja-lang 1275 value: 1276 - name: zh-cn-lang 1277 value: 1278 - title: Determining and Monitoring the Docking State and Type 1279 path: /training/monitoring-device-state/docking-monitoring.html 1280 path_attributes: 1281 - name: es-lang 1282 value: Cmo determinar y controlar el tipo de conector y el estado de la conexin 1283 - name: ja-lang 1284 value: 1285 - name: zh-cn-lang 1286 value: 1287 - title: Determining and Monitoring the Connectivity Status 1288 path: /training/monitoring-device-state/connectivity-monitoring.html 1289 path_attributes: 1290 - name: es-lang 1291 value: Cmo determinar y controlar el estado de la conectividad 1292 - name: ja-lang 1293 value: 1294 - name: zh-cn-lang 1295 value: 1296 - title: Manipulating Broadcast Receivers On Demand 1297 path: /training/monitoring-device-state/manifest-receivers.html 1298 path_attributes: 1299 - name: es-lang 1300 value: Cmo manipular los receptores de emisin bajo demanda 1301 - name: ja-lang 1302 value: 1303 - name: zh-cn-lang 1304 value: 1305 - title: Sending Operations to Multiple Threads 1306 path: /training/multiple-threads/index.html 1307 path_attributes: 1308 - name: description 1309 value: How to improve the performance and scalability of long-running operations by dispatching work to multiple threads. 1310 section: 1311 - title: Specifying the Code to Run on a Thread 1312 path: /training/multiple-threads/define-runnable.html 1313 - title: Creating a Manager for Multiple Threads 1314 path: /training/multiple-threads/create-threadpool.html 1315 - title: Running Code on a Thread Pool Thread 1316 path: /training/multiple-threads/run-code.html 1317 - title: Communicating with the UI Thread 1318 path: /training/multiple-threads/communicate-ui.html 1319 - title: Keeping Your App Responsive 1320 path: /training/articles/perf-anr.html 1321 path_attributes: 1322 - name: description 1323 value: How to keep your app responsive to user interaction so the UI does not lock-up and display an "Application Not Responding" dialog. 1324 - title: JNI Tips 1325 path: /training/articles/perf-jni.html 1326 path_attributes: 1327 - name: description 1328 value: How to efficiently use the Java Native Interface with the Android NDK. 1329 - title: SMP Primer for Android 1330 path: /training/articles/smp.html 1331 path_attributes: 1332 - name: description 1333 value: Tips for coding Android apps on symmetric multiprocessor systems. 1334 1335 - title: Best Practices for Security & Privacy 1336 path: /training/best-security.html 1337 section: 1338 - title: Security Tips 1339 path: /training/articles/security-tips.html 1340 path_attributes: 1341 - name: description 1342 value: How to perform various tasks and keep your app's data and your user's data secure. 1343 - title: Security with HTTPS and SSL 1344 path: /training/articles/security-ssl.html 1345 path_attributes: 1346 - name: description 1347 value: How to ensure that your app is secure when performing network transactions. 1348 - title: Network Security Configuration 1349 path: /training/articles/security-config.html 1350 path_attributes: 1351 - name: description 1352 value: Customize the behavior of your app's secure network connections safely. 1353 - title: Updating Your Security Provider to Protect Against SSL Exploits 1354 path: /training/articles/security-gms-provider.html 1355 path_attributes: 1356 - name: description 1357 value: How to use and update Google Play services security provider, to protect against SSL exploits. 1358 - title: Checking Device Compatibility with SafetyNet 1359 path: /training/safetynet/index.html 1360 path_attributes: 1361 - name: description 1362 value: How to use the SafetyNet service to analyze a device where your app is running and get information about its compatibility with your app. 1363 - title: Checking URLs with the Safe Browsing API 1364 path: /training/safebrowsing/index.html 1365 path_attributes: 1366 - name: description 1367 value: How to use the SafetyNet service to determine if a URL is designated as a known threat. 1368 - title: Verifying Hardware-backed Key Pairs with Key Attestation 1369 path: /training/articles/security-key-attestation.html 1370 path_attributes: 1371 - name: description 1372 value: How to retrieve and verify the properties of a device's hardware-backed key pair. 1373 - title: Enhancing Security with Device Management Policies 1374 path: /work/device-management-policy.html 1375 path_attributes: 1376 - name: description 1377 value: How to create an application that enforces security policies on devices. 1378 - title: Supporting Direct Boot 1379 path: /training/articles/direct-boot.html 1380 path_attributes: 1381 - name: description 1382 value: How use device encrypted storage during Direct Boot mode. 1383 - title: Using Scoped Directory Access 1384 path: /training/articles/scoped-directory-access.html 1385 path_attributes: 1386 - name: description 1387 value: How to use scoped directory access to request access to external storage directories. 1388 1389 - title: Best Practices for Permissions & Identifiers 1390 path: /training/best-permissions-ids.html 1391 section: 1392 - title: Permissions and User Data 1393 path: /training/articles/user-data-overview.html 1394 path_attributes: 1395 - name: description 1396 value: Overview of app permissions on Android and how they affect your users. 1397 - title: Best Practices for App Permissions 1398 path: /training/articles/user-data-permissions.html 1399 path_attributes: 1400 - name: description 1401 value: How to manage permissions the right way for users. 1402 - title: Best Practices for Unique Identifiers 1403 path: /training/articles/user-data-ids.html 1404 path_attributes: 1405 - name: description 1406 value: Unique identifiers available and how to choose the right one for your use case. 1407 1408 - title: Best Practices for Testing 1409 path: /training/testing/index.html 1410 section: 1411 - title: Getting Started with Testing 1412 path: /training/testing/start/index.html 1413 path_attributes: 1414 - name: description 1415 value: How to get started with testing your Android applications. 1416 - title: Building Effective Unit Tests 1417 path: /training/testing/unit-testing/index.html 1418 path_attributes: 1419 - name: description 1420 value: How to build effective unit tests for Android apps. 1421 section: 1422 - title: Building Local Unit Tests 1423 path: /training/testing/unit-testing/local-unit-tests.html 1424 - title: Building Instrumented Unit Tests 1425 path: /training/testing/unit-testing/instrumented-unit-tests.html 1426 - title: Automating UI Tests 1427 path: /training/testing/ui-testing/index.html 1428 path_attributes: 1429 - name: description 1430 value: How to automate your user interface tests for Android apps. 1431 section: 1432 - title: Testing UI for a Single App 1433 path: /training/testing/ui-testing/espresso-testing.html 1434 - title: Testing UI for Multiple Apps 1435 path: /training/testing/ui-testing/uiautomator-testing.html 1436 - title: Testing App Component Integrations 1437 path: /training/testing/integration-testing/index.html 1438 path_attributes: 1439 - name: description 1440 value: How to build effective integration tests for Android apps. 1441 section: 1442 - title: Testing Your Service 1443 path: /training/testing/integration-testing/service-testing.html 1444 - title: Testing Your Content Provider 1445 path: /training/testing/integration-testing/content-provider-testing.html 1446 - title: Testing Display Performance 1447 path: /training/testing/performance.html 1448 path_attributes: 1449 - name: description 1450 value: How to automate UI performance testing. 1451 1452 - title: Using Google Play to Distribute & Monetize 1453 path: /training/distribute.html 1454 section: 1455 - title: Selling In-app Products 1456 path: /training/in-app-billing/index.html 1457 path_attributes: 1458 - name: description 1459 value: How to sell in-app products from your application using In-app Billing. 1460 section: 1461 - title: Preparing Your App 1462 path: /training/in-app-billing/preparing-iab-app.html 1463 - title: Establishing Products for Sale 1464 path: /training/in-app-billing/list-iab-products.html 1465 - title: Purchasing Products 1466 path: /training/in-app-billing/purchase-iab-products.html 1467 - title: Testing Your App 1468 path: /training/in-app-billing/test-iab-app.html 1469 - title: Maintaining Multiple APKs 1470 path: /training/multiple-apks/index.html 1471 path_attributes: 1472 - name: description 1473 value: How to publish your app on Google Play with separate APKs that target different devices, while using a single app listing. 1474 section: 1475 - title: Creating Multiple APKs for Different API Levels 1476 path: /training/multiple-apks/api.html 1477 - title: Creating Multiple APKs for Different Screen Sizes 1478 path: /training/multiple-apks/screensize.html 1479 - title: Creating Multiple APKs for Different GL Textures 1480 path: /training/multiple-apks/texture.html 1481 - title: Creating Multiple APKs with 2+ Dimensions 1482 path: /training/multiple-apks/multiple.html 1483