var _RESOURCES = [ { "title":"ADT-1 Developer Kit", "titleFriendly":"", "summary":"The ADT-1 Developer Kit is a streaming media player and game controller designed for running and testing apps built for Android TV. Supplies of ADT-1 are limited and it is intended for developers who are interested in building new apps or extending their…", "url":"tv/adt-1/index.html", "group":"", "keywords": ["emote","e-mote","adt"], "tags": ["emote","e-mote","adt"], "image":"tv/images/android-tv-remote.png", "lang":"en", "type":"" }, { "title":"Important Safety Instructions for ADT-1", "titleFriendly":"", "summary":"Safety information for the ADT-1 device. WARNING: Read all safety information below before using this device to avoid injury. Do not install near heat sources, such as heaters and other devices. Use in a well-ventilated area and plug power adapter into…", "url":"tv/adt-1/safety.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"" }, { "title":"Regulatory Disclosures for ADT-1", "titleFriendly":"", "summary":"Disclosures for the ADT-1 device. Model: W2 FCC ID: A4R-W2 IC: 10395A-W2 U.S. Federal Communications Commission Notices To satisfy FCC and IC exposure requirements, a separation distance of at least 20 cm should be maintained between the antenna of this…", "url":"tv/adt-1/regulatory.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"" }, { "title":"Design Principles of Android Wear", "titleFriendly":"", "summary":"Android wearables provide just the right information at just the right time, allowing you to be connected to the virtual world and present in the real world. Here you’ll find some guidelines for designing great user experiences on the Android Wear platform…", "url":"wear/design/index.html", "group":"", "keywords": [], "tags": [], "image":"wear/images/05_images.png", "lang":"en", "type":"" }, { "title":"UI Overview", "titleFriendly":"", "summary":"A new form factor deserves a new UI model. At a high level, the Android Wear UI consists of two main spaces centered around the core functions of Suggest and Demand . Your application will have an important role to play in both of these spaces. The context…", "url":"wear/design/user-interface.html", "group":"", "keywords": [], "tags": [], "image":"wear/images/screens/bezel.png", "lang":"en", "type":"" } ]; var ABOUT_RESOURCES = [ { "title":"Android Lollipop", "titleFriendly":"", "summary":"欢迎使用 Android 5.0 Lollipop,这是迄今为止规模最大最为雄心勃勃的 Android 版本! 此版本为用户推出了各种崭新的新功能,为开发者则提供了数千个新的 API。不仅如此,它将 Android 的疆土扩展得更远,小到手机、平板电脑和穿戴式设备,大到电视和汽车,都可以是它活跃的领地。 要深入了解面向开发者的新 API,请参阅 Android 5.0 API 概述 。有关适合消费者阅读的更多 Android 5.0 内容,请访问 www.android.com 。 Android…", "url":"intl/zh-cn/about/versions/lollipop.html", "group":"", "keywords": [], "tags": [], "image":"images/home/l-hero_2x.png", "lang":"zh-cn", "type":"about" }, { "title":"About Android TV", "titleFriendly":"", "summary":"Bring your apps, games, and content to the biggest screen in the house.", "url":"tv/index.html", "group":"", "keywords": ["tv","leanback"], "tags": ["tv","leanback"], "image":"tv/images/hero.jpg", "lang":"en", "type":"about" }, { "title":"Developer Support", "titleFriendly":"", "summary":"Resources available to help you report and resolve issues while you are developing apps for Android.", "url":"support.html", "group":"", "keywords": [], "tags": [], "image":"images/android-support-card.png", "lang":"en", "type":"about" }, { "title":"Android Wear", "titleFriendly":"", "summary":"Small, powerful devices, worn on the body. Useful information when you need it most. Intelligent answers to spoken questions. Tools to help reach fitness goals. Your key to a multiscreen world. Before you start building, check out the Android Wear Design…", "url":"wear/index.html", "group":"", "keywords": [], "tags": [], "image":"wear/images/notifications.png", "lang":"en", "type":"about" }, { "title":"Android Auto", "titleFriendly":"", "summary":"Let drivers listen to and control content in your music and other audio apps. Allow drivers to hear and respond to your messaging service via the car's controls and screen. Write your apps without having to worry about vehicle-specific hardware differences…", "url":"auto/index.html", "group":"", "keywords": [], "tags": [], "image":"wear/images/carrot.png", "lang":"en", "type":"about" }, { "title":"Gingerbread", "titleFriendly":"", "summary":"The Android 2.3 platform introduces many new and exciting features for users and developers. This document provides a glimpse at some of the new features and technologies in Android 2.3. For detailed information about the new developer APIs, see the Android…", "url":"about/versions/android-2.3-highlights.html", "group":"", "keywords": [], "tags": [], "image":"sdk/images/2.3/home-menu.png", "lang":"en", "type":"about" }, { "title":"Ice Cream Sandwich", "titleFriendly":"", "summary":"Welcome to Android 4.0! Android 4.0 delivers a refined, unified UI for phones and tablets and introduces innovative features for users and developers. This document provides a glimpse of the many new features and technologies that make Android 4.0 simple…", "url":"about/versions/android-4.0-highlights.html", "group":"", "keywords": [], "tags": [], "image":"sdk/images/4.0/home.png", "lang":"en", "type":"about" }, { "title":"Honeycomb", "titleFriendly":"", "summary":"Welcome to Android 3.0! The Android 3.0 platform introduces many new and exciting features for users and developers. This document provides a glimpse of some of the new features and technologies, as delivered in Android 3.0. For a more detailed look at…", "url":"about/versions/android-3.0-highlights.html", "group":"", "keywords": [], "tags": [], "image":"sdk/images/3.0/home_hero1.png", "lang":"en", "type":"about" }, { "title":"Android KitKat", "titleFriendly":"", "summary":"Welcome to Android 4.4 KitKat! Android KitKat brings all of Android's most innovative, most beautiful, and most useful features to more devices everywhere. This document provides a glimpse of what's new for developers. Find out more about KitKat…", "url":"about/versions/kitkat.html", "group":"", "keywords": [], "tags": [], "image":"images/kk-devices.png", "lang":"en", "type":"about" }, { "title":"Android Lollipop", "titleFriendly":"", "summary":"Welcome to Android 5.0 Lollipop—the largest and most ambitious release for Android yet! This release is packed with new features for users and thousands of new APIs for developers. It extends Android even further, from phones, tablets, and wearables, …", "url":"about/versions/lollipop.html", "group":"", "keywords": [], "tags": [], "image":"images/home/l-hero_2x.png", "lang":"en", "type":"about" }, { "title":"Jelly Bean", "titleFriendly":"", "summary":"Welcome to Android 4.3, a sweeter version of Jelly Bean! Android 4.3 includes performance optimizations and great new features for users and developers. This document provides a glimpse of what's new for developers. See the Android 4.3 APIs document…", "url":"about/versions/jelly-bean.html", "group":"", "keywords": [], "tags": [], "image":"images/jb-android-43.jpg", "lang":"en", "type":"about" }, { "title":"Honeycomb MR1", "titleFriendly":"", "summary":"Welcome to Android 3.1! Android 3.1 is an incremental platform release that refines many of the features introduced in Android 3.0. It builds on the same tablet-optimized UI and features offered in Android 3.0 and adds several new capabilities for users…", "url":"about/versions/android-3.1-highlights.html", "group":"", "keywords": [], "tags": [], "image":"sdk/images/3.1/home.png", "lang":"en", "type":"about" }, { "title":"Dashboards", "titleFriendly":"", "summary":"page.metaDescription=Charts that give you an overview of device characteristics and platform versions that are active in the Android ecosystem.", "url":"about/dashboards/index.html", "group":"", "keywords": ["android","dashboard","platforms","versions"], "tags": ["ecosystem","versions","whatsnew"], "image":"//chart.googleapis.com/chart?chl=GL%202.0%7CGL%203.0&chf=bg%2Cs%2C00000000&chd=t%3A69.9%2C30.1&chco=c4df9b%2C6fad0c&cht=p&chs=400x250", "lang":"en", "type":"about" }, { "title":"Legal Notice", "titleFriendly":"", "summary":"Android is an open platform that's freely available to you as an app developer. You can immediately download the Android SDK, develop apps, and distribute them to the world without any registration or fees. Android is developed by Google Inc. and …", "url":"legal.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"about" } ]; var DESIGN_RESOURCES = [ { "title":"写作风格", "titleFriendly":"", "summary":"撰写应用中显示的文本时,应力求简明、简易和友好。 避免使用啰嗦、生硬的文字 请勿提供无关信息 关注用户的兴趣点,而不是技术细节 将重要信息放在最前面 将用户目标放在最前面 避免使用令人困惑或令人厌烦的表达…", "url":"intl/zh-cn/design/style/writing.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"zh-cn", "type":"design" }, { "title":"Style for TV", "titleFriendly":"", "summary":"Follow these style guidelines to create beautiful, functional apps for TV. The difference between a TV experience that feels right and one that does not greatly depends on the number, spacing, and size of on-screen elements. Although TV sizes and resolutions…", "url":"design/tv/style.html", "group":"", "keywords": [], "tags": [], "image":"design/tv/images/overscan.png", "lang":"en", "type":"design" }, { "title":"Designing for Android TV", "titleFriendly":"", "summary":"Guidelines to help you create a great leanback experience on Android TV.", "url":"design/tv/index.html", "group":"", "keywords": ["tv","leanback","designguidelines"], "tags": ["tv","leanback","designguidelines"], "image":"design/tv/images/apps-games-rows.jpg", "lang":"en", "type":"design" }, { "title":"Creative Vision for TV", "titleFriendly":"", "summary":"Users bring a specific set of expectations when watching TV, versus interacting with a phone or tablet. The Android User Experience Team has developed the following guidelines for creation of the Android TV platform and the apps that run on it. The TV…", "url":"design/tv/principles.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"design" }, { "title":"UI Patterns for TV", "titleFriendly":"", "summary":"As a developer of apps for TV, you should follow certain patterns to enable users to quickly understand and operate your app. This section describes recommended design patterns for TV apps. Users typically navigate TV devices using a directional pad (…", "url":"design/tv/patterns.html", "group":"", "keywords": [], "tags": [], "image":"design/tv/images/focus.png", "lang":"en", "type":"design" }, { "title":"Material Design", "titleFriendly":"", "summary":"Material design is a comprehensive guide for visual, motion, and interaction design across platforms and devices. Android now includes support for material design apps. To use material design in your Android apps, follow the guidelines defined in the …", "url":"design/material/index.html", "group":"", "keywords": ["material","design"], "tags": ["material","design"], "image":"design/material/images/MaterialLight.png", "lang":"en", "type":"design" }, { "title":"Downloads", "titleFriendly":"", "summary":"You may use these materials without restriction to facilitate your app design and implementation. Drag and drop your way to beautifully designed Android apps. The stencils feature the rich typography, colors, interactive controls, and icons found throughout…", "url":"design/downloads/index.html", "group":"", "keywords": ["icons","stencils","color swatches"], "tags": ["icons","stencils","colorswatches"], "image":"design/media/downloads_stencils.png", "lang":"en", "type":"design" }, { "title":"Style for Android Wear", "titleFriendly":"", "summary":"Here are a number of design considerations to bear in mind that are particular to Android Wear. Be mindful of different device sizes and shapes. Wearable devices are a form of fashion and expression for their owners, and so Android Wear supports a variety…", "url":"design/wear/style.html", "group":"", "keywords": [], "tags": [], "image":"design/media/wear/circle_message2.png", "lang":"en", "type":"design" }, { "title":"Context Awareness on Android Wear", "titleFriendly":"", "summary":"Some of the most powerful user experiences with Android Wear are based on context-aware notifications and actions. By using device sensors and other contextual cues, your app can reveal information and functionality precisely when the user needs it, at…", "url":"design/wear/context.html", "group":"", "keywords": [], "tags": [], "image":"design/media/wear/ContextualExample.005.png", "lang":"en", "type":"design" }, { "title":"Android Wear", "titleFriendly":"", "summary":"Designing apps for wearable devices powered by Android Wear is substantially different than designing for phones or tablets: different strengths and weaknesses, different use cases, different ergonomics. To get started, you should understand the overall…", "url":"design/wear/index.html", "group":"", "keywords": [], "tags": [], "image":"wear/images/screens/stream.gif", "lang":"en", "type":"design" }, { "title":"Design Principles for Android Wear", "titleFriendly":"", "summary":"These design principles provide some simple heuristics about how you should plan and assess your Android Wear app design. A watch is a perfect form factor for a device that you can use while doing something else, such as cooking, eating, walking, running…", "url":"design/wear/principles.html", "group":"", "keywords": [], "tags": [], "image":"design/media/wear/five_seconds.gif", "lang":"en", "type":"design" }, { "title":"Creative Vision for Android Wear", "titleFriendly":"", "summary":"Android Wear devices provide just the right information at just the right time, allowing users to be more connected to both the virtual world and the real world. Great Android Wear experiences are: Most people are used to launching apps by clicking an…", "url":"design/wear/creative-vision.html", "group":"", "keywords": [], "tags": [], "image":"design/media/wear/vision_traffic.png", "lang":"en", "type":"design" }, { "title":"Watch Faces for Android Wear", "titleFriendly":"", "summary":"Creating Watch Faces Android Wear supports custom watch faces with designs that can show contextually relevant information to users. Designing a watch face requires a careful blending of data and visual elements that informs users without requiring close…", "url":"design/wear/watchfaces.html", "group":"", "keywords": [], "tags": [], "image":"design/media/wear/Render_Next.png", "lang":"en", "type":"design" }, { "title":"App Structure for Android Wear", "titleFriendly":"", "summary":"Users are used to tapping icons to launch apps. Android Wear is different. A typical Wear app adds a card to the stream at a contextually relevant moment. It might have a button that opens a full screen view for a fast micro interaction, but it just as…", "url":"design/wear/structure.html", "group":"", "keywords": [], "tags": [], "image":"design/media/wear/bridgednotifications.jpg", "lang":"en", "type":"design" }, { "title":"UI Patterns for Android Wear", "titleFriendly":"", "summary":"Android Wear is used for micro-interactions, and so adhering to consistent design patterns that users are already accustomed to is paramount. Cards in the stream can take slightly different forms: App icons appear in a fixed position overhanging the edge…", "url":"design/wear/patterns.html", "group":"", "keywords": [], "tags": [], "image":"design/media/wear/Bluebird.png", "lang":"en", "type":"design" }, { "title":"Designing for Auto", "titleFriendly":"", "summary":"Building Apps for Auto Android Auto provide a standardized user interface and user interaction model that works across vehicles. As a designer, you do not need to worry about vehicle-specific hardware differences. This page describes some of the key screens…", "url":"design/auto/index.html", "group":"", "keywords": ["design","auto"], "tags": ["design","auto"], "image":"auto/images/ui/gearhead_overview.png", "lang":"en", "type":"design" }, { "title":"Design", "titleFriendly":"", "summary":"Welcome to Android Design, your place for learning how to design exceptional Android apps.…", "url":"design/index.html", "group":"", "keywords": [], "tags": ["beautifulapps","design","ux","patterns","holo","appquality","landing"], "image":"design/media/index_landing_page.png", "lang":"en", "type":"design" }, { "title":"Themes", "titleFriendly":"", "summary":"Themes are Android's mechanism for applying a consistent style to an app or activity. The style specifies the visual properties of the elements that make up your user interface, such as color, height, padding and font size. To promote greater cohesion…", "url":"design/style/themes.html", "group":"", "keywords": [], "tags": [], "image":"design/media/themes_holo_light.png", "lang":"en", "type":"design" }, { "title":"Your Branding", "titleFriendly":"", "summary":"Following Android design patterns doesn't mean that your app has to look the same as everyone else's. In Android, your app can shine as an extension of your brand. Use your brand color for accent by overriding the Android framework's default…", "url":"design/style/branding.html", "group":"", "keywords": ["branding","logo"], "tags": ["branding","logo"], "image":"design/media/branding_wallet.png", "lang":"en", "type":"design" }, { "title":"Writing Style", "titleFriendly":"", "summary":"When writing text that appears in your app, keep it concise, simple, and friendly. Avoid wordy, stilted text Don't provide unnecessary information Focus on the user's concern, not technical details Put top news first Put the user's goal first…", "url":"design/style/writing.html", "group":"", "keywords": ["dialog","toast","notification"], "tags": ["dialog","toast","notification"], "image":"", "lang":"en", "type":"design" }, { "title":"Style", "titleFriendly":"", "summary":"Build visually compelling apps that look great on any device.…", "url":"design/style/index.html", "group":"", "keywords": [], "tags": [], "image":"design/media/design_elements_landing.png", "lang":"en", "type":"design" }, { "title":"Touch Feedback", "titleFriendly":"", "summary":"Use illumination and dimming to respond to touches, reinforce the resulting behaviors of gestures, and indicate what actions are enabled and disabled. Be responsive to touches in a gentle way . Whenever a user touches an actionable area in your app, let…", "url":"design/style/touch-feedback.html", "group":"", "keywords": ["input","button"], "tags": ["input","button"], "image":"design/media/touch_feedback_states.png", "lang":"en", "type":"design" }, { "title":"Metrics and Grids", "titleFriendly":"", "summary":"Optimize your app's UI by designing layouts based on density-independent grids.", "url":"design/style/metrics-grids.html", "group":"", "keywords": ["layout","screens"], "tags": ["multiplescreens","layout","tablets"], "image":"design/media/metrics_closeup.png", "lang":"en", "type":"design" }, { "title":"Color", "titleFriendly":"", "summary":"Use color primarily for emphasis. Choose colors that fit with your brand and provide good contrast between visual components. Note that red and green may be indistinguishable to color-blind users. Blue is the standard accent color in Android's color…", "url":"design/style/color.html", "group":"", "keywords": [], "tags": [], "image":"design/media/color_spectrum.png", "lang":"en", "type":"design" }, { "title":"Typography", "titleFriendly":"", "summary":"How to use typography in your Android apps.", "url":"design/style/typography.html", "group":"", "keywords": ["textview","font"], "tags": ["textview","font"], "image":"design/media/typography_main.png", "lang":"en", "type":"design" }, { "title":"Iconography", "titleFriendly":"Guidelines for creating your app's icons", "summary":"An icon is a graphic that takes up a small portion of screen real estate and provides a quick, intuitive representation of an action, a status, or an app. When you design icons for your app, it's important to keep in mind that your app may be installed…", "url":"design/style/iconography.html", "group":"", "keywords": ["icons"], "tags": ["icons","googleplay","listing","branding"], "image":"design/media/iconography_overview.png", "lang":"en", "type":"design" }, { "title":"Devices and Displays", "titleFriendly":"", "summary":"Take advantage of Android's flexible layout system and create apps that gracefully scale from phones to tablets and beyond.", "url":"design/style/devices-displays.html", "group":"", "keywords": [], "tags": [], "image":"design/media/devices_displays_main.png", "lang":"en", "type":"design" }, { "title":"Switches", "titleFriendly":"", "summary":"Checkboxes allow the user to select multiple options from a set. Avoid using a single checkbox to turn an option off or on. Instead, use an on/off switch.…", "url":"design/building-blocks/switches.html", "group":"", "keywords": ["switch","checkbox","radiobutton","button"], "tags": ["switch","checkbox","radiobutton","button"], "image":"design/media/switches_checkboxes.png", "lang":"en", "type":"design" }, { "title":"Scrolling", "titleFriendly":"", "summary":"Scrolling allows the user to navigate to content in the overflow using a swipe gesture. The scrolling speed is proportional to the speed of the gesture. Appears during scrolling to indicate what portion of the content is currently in view. In addition…", "url":"design/building-blocks/scrolling.html", "group":"", "keywords": ["scrollview","listview"], "tags": ["scrollview","listview"], "image":"", "lang":"en", "type":"design" }, { "title":"Spinners", "titleFriendly":"", "summary":"Spinners provide a quick way to select one value from a set. In the default state, a spinner shows its currently selected value. Touching the spinner displays a dropdown menu with all other available values, from which the user can select a new one.…", "url":"design/building-blocks/spinners.html", "group":"", "keywords": ["spinner","dropdown"], "tags": ["spinner","dropdown"], "image":"design/media/spinners_form.png", "lang":"en", "type":"design" }, { "title":"Dialogs", "titleFriendly":"", "summary":"Dialogs prompt the user for decisions or additional information required by the app to continue a task. Such requests can range from simple Cancel/OK decisions to more complex layouts asking the user to adjust settings or enter text.…", "url":"design/building-blocks/dialogs.html", "group":"", "keywords": ["dialog","alert","popup","toast"], "tags": ["dialog","alert","popup","toast"], "image":"design/media/dialogs_main.png", "lang":"en", "type":"design" }, { "title":"Progress & Activity", "titleFriendly":"", "summary":"Progress bars and activity indicators signal to users that something is happening that will take a moment. Progress bars are for situations where the percentage completed can be determined. They give users a quick sense of how much longer an operation…", "url":"design/building-blocks/progress.html", "group":"", "keywords": ["progressbar","download","network"], "tags": ["progressbar","download","network"], "image":"design/media/progress_download.png", "lang":"en", "type":"design" }, { "title":"Building Blocks", "titleFriendly":"", "summary":"Your inventory of ready-to-use elements for creating outstanding apps.…", "url":"design/building-blocks/index.html", "group":"", "keywords": [], "tags": [], "image":"design/media/building_blocks_landing.png", "lang":"en", "type":"design" }, { "title":"Tabs", "titleFriendly":"", "summary":"Tabs in the action bar make it easy to explore and switch between different views or functional aspects of your app, or to browse categorized data sets.…", "url":"design/building-blocks/tabs.html", "group":"", "keywords": ["tabs","actionbar","navigation","viewpager"], "tags": ["tabs","actionbar","navigation","viewpager"], "image":"design/media/tabs_overview.png", "lang":"en", "type":"design" }, { "title":"Buttons", "titleFriendly":"", "summary":"A button consists of text and/or an image that clearly communicates what action will occur when the user touches it. A button can have an image, text, or both.…", "url":"design/building-blocks/buttons.html", "group":"", "keywords": ["button","input"], "tags": ["button","input"], "image":"design/media/icon_magnifying_glass.png", "lang":"en", "type":"design" }, { "title":"Seek Bars and Sliders", "titleFriendly":"", "summary":"Interactive sliders make it possible to select a value from a continuous or discrete range of values by moving the slider thumb. The smallest value is to the left, the largest to the right. The interactive nature of the slider makes it a great choice …", "url":"design/building-blocks/seek-bars.html", "group":"", "keywords": ["seekbar","progressbar"], "tags": ["seekbar","progressbar"], "image":"design/media/seekbar_example.png", "lang":"en", "type":"design" }, { "title":"Pickers", "titleFriendly":"", "summary":"Pickers provide a simple way to select a single value from a set. In addition to touching the up/down arrow buttons, it's possible to set the desired value from the keyboard or via a swipe gesture.…", "url":"design/building-blocks/pickers.html", "group":"", "keywords": ["datepicker","timepicker"], "tags": ["datepicker","timepicker"], "image":"design/media/picker_space.png", "lang":"en", "type":"design" }, { "title":"Grid Lists", "titleFriendly":"", "summary":"Grid lists are an alternative to standard list views. They are best suited for showing data sets that represent themselves through images. In contrast to simple lists, grid lists may scroll either vertically or horizontally.…", "url":"design/building-blocks/grid-lists.html", "group":"", "keywords": ["gridview","layout","listview"], "tags": ["gridview","layout","listview"], "image":"design/media/gridview_overview.png", "lang":"en", "type":"design" }, { "title":"Text Fields", "titleFriendly":"", "summary":"Text fields allow the user to type text into your app. They can be either single line or multi-line. Touching a text field places the cursor and automatically displays the keyboard. In addition to typing, text fields allow for a variety of other activities…", "url":"design/building-blocks/text-fields.html", "group":"", "keywords": ["text","edittext","input"], "tags": ["text","edittext","input"], "image":"design/media/text_input_singlevsmultiline.png", "lang":"en", "type":"design" }, { "title":"Lists", "titleFriendly":"", "summary":"Lists present multiple line items in a vertical arrangement. They can be used for data selection as well as drilldown navigation.…", "url":"design/building-blocks/lists.html", "group":"", "keywords": ["listview","layout"], "tags": ["listview","layout"], "image":"design/media/lists_main.png", "lang":"en", "type":"design" }, { "title":"Android Design Principles", "titleFriendly":"", "summary":"These design principles were developed by and for the Android User Experience Team to keep users' best interests in mind. For Android developers and designers, they continue to underlie the more detailed design guidelines for different types of devices…", "url":"design/get-started/principles.html", "group":"", "keywords": [], "tags": [], "image":"design/media/principles_delight.png", "lang":"en", "type":"design" }, { "title":"Creative Vision", "titleFriendly":"", "summary":"Starting with Ice Cream Sandwich, we focused the design of Android around these three overarching goals, which apply to our core apps as well as the system at large. As you work with Android, consider these goals.…", "url":"design/get-started/creative-vision.html", "group":"", "keywords": [], "tags": [], "image":"design/media/creative_vision_main.png", "lang":"en", "type":"design" }, { "title":"Phones & Tablets", "titleFriendly":"", "summary":"Android's system UI provides the framework on top of which you build your app, whether you're designing for phones, tablets, watches, or other form factors. Aspects of UI that are especially important for phones and tablets include the Home screen…", "url":"design/handhelds/index.html", "group":"", "keywords": [], "tags": [], "image":"design/media/ui_overview_home_screen.png", "lang":"en", "type":"design" }, { "title":"Devices", "titleFriendly":"", "summary":"The device-centric UI principles, overviews, and detailed guidelines described here build on the core Android Design Principles to provide more specific design guidance for different form factors.…", "url":"design/devices.html", "group":"", "keywords": [], "tags": [], "image":"design/media/device_family.png", "lang":"en", "type":"design" }, { "title":"App Structure", "titleFriendly":"", "summary":"Apps come in many varieties that address very different needs. For example: Your app's structure depends largely on the content and tasks you want to surface for your users. A typical Android app consists of top level and detail/edit views. If…", "url":"design/patterns/app-structure.html", "group":"", "keywords": ["navigation","layout","tablet"], "tags": ["navigation","layout","tablet"], "image":"design/media/app_structure_overview.png", "lang":"en", "type":"design" }, { "title":"Action Bar", "titleFriendly":"", "summary":"The Action bar is an essential design element for all apps. Learn about what the action bar can do and how to use it in your apps.", "url":"design/patterns/actionbar.html", "group":"", "keywords": ["actionbar","navigation"], "tags": ["actionbar","navigation"], "image":"design/media/action_bar_pattern_overview.png", "lang":"en", "type":"design" }, { "title":"Notifications", "titleFriendly":"", "summary":"Notifying the User DevBytes: Notifications in the Android L Developer Preview The notification system allows users to keep informed about relevant and timely events in your app, such as new chat messages from a friend or a calendar event. Think of notifications…", "url":"design/patterns/notifications.html", "group":"", "keywords": ["notifications","design","l"], "tags": ["notifications","design","l"], "image":"images/android-5.0/notifications/basic_combo.png", "lang":"en", "type":"design" }, { "title":"Settings", "titleFriendly":"", "summary":"Settings is a place in your app where users indicate their preferences for how your app should behave. This benefits users because:…", "url":"design/patterns/settings.html", "group":"", "keywords": ["preferences","sharedpreferences"], "tags": ["preferences","sharedpreferences"], "image":"design/media/settings_overflow.png", "lang":"en", "type":"design" }, { "title":"Notifications in Android 4.4 and Lower", "titleFriendly":"", "summary":"The notification system allows your app to keep the user informed about events, such as new chat messages or a calendar event. Think of notifications as a news channel that alerts the user to important events as they happen or a log that chronicles events…", "url":"design/patterns/notifications_k.html", "group":"", "keywords": [], "tags": [], "image":"design/media/notifications_pattern_anatomy.png", "lang":"en", "type":"design" }, { "title":"Full Screen", "titleFriendly":"", "summary":"Some content is best experienced full screen, like videos, games, image galleries, books, and slides in a presentation. You can engage users more deeply with content in full screen by minimizing visual distraction from app controls and protecting users…", "url":"design/patterns/fullscreen.html", "group":"", "keywords": ["full screen","immersive","leanback"], "tags": ["fullscreen","immersive","leanback"], "image":"design/media/fullscreen_landing.png", "lang":"en", "type":"design" }, { "title":"Navigation Drawer", "titleFriendly":"", "summary":"Creating a Navigation Drawer The navigation drawer is a panel that transitions in from the left edge of the screen and displays the app’s main navigation options. The user can bring the navigation drawer onto the screen by swiping from the left edge of…", "url":"design/patterns/navigation-drawer.html", "group":"", "keywords": ["drawerlayout","slidingpanelayout"], "tags": ["drawerlayout","slidingpanelayout"], "image":"design/media/navigation_drawer_overview.png", "lang":"en", "type":"design" }, { "title":"Pure Android", "titleFriendly":"", "summary":"Most developers want to distribute their apps on multiple platforms. As you plan your app for Android, keep in mind that different platforms play by different rules and conventions. Design decisions that make perfect sense on one platform will look and…", "url":"design/patterns/pure-android.html", "group":"", "keywords": [], "tags": [], "image":"design/media/migrating_ui_elements.png", "lang":"en", "type":"design" }, { "title":"Backwards Compatibility", "titleFriendly":"", "summary":"Notes on how Android 4.x adapts UI designed for older hardware and OS versions.", "url":"design/patterns/compatibility.html", "group":"", "keywords": ["support"], "tags": ["support"], "image":"design/media/compatibility_virtual_nav.png", "lang":"en", "type":"design" }, { "title":"Swipe Views", "titleFriendly":"", "summary":"Efficient navigation is one of the cornerstones of a well-designed app. While apps are generally built in a hierarchical fashion, there are instances where horizontal navigation can flatten vertical hierarchies and make access to related data items faster…", "url":"design/patterns/swipe-views.html", "group":"", "keywords": ["viewpager","navigation","tabs"], "tags": ["viewpager","navigation","tabs"], "image":"design/media/swipe_views.png", "lang":"en", "type":"design" }, { "title":"Multi-pane Layouts", "titleFriendly":"", "summary":"Design guide with examples of how to flatten navigation and provide improved layout across the range of Android devices.", "url":"design/patterns/multi-pane-layouts.html", "group":"", "keywords": ["tablet","navigation","layout","fragment"], "tags": ["tablet","navigation","layout","fragment"], "image":"design/media/multipane_views.png", "lang":"en", "type":"design" }, { "title":"Confirming & Acknowledging", "titleFriendly":"", "summary":"In some situations, when a user invokes an action in your app, it's a good idea to confirm or acknowledge that action through text. Confirming is asking the user to verify that they truly want to proceed with an action they just invoked. In some cases…", "url":"design/patterns/confirming-acknowledging.html", "group":"", "keywords": ["dialog","toast","notification"], "tags": ["dialog","toast","notification"], "image":"design/media/confirm_ack_confirming.png", "lang":"en", "type":"design" }, { "title":"Patterns", "titleFriendly":"", "summary":"Design apps that behave in a consistent, predictable fashion.…", "url":"design/patterns/index.html", "group":"", "keywords": [], "tags": [], "image":"design/media/patterns_landing.png", "lang":"en", "type":"design" }, { "title":"Buttons", "titleFriendly":"", "summary":"Some content is best experienced full screen, like videos, games, image galleries, books, and slides in a presentation. You can engage users more deeply with content in full screen by minimizing visual distraction from app controls and protecting users…", "url":"design/patterns/buttons.html", "group":"", "keywords": ["buttons"], "tags": ["buttons"], "image":"design/media/fullscreen_landing.png", "lang":"en", "type":"design" }, { "title":"Navigation with Back and Up", "titleFriendly":"", "summary":"Consistent navigation is an essential component of the overall user experience. Few things frustrate users more than basic navigation that behaves in inconsistent and unexpected ways. Android 3.0 introduced significant changes to the global navigation…", "url":"design/patterns/navigation.html", "group":"", "keywords": ["navigation","activity","task","up navigation","back navigation"], "tags": ["navigation","activity","task","upnavigation","backnavigation"], "image":"design/media/navigation_between_siblings_gmail.png", "lang":"en", "type":"design" }, { "title":"New in Android", "titleFriendly":"", "summary":"A quick look at the new patterns and styles you can use to build beautiful Android apps… Material design is a comprehensive guide for visual, motion, and interaction design across platforms and devices. Android 5.0 provides a new theme, new widgets for…", "url":"design/patterns/new.html", "group":"", "keywords": ["kitkat","android 4.4"], "tags": ["kitkat","android4.4"], "image":"design/media/branding_googlemusic.png", "lang":"en", "type":"design" }, { "title":"Help", "titleFriendly":"", "summary":"This page covers design patterns for making help accessible in your app and tips for creating help content for users who are eager for assistance.…", "url":"design/patterns/help.html", "group":"", "keywords": ["settings","preferences"], "tags": ["settings","preferences"], "image":"design/media/help_cling.png", "lang":"en", "type":"design" }, { "title":"Accessibility", "titleFriendly":"", "summary":"Design an app that's universally accessible to people with visual impairment, color deficiency, hearing loss, and limited dexterity.", "url":"design/patterns/accessibility.html", "group":"", "keywords": ["accessibility","navigation","input"], "tags": ["accessibility","navigation","input"], "image":"design/media/accessibility_contentdesc.png", "lang":"en", "type":"design" }, { "title":"Gestures", "titleFriendly":"", "summary":"Gestures allow users to interact with your app by manipulating the screen objects you provide. The following table shows the core gesture set that is supported in Android. Triggers the default functionality for a given item. Press, lift Enters data selection…", "url":"design/patterns/gestures.html", "group":"", "keywords": ["gesture","input","touch"], "tags": ["gesture","input","touch"], "image":"design/media/gesture_touch.png", "lang":"en", "type":"design" }, { "title":"Selection", "titleFriendly":"", "summary":"The contextual action bar (CAB) is a temporary action bar that overlays your app's current action bar while data is selected. It appears after the user long-presses on a selectable data item.…", "url":"design/patterns/selection.html", "group":"", "keywords": ["actionmode","navigation","contextual"], "tags": ["actionmode","navigation","contextual"], "image":"design/media/selection_context_menu.png", "lang":"en", "type":"design" }, { "title":"Widgets", "titleFriendly":"", "summary":"Design guide to creating widgets that are easy to use and look great.", "url":"design/patterns/widgets.html", "group":"", "keywords": ["appwidget","home"], "tags": ["appwidget","home"], "image":"design/media/widgets_info.png", "lang":"en", "type":"design" }, { "title":"Videos", "titleFriendly":"", "summary":"The Android Design Team presents design-oriented sessions at Google I/O every year. Visit these pages to view the videos and presentations from the conferences. Want to enchant people, simplify their lives, and make them feel amazing with your app…", "url":"design/videos/index.html", "group":"", "keywords": [], "tags": [], "image":"images/home/io-logo-2013-alt.png", "lang":"en", "type":"design" } ]; var DISTRIBUTE_RESOURCES = [ { "title":"Essentials for a Successful App", "titleFriendly":"", "summary":"A focus on quality should be part of your entire app delivery process: from initial concept through app and UI design, coding and testing and onto a process of monitoring feedback and making improvement after launch.…", "url":"intl/zh-cn/distribute/essentials/index.html", "group":"", "keywords": ["guidelines","tablet","quality"], "tags": ["landing","quality"], "image":"", "lang":"zh-cn", "type":"distribute" }, { "title":"平板电脑应用的质量", "titleFriendly":"", "summary":"平板电脑是一个快速增长的Android的安装基础,提供了新的机会,为你的应用程序提供了新的机会。", "url":"intl/zh-cn/distribute/essentials/quality/tablets.html", "group":"", "keywords": [], "tags": [], "image":"distribute/images/tablet-guidelines-color.jpg", "lang":"zh-cn", "type":"distribute" }, { "title":"应用的核心质量", "titleFriendly":"", "summary":"应用程序质量的好坏将直接影响到你的应用程序的长期成功 - 这包括安装,用户评分和评论,参与和用户保留方面。", "url":"intl/zh-cn/distribute/essentials/quality/core.html", "group":"", "keywords": [], "tags": [], "image":"distribute/images/core-quality-guidelines.jpg", "lang":"zh-cn", "type":"distribute" }, { "title":"你的语言的资源", "titleFriendly":"", "summary":"我们翻译了以下一些网站资源,希望能帮助你开始设计、开发和发布你的Android应用程序到全球。", "url":"intl/zh-cn/distribute/resources.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"zh-cn", "type":"distribute" }, { "title":"品牌指南", "titleFriendly":"", "summary":"关于Android 和 Goolge Play 品牌的指南和下载。", "url":"intl/zh-cn/distribute/tools/promote/brand.html", "group":"", "keywords": [], "tags": [], "image":"assets/images/resource-card-default-android.jpg", "lang":"zh-cn", "type":"distribute" }, { "title":"Google Play 徽章生成器", "titleFriendly":"", "summary":"点击几下就可以为你的应用程序构建徽章,或者下载为各种语言本地化的高分辨率徽章资产。", "url":"intl/zh-cn/distribute/tools/promote/badges.html", "group":"", "keywords": [], "tags": [], "image":"images/gp-badges-set.png", "lang":"zh-cn", "type":"distribute" }, { "title":"Device Art Generator", "titleFriendly":"", "summary":"为了更好看的宣传图片和改善视觉语境,拖放你的应用程序的屏幕截图到真实设备的图稿。", "url":"intl/zh-cn/distribute/tools/promote/device-art.html", "group":"", "keywords": [], "tags": [], "image":"images/device-art-ex-crop.jpg", "lang":"zh-cn", "type":"distribute" }, { "title":"链接到你的商品", "titleFriendly":"", "summary":"了解如何构建链接,把用户从浏览或搜索带到你在 Google Play 的应用程序。", "url":"intl/zh-cn/distribute/tools/promote/linking.html", "group":"", "keywords": [], "tags": [], "image":"images/gp-linking-ex-crop.png", "lang":"zh-cn", "type":"distribute" }, { "title":"发布检查清单", "titleFriendly":"", "summary":"向用户发布应用的完整过程的基本概述。在开发的早期阅读这份清单将有助于你做出规划并在Google Play成功发布应用。", "url":"intl/zh-cn/distribute/tools/launch-checklist.html", "group":"", "keywords": [], "tags": [], "image":"distribute/images/launch-checklist.jpg", "lang":"zh-cn", "type":"distribute" }, { "title":"工具与参考", "titleFriendly":"", "summary":"", "url":"intl/zh-cn/distribute/tools/index.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"zh-cn", "type":"distribute" }, { "title":"本地化检查清单", "titleFriendly":"", "summary":"把握 Android 和 Google Play 所提供的全世界观众的优势。阅读此清单以获得如何将产品送到世界各地的市场的概述。", "url":"intl/zh-cn/distribute/tools/localization-checklist.html", "group":"", "keywords": [], "tags": [], "image":"distribute/images/localization-checklist.jpg", "lang":"zh-cn", "type":"distribute" }, { "title":"Build Better Apps", "titleFriendly":"", "summary":"Get actionable insights to optimize your app and learn what works best for your business.", "url":"distribute/analyze/build-better-apps.html", "group":"", "keywords": ["analytics","user behavior"], "tags": ["analytics","userbehavior"], "image":"distribute/analyze/images/flows.png", "lang":"en", "type":"distribute" }, { "title":"Act Across Google Services", "titleFriendly":"", "summary":"Find your Analytics reports where you need them within Google Play, AdMob, and AdWords.", "url":"distribute/analyze/google-services.html", "group":"", "keywords": ["analytics","user behavior"], "tags": ["analytics","userbehavior"], "image":"distribute/analyze/images/admob_integration.png", "lang":"en", "type":"distribute" }, { "title":"Get Started with Analytics", "titleFriendly":"", "summary":"Unlock the power of Analytics by choosing the implementation that works best for your app.", "url":"distribute/analyze/start.html", "group":"", "keywords": ["analytics","user behavior"], "tags": ["analytics","userbehavior"], "image":"distribute/images/gp-analytics-logo.jpg", "lang":"en", "type":"distribute" }, { "title":"Analyze", "titleFriendly":"", "summary":"Understanding what your users do inside your app is the key to engaging and monetizing them.", "url":"distribute/analyze/index.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"distribute" }, { "title":"Understand the Value of Your Users", "titleFriendly":"", "summary":"Understand what makes users come back to your app and improve retention.", "url":"distribute/analyze/understand-user-value.html", "group":"", "keywords": ["analytics","user behavior"], "tags": ["analytics","userbehavior"], "image":"distribute/analyze/images/active_users.png", "lang":"en", "type":"distribute" }, { "title":"Improve Your Marketing ROI", "titleFriendly":"", "summary":"Combine the power of Analytics with other data sources to understand the performance of each of your marketing channels.", "url":"distribute/analyze/improve-roi.html", "group":"", "keywords": ["analytics","user behavior"], "tags": ["analytics","userbehavior"], "image":"distribute/analyze/images/adwords_reporting.png", "lang":"en", "type":"distribute" }, { "title":"Measure What Matters", "titleFriendly":"", "summary":"Customize Analytics to meet your business needs and get meaningful data on your app's performance.", "url":"distribute/analyze/measure.html", "group":"", "keywords": ["analytics","user behavior"], "tags": ["analytics","userbehavior"], "image":"distribute/analyze/images/realtime.png", "lang":"en", "type":"distribute" }, { "title":"Optimize Your App", "titleFriendly":"", "summary":"A look at how to get the most visibility and the highest ratings possible for your app or game. Optimizing the quality of your apps is a key strategy.", "url":"distribute/essentials/optimizing-your-app.html", "group":"", "keywords": [], "tags": [], "image":"distribute/images/gp-optimize-card.jpg", "lang":"en", "type":"distribute" }, { "title":"Essentials for a Successful App", "titleFriendly":"", "summary":"A focus on quality should be part of your entire app delivery process: from initial concept through app and UI design, coding and testing and onto a process of monitoring feedback and making improvement after launch.…", "url":"distribute/essentials/index.html", "group":"", "keywords": ["guidelines","tablet","quality"], "tags": ["landing","quality"], "image":"", "lang":"en", "type":"distribute" }, { "title":"App Developer Best Practices", "titleFriendly":"", "summary":"Essential tips for launching successful apps in Google Play.", "url":"distribute/essentials/best-practices/apps.html", "group":"", "keywords": [], "tags": [], "image":"distribute/images/gp-app-practices.png", "lang":"en", "type":"distribute" }, { "title":"Game Developer Best Practices", "titleFriendly":"", "summary":"Essential tips for launching successful games in Google Play.", "url":"distribute/essentials/best-practices/games.html", "group":"", "keywords": [], "tags": [], "image":"distribute/images/gp-games-practices.png", "lang":"en", "type":"distribute" }, { "title":"Auto App Quality", "titleFriendly":"", "summary":"Auto apps integrate with the vehicle's input controls and display and minimize driver distraction to create a great experience.", "url":"distribute/essentials/quality/auto.html", "group":"", "keywords": [], "tags": [], "image":"distribute/images/gp-auto-quality.png", "lang":"en", "type":"distribute" }, { "title":"Wear App Quality", "titleFriendly":"", "summary":"Wearables are smaller devices that are built for glanceability and require unique apps to provide just the right information at the the right time.", "url":"distribute/essentials/quality/wear.html", "group":"", "keywords": ["wear","wearables","quality","guidelines"], "tags": ["wear","wearables","quality","guidelines"], "image":"distribute/images/gp-wear-quality.png", "lang":"en", "type":"distribute" }, { "title":"Tablet App Quality", "titleFriendly":"", "summary":"Tablets are a fast-growing part of the Android installed base that offers new opportunities for your apps.", "url":"distribute/essentials/quality/tablets.html", "group":"", "keywords": [], "tags": [], "image":"distribute/images/tablet-guidelines-color.jpg", "lang":"en", "type":"distribute" }, { "title":"TV App Quality", "titleFriendly":"", "summary":"TV is a growing segment of Android devices that requires specific attention to app design and functionality in order to create a great experience.", "url":"distribute/essentials/quality/tv.html", "group":"", "keywords": [], "tags": [], "image":"distribute/images/gp-tv-quality.png", "lang":"en", "type":"distribute" }, { "title":"Core App Quality", "titleFriendly":"", "summary":"App quality directly influences the long-term success of your app—in terms of installs, user rating and reviews, engagement, and user retention.", "url":"distribute/essentials/quality/core.html", "group":"", "keywords": [], "tags": [], "image":"distribute/images/core-quality-guidelines.jpg", "lang":"en", "type":"distribute" }, { "title":"Distribute Your Apps", "titleFriendly":"", "summary":"The most visited store in the world for Android apps. Cloud-connected and always synced, it's never been easier for users to find and download your apps.", "url":"distribute/index.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"distribute" }, { "title":"Video Resources", "titleFriendly":"", "summary":"Watch video resources from Google and successful educational developers.", "url":"distribute/googleplay/edu/videos.html", "group":"", "keywords": ["education"], "tags": ["education"], "image":"http://i1.ytimg.com/vi/vzvpcEffvaE/maxresdefault.jpg", "lang":"en", "type":"distribute" }, { "title":"Google Play for Education", "titleFriendly":"", "summary":"Distribute your educational app directly to educators and schools.", "url":"distribute/googleplay/edu/about.html", "group":"", "keywords": ["education"], "tags": ["gpfe","googleplay","distribution","edu"], "image":"distribute/images/about-play-education.jpg", "lang":"en", "type":"distribute" }, { "title":"Publish Education Apps", "titleFriendly":"", "summary":"Join Google Play for Education in just a few simple steps.", "url":"distribute/googleplay/edu/start.html", "group":"", "keywords": ["education","addendum"], "tags": ["education","guidelines","quality"], "image":"distribute/images/play-education.jpg", "lang":"en", "type":"distribute" }, { "title":"Finding Success on Google Play", "titleFriendly":"", "summary":"A guide to help you find success with your app or game business on Google Play.", "url":"distribute/googleplay/guide.html", "group":"", "keywords": ["google play","business","monetize","engagement"], "tags": ["distribute","bestpractices"], "image":"distribute/images/play_dev_guide.png", "lang":"en", "type":"distribute" }, { "title":"The Google Play Opportunity", "titleFriendly":"", "summary":"Billons of downloads a month and growing. Get your apps in front of users at Google's scale.", "url":"distribute/googleplay/about.html", "group":"", "keywords": ["play","apps","distributing","publishing"], "tags": ["visibility","growth","distributing"], "image":"distribute/images/about-play.jpg", "lang":"en", "type":"distribute" }, { "title":"Get Started with Publishing", "titleFriendly":"", "summary":"Start publishing on Google Play in minutes by registering for a developer account.", "url":"distribute/googleplay/start.html", "group":"", "keywords": ["google play","publishing","register","signup"], "tags": ["publishing"], "image":"distribute/images/getting-started.jpg", "lang":"en", "type":"distribute" }, { "title":"Google Play", "titleFriendly":"", "summary":"The premier store for distributing Android apps and games, with global reach and tools to help you gain traction in the marketplace.…", "url":"distribute/googleplay/index.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"distribute" }, { "title":"Distributing to Android Wear", "titleFriendly":"", "summary":"Distribute your apps, games, and content to Android Wear.", "url":"distribute/googleplay/wear.html", "group":"", "keywords": ["wear","publish","googleplay"], "tags": ["wear","publish","quality"], "image":"design/media/wear/ContextualExample.008_2x.png", "lang":"en", "type":"distribute" }, { "title":"Developer Console", "titleFriendly":"", "summary":"Learn about the Developer Console, your home for app publishing on Google Play.", "url":"distribute/googleplay/developer-console.html", "group":"", "keywords": [], "tags": [], "image":"distribute/images/developer-console.jpg", "lang":"en", "type":"distribute" }, { "title":"Distributing to Android TV", "titleFriendly":"", "summary":"Distribute your apps, games, and content to Android TV.", "url":"distribute/googleplay/tv.html", "group":"", "keywords": ["tv","publish","googleplay"], "tags": ["tv","publish","quality"], "image":"design/tv/images/atv-home.jpg", "lang":"en", "type":"distribute" }, { "title":"Use Rich Notifications to Keep Users Informed", "titleFriendly":"", "summary":"Use Android's notifications to keep users in touch with your content and services — even when the app is not in use.", "url":"distribute/engage/notifications.html", "group":"", "keywords": [""], "tags": [""], "image":"design/media/notifications_pattern_anatomy.png", "lang":"en", "type":"distribute" }, { "title":"Deep Link to Bring Users Back", "titleFriendly":"", "summary":"Use deep links to bring your users into your apps from social posts, search, or ads.", "url":"distribute/engage/deep-linking.html", "group":"", "keywords": ["app indexing","google+ signin"], "tags": ["appindexing","google+signin"], "image":"images/gp-listing-4.jpg", "lang":"en", "type":"distribute" }, { "title":"Engage & Retain Users", "titleFriendly":"", "summary":"Engaging and retaining active users is the key to success. Here are some resources to help you build an active user base.", "url":"distribute/engage/index.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"distribute" }, { "title":"Integrate Google Cloud Messaging", "titleFriendly":"", "summary":"Keep your users in sync with your latest content by delivering lightweight messages over Google's infrastructure.", "url":"distribute/engage/gcm.html", "group":"", "keywords": ["gcm"], "tags": ["gcm"], "image":"images/gcm/gcm-logo.png", "lang":"en", "type":"distribute" }, { "title":"Encourage Competition", "titleFriendly":"", "summary":" Bring out the competitor in your users with cloud save, multiplayer game play, and more.", "url":"distribute/engage/game-services.html", "group":"", "keywords": ["games"], "tags": ["games"], "image":"images/google/gps-play_games_logo.png", "lang":"en", "type":"distribute" }, { "title":"Update Your Apps Regularly", "titleFriendly":"", "summary":"Keeping your content fresh gives users a reason to come back.", "url":"distribute/engage/app-updates.html", "group":"", "keywords": ["updates"], "tags": ["updates"], "image":"images/gp-your-user-0.jpg", "lang":"en", "type":"distribute" }, { "title":"Make Signing In Easy", "titleFriendly":"", "summary":"Increase conversion rates while helping users minimize typing by letting users sign in with Google+.", "url":"distribute/engage/easy-signin.html", "group":"", "keywords": ["google+"], "tags": ["google+"], "image":"images/google/gps-googleplus.png", "lang":"en", "type":"distribute" }, { "title":"Delight Users with Videos", "titleFriendly":"", "summary":"Videos are one of the most effective ways to get users excited about your apps. ", "url":"distribute/engage/video.html", "group":"", "keywords": ["engagement"], "tags": ["engagement"], "image":"images/gp-engage-smule.jpg", "lang":"en", "type":"distribute" }, { "title":"Engage Your Community", "titleFriendly":"", "summary":"Building a community has many benefits, including improving your app and bringing users back to it.", "url":"distribute/engage/community.html", "group":"", "keywords": [], "tags": [], "image":"images/gp-engage-9.jpg", "lang":"en", "type":"distribute" }, { "title":"Understand User Behavior", "titleFriendly":"", "summary":"Use Google Analytics to learn what your users like and what keeps them coming back.", "url":"distribute/engage/analytics.html", "group":"", "keywords": ["analytics","user behavior"], "tags": ["analytics","userbehavior"], "image":"images/gp-analytics.jpg", "lang":"en", "type":"distribute" }, { "title":"Build Useful Widgets", "titleFriendly":"", "summary":"Use home screen widgets to remind users about important information in your apps and games, even when your apps are closed.", "url":"distribute/engage/widgets.html", "group":"", "keywords": [""], "tags": [""], "image":"images/gp-engage-0.jpg", "lang":"en", "type":"distribute" }, { "title":"Promote Your App with Ads", "titleFriendly":"", "summary":"Promote your app through AdMob, AdWords, and YouTube to find new users at the right moment.", "url":"distribute/users/promote-with-ads.html", "group":"", "keywords": ["users","ads","analytics"], "tags": ["users","ads","analytics"], "image":"images/gp-ads-console.jpg", "lang":"en", "type":"distribute" }, { "title":"Know Your User", "titleFriendly":"", "summary":"It\'s essential to understand your users and listen to their input. Here are some ideas.", "url":"distribute/users/know-your-user.html", "group":"", "keywords": ["users","growth","global"], "tags": ["users","growth","global"], "image":"distribute/images/know-your-user.jpg", "lang":"en", "type":"distribute" }, { "title":"Get Users", "titleFriendly":"", "summary":"You’ve published your app, now how do you acquire users? Every app and game is different, but there are some common themes from successful Google Play developers. These best practices are critical to your app or game’s success.…", "url":"distribute/users/index.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"distribute" }, { "title":"Build Community", "titleFriendly":"", "summary":"Build a loyal following with great support and communication.", "url":"distribute/users/build-community.html", "group":"", "keywords": ["users","growth","community"], "tags": ["users","growth","community"], "image":"images/gp-community-0.png", "lang":"en", "type":"distribute" }, { "title":"Expand Into New Markets", "titleFriendly":"", "summary":"Tap fast-growing markets in Japan, Korea, India, Brazil, and many other countries around the world.", "url":"distribute/users/expand-to-new-markets.html", "group":"", "keywords": ["users","growth","global"], "tags": ["users","growth","global"], "image":"distribute/images/expand-into-new-markets.jpg", "lang":"en", "type":"distribute" }, { "title":"Create a Great Listing", "titleFriendly":"", "summary":"Make your listing page compelling and integrate it into your marketing campaigns.", "url":"distribute/users/your-listing.html", "group":"", "keywords": ["listing","google play","users","growth"], "tags": ["listing","googleplay","users","growth"], "image":"distribute/images/create-listing.jpg", "lang":"en", "type":"distribute" }, { "title":"Build Buzz", "titleFriendly":"", "summary":"Generate interest and demand for your app. Here are some ways to help users find, download, and install your apps.", "url":"distribute/users/build-buzz.html", "group":"", "keywords": ["users","growth","promotion"], "tags": ["users","growth","promotion"], "image":"distribute/images/build-buzz.jpg", "lang":"en", "type":"distribute" }, { "title":"Monetize with Ads", "titleFriendly":"", "summary":"Ads are a quick and easy way to incorporate a monetization option into both your free and paid apps.", "url":"distribute/monetize/ads.html", "group":"", "keywords": ["monetizing","free","freemium","ads"], "tags": ["monetizing","free","freemium","ads"], "image":"distribute/images/advertising.png", "lang":"en", "type":"distribute" }, { "title":"Convenient, Frictionless Purchasing", "titleFriendly":"", "summary":"Users can purchase instantly with a choice of payment methods.", "url":"distribute/monetize/payments.html", "group":"", "keywords": ["google play","payments","gift card"], "tags": ["googleplay","payments","giftcard"], "image":"distribute/images/payment-method.jpg", "lang":"en", "type":"distribute" }, { "title":"Monetize", "titleFriendly":"", "summary":"There are many ways to make money with your apps on Google Play, and we offer a variety of tools to make it easy. Take advantage of Google Play’s phenomenal growth by using one or more of the business models available. To get started, set up your Merchant…", "url":"distribute/monetize/index.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"distribute" }, { "title":"Monetize Premium Apps", "titleFriendly":"", "summary":"Charging users to download your apps is a simple, convenient monetization model.", "url":"distribute/monetize/premium.html", "group":"", "keywords": ["monetizing","paid"], "tags": ["monetizing","paid"], "image":"distribute/images/premium.jpg", "lang":"en", "type":"distribute" }, { "title":"E-commerce", "titleFriendly":"", "summary":"With Google Wallet Instant Buy, you've the added flexibility of selling physical goods and services, such as clothing or movie tickets, through your apps using Instant Buy for Android (US Only) . You can use this option where your app is the store-front…", "url":"distribute/monetize/ecommerce.html", "group":"", "keywords": ["monetizing","physical goods","wallet"], "tags": ["monetizing","physicalgoods","wallet"], "image":"distribute/images/ecommerce.jpg", "lang":"en", "type":"distribute" }, { "title":"Monetize with Subscriptions", "titleFriendly":"", "summary":"Sell subscriptions to your products to create continuing revenue streams.", "url":"distribute/monetize/subscriptions.html", "group":"", "keywords": ["in-app","iap","monetizing","free","trials"], "tags": ["in-app","iap","monetizing","free","trials"], "image":"distribute/images/subscription.jpg", "lang":"en", "type":"distribute" }, { "title":"Monetize Freemium Apps", "titleFriendly":"", "summary":"Use Google Play In-app Billing and other tools to monetize your free apps.", "url":"distribute/monetize/freemium.html", "group":"", "keywords": ["in-app","billing","iap","monetizing"], "tags": ["in-app","billing","iap","monetizing"], "image":"distribute/images/freemium.jpg", "lang":"en", "type":"distribute" }, { "title":"Brand Guidelines", "titleFriendly":"", "summary":"Guidelines and downloads for the Android and Google Play brands.", "url":"distribute/tools/promote/brand.html", "group":"", "keywords": ["brand","bugdroid","assets"], "tags": ["brand","bugdroid","assets"], "image":"assets/images/resource-card-default-android.jpg", "lang":"en", "type":"distribute" }, { "title":"Google Play Badge Generator", "titleFriendly":"", "summary":"Build badges for your app in just a few clicks, or download hi-res badge assets localized for a variety of languages.", "url":"distribute/tools/promote/badges.html", "group":"", "keywords": ["badge","google play"], "tags": ["disttools","promoting","deviceart","marketing","googleplay"], "image":"images/gp-badges-set.png", "lang":"en", "type":"distribute" }, { "title":"Google Play Badge Files", "titleFriendly":"", "summary":"Download hi-res assets for localized Google Play badges.", "url":"distribute/tools/promote/badge-files.html", "group":"", "keywords": ["badge","google play"], "tags": ["badge","googleplay"], "image":"images/gp-badges-set.png", "lang":"en", "type":"distribute" }, { "title":"Device Art Generator", "titleFriendly":"", "summary":"Drag and drop screenshots of your app into real device artwork, for better looking promotional images and improved visual context.", "url":"distribute/tools/promote/device-art.html", "group":"", "keywords": ["device","deviceart","nexus","assets"], "tags": ["disttools","promoting","deviceart","marketing"], "image":"images/device-art-ex-crop.jpg", "lang":"en", "type":"distribute" }, { "title":"Linking to Your Products", "titleFriendly":"", "summary":"Learn how to build links that take users to your published apps in Google Play from browse or search.", "url":"distribute/tools/promote/linking.html", "group":"", "keywords": ["linking"], "tags": ["promoting"], "image":"images/gp-linking-ex-crop.png", "lang":"en", "type":"distribute" }, { "title":"Launch Checklist", "titleFriendly":"", "summary":"Essential overview of the complete process of delivering your app to users. Read this checklist early in development to help you plan for a successful launch on Google Play.", "url":"distribute/tools/launch-checklist.html", "group":"", "keywords": ["launch","publishing","google play"], "tags": ["localizing","publishing","disttools"], "image":"distribute/images/launch-checklist.jpg", "lang":"en", "type":"distribute" }, { "title":"Tools & Reference", "titleFriendly":"", "summary":"Here you’ll find resources to help you publish your apps and games, acquire users, and monetize your investment.…", "url":"distribute/tools/index.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"distribute" }, { "title":"Alternative Distribution Options", "titleFriendly":"", "summary":"With Android you can distribute apps to users in any way you want, using any store or distribution approach.", "url":"distribute/tools/open-distribution.html", "group":"", "keywords": [], "tags": [], "image":"distribute/images/alt-distribution.jpg", "lang":"en", "type":"distribute" }, { "title":"Localization Checklist", "titleFriendly":"", "summary":"Take advantage of the worldwide audience offered by Android and Google Play. Read this checklist to get an overview of how to deliver your product to markets around the world.", "url":"distribute/tools/localization-checklist.html", "group":"", "keywords": ["local","l10n","translation","language"], "tags": ["localizing","publishing","disttools"], "image":"distribute/images/localization-checklist.jpg", "lang":"en", "type":"distribute" }, { "title":"Developer Stories", "titleFriendly":"", "summary":"Android developers, their apps, and their successes with Android and Google Play.", "url":"distribute/stories/index.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"distribute" }, { "title":"Developer Stories: Google Play Game Services", "titleFriendly":"", "summary":"How game studios are using Google Play game services to deliver new gaming experiences for their users.", "url":"distribute/stories/games.html", "group":"", "keywords": [], "tags": ["googleplay","story","stories","games","global"], "image":"images/distribute/glu-ew-gpgames.jpg", "lang":"en", "type":"distribute" }, { "title":"Developer Stories: Localization in Google Play", "titleFriendly":"", "summary":"Hear from Android developers who have successfully used the Google Play App Translation Service.", "url":"distribute/stories/localization.html", "group":"", "keywords": ["stories","video","case study"], "tags": ["googleplay","developerstory","localization","global"], "image":"images/distribute/zombie-ragdoll-n5-land.jpg", "lang":"en", "type":"distribute" }, { "title":"Developer Stories: The Opportunity of Android Tablets", "titleFriendly":"", "summary":"More" and more, developers are investing in a full tablet experience for their apps and are seeing those investments pay off big. The increased screen area on tablets opens up a world of possibilities, allowing for more engagement with the user —…", "url":"distribute/stories/tablets.html", "group":"", "keywords": [], "tags": ["googleplay","developerstory","journal","tablets","pure"], "image":"images/distribute/rememberthemilk.png", "lang":"en", "type":"distribute" } ]; var GOOGLE_RESOURCES = [ { "title":"应用内结算 API", "titleFriendly":"", "summary":"借助应用内结算 API 第 3 版,您可以更轻松地将应用内结算功能集成到自己的应用中。此版本包括下列功能:经过改进的同步购买流程、可让您轻松跟踪消耗型商品所有权的 API 以及在本地缓存应用内购买数据。 您可以使用 Google Play 开发者控制台来定义您的商品,包括商品类型、SKU、价格和说明等等。有关详情,请参阅 管理应用内结算 。API 第 3 版支持两种商品类型,即托管的应用内商品和订阅。 托管的应用内商品是指由 Google Play 跟踪和管理其所有权信息的商品。当用户购买托管的应用内商品时…", "url":"intl/zh-cn/google/play/billing/api.html", "group":"", "keywords": [], "tags": [], "image":"images/in-app-billing/v3/iab_v3_purchase_flow.png", "lang":"zh-cn", "type":"google" }, { "title":"Google Play 应用内结算", "titleFriendly":"", "summary":"应用内计费可让你以一次性的购买或订阅方式去销售数码内容。", "url":"intl/zh-cn/google/play/billing/index.html", "group":"", "keywords": [], "tags": [], "image":"images/play_dev.jpg", "lang":"zh-cn", "type":"google" }, { "title":"测试应用内结算", "titleFriendly":"", "summary":"Google Play 开发者控制台提供了一些帮助你测试应用内结算实施情况的工具: 要测试应用的应用内结算,必须将该应用安装在 Android 设备上。你不能使用 Android 模拟器测试应用内结算。用于测试的设备必须运行标准的 Android 1.6 或更高版本的平台(API 级别 4 或更高级别),并且要安装最新版本的 Google Play 应用。如果设备运行的不是最新的 Google Play 应用,你的应用将不能向 Google Play 发送应用内结算请求。有关如何设置设备以便用于开发…", "url":"intl/zh-cn/google/play/billing/billing_testing.html", "group":"", "keywords": [], "tags": [], "image":"images/billing_test_flow.png", "lang":"zh-cn", "type":"google" }, { "title":"安全性和设计", "titleFriendly":"", "summary":"在设计应用内结算的实施时,请务必遵循本文中介绍的安全性和设计指南。这些指南是推荐的最佳做法,适用于所有使用 Google Play 应用内结算服务的开发者。 如果可能的话,你应该在远程服务器上(而不是设备上)执行签名验证。在服务器上实施验证过程,可有效防止攻击者通过对 .apk 文件进行反向工程来破坏验证过程。如果你将安全性流程放置到远程服务器上,请确保设备服务器的握手过程是安全的。 为防止恶意用户重新分发你未锁定的内容,请不要将这种内容放入你的 .apk 文件中,而是执行以下操作之一: 当你通过远程服务器或实时服务发送内容时…", "url":"intl/zh-cn/google/play/billing/billing_best_practices.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"zh-cn", "type":"google" }, { "title":"应用内结算概述", "titleFriendly":"", "summary":"本文将介绍您需了解的应用内结算基本组件和功能,以便您将应用内结算功能添加到应用中。 您的应用会通过相应 API (由设备上安装的 Google Play 应用提供)来访问应用内结算服务。然后,Google Play 应用会在您的应用和 Google Play 服务器之间传送结算请求和响应。实际上,您的应用从不直接与 Google Play 服务器通信,而是通过进程间通信 (IPC) 向 Google Play 应用发送结算请求并接收 Google Play 应用发来的响应。此外,您的应用也不管理其与…", "url":"intl/zh-cn/google/play/billing/billing_overview.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"zh-cn", "type":"google" }, { "title":"管理应用内结算", "titleFriendly":"", "summary":"如果您使用应用内结算,您就无需处理任何财务交易。不过,您仍需执行一些管理任务,包括在 Google Play 开发者控制台上创建和维护您的商品列表、注册测试帐户以及在需要时处理退款。 您必须有 Google Play 发布商帐户才能注册测试帐户。而且,您必须有 Google 电子钱包商家帐户才能创建商品列表以及向用户发放退款。如果您已有 Google Play 发布商帐户,则可以使用您的现有帐户,无需注册新帐户就能使用应用内结算。 如果您没有发布商帐户,可以在 Google Play 开发者控制台…", "url":"intl/zh-cn/google/play/billing/billing_admin.html", "group":"", "keywords": [], "tags": [], "image":"images/in-app-billing/billing_product_list.png", "lang":"zh-cn", "type":"google" }, { "title":"Google Cloud Save", "titleFriendly":"", "summary":"Google Cloud Save is a service that enables per-user data storage and sync in your apps with no backend programming required. Google Cloud Save stores its data in Google Cloud Datastore, a fully managed, schemaless database for storing non-relational …", "url":"google/gcs/index.html", "group":"", "keywords": ["gcs"], "tags": ["gcs"], "image":"images/google/gcs.png", "lang":"en", "type":"google" }, { "title":"Sign Up for Google Cloud Save", "titleFriendly":"", "summary":"Sign up to be a trial partner for Google Cloud Save.…", "url":"google/gcs/gcs-signup.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"google" }, { "title":"APK Expansion Files", "titleFriendly":"", "summary":"If your app needs more than the 50MB APK max, use free APK expansion files from Google Play.", "url":"google/play/expansion-files.html", "group":"", "keywords": ["apk size","apk max","large assets"], "tags": ["apksize","apkmax","largeassets"], "image":"", "lang":"en", "type":"google" }, { "title":"Filters on Google Play", "titleFriendly":"", "summary":"When a user searches or browses for apps to download on Google Play, the results are filtered based on which applications are compatible with the device. For example, if an app requires a camera, Google Play would not show the app to devices that do not…", "url":"google/play/filters.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"google" }, { "title":"Google Play Distribution", "titleFriendly":"", "summary":"Google Play allows you to manage your app distribution with features that let you control which users can download your app as well as deliver separate versions of your app based on certain characteristics like platform version. Make sure your app gets…", "url":"google/play/dist.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"google" }, { "title":"Multiple APK Support", "titleFriendly":"", "summary":"Multiple APK support is a feature on Google Play that allows you to publish different APKs for your application that are each targeted to different device configurations. Each APK is a complete and independent version of your application, but they share…", "url":"google/play/publishing/multiple-apks.html", "group":"", "keywords": [], "tags": [], "image":"images/market/version-codes.png", "lang":"en", "type":"google" }, { "title":"In-app Billing API", "titleFriendly":"", "summary":"The In-app Billing Version 3 API makes it easier for you to integrate In-app Billing into your applications. The features in this version include improved synchronous purchase flow, APIs to let you easily track ownership of consumable goods, and local…", "url":"google/play/billing/api.html", "group":"", "keywords": ["billing","inapp","iap"], "tags": ["billing","inapp","iap"], "image":"images/in-app-billing/v3/iab_v3_purchase_flow.png", "lang":"en", "type":"google" }, { "title":"Google Play Developer API", "titleFriendly":"", "summary":"The Google Play Developer API is a REST-based web service that allows you to perform publishing and app-management tasks. You can use this API to integrate your publishing operations with your release-management process. Not all developers will need to…", "url":"google/play/billing/gp-purchase-status-api.html", "group":"", "keywords": ["in-app billing","google play","inapp billing","in app billing","iab","billing","publishing"], "tags": ["in-appbilling","googleplay","inappbilling","inappbilling","iab","billing","publishing"], "image":"", "lang":"en", "type":"google" }, { "title":"In-app Billing Reference", "titleFriendly":"", "summary":"This documentation provides technical reference information for using the In-app Billing Version 3 API. The following table lists all of the server response codes that are sent from Google Play to your application. Google Play sends the response code …", "url":"google/play/billing/billing_reference.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"google" }, { "title":"Google Play In-app Billing", "titleFriendly":"", "summary":"In-app Billing lets you sell digital content as one-time purchases or subscriptions.", "url":"google/play/billing/index.html", "group":"", "keywords": ["billing","inapp","iap"], "tags": ["monetizing","inappbilling","subscriptions"], "image":"images/play_dev.jpg", "lang":"en", "type":"google" }, { "title":"Testing In-app Billing", "titleFriendly":"", "summary":"The Google Play Developer Console provides several tools that help you test your In-app Billing implementation: To test In-app Billing in an application you must install the application on an Android-powered device. You cannot use the Android emulator…", "url":"google/play/billing/billing_testing.html", "group":"", "keywords": ["inapp","billing","iap"], "tags": ["inapp","billing","iap"], "image":"images/billing_test_flow.png", "lang":"en", "type":"google" }, { "title":"Security and Design", "titleFriendly":"", "summary":"As you design your In-app Billing implementation, be sure to follow the security and design guidelines that are discussed in this document. These guidelines are recommended best practices for anyone who is using Google Play's In-app Billing service…", "url":"google/play/billing/billing_best_practices.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"google" }, { "title":"Implementing In-app Billing", "titleFriendly":"", "summary":"In-app Billing on Google Play provides a straightforward, simple interface for sending In-app Billing requests and managing In-app Billing transactions using Google Play. The information below covers the basics of how to make calls from your application…", "url":"google/play/billing/billing_integrate.html", "group":"", "keywords": ["inapp","billing","iap"], "tags": ["inapp","billing","iap"], "image":"", "lang":"en", "type":"google" }, { "title":"In-app Billing Overview", "titleFriendly":"", "summary":"This documentation describes the fundamental In-app Billing components and features that you need to understand in order to add In-app Billing features into your application. Your application accesses the In-app Billing service using an API that is exposed…", "url":"google/play/billing/billing_overview.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"google" }, { "title":"Administering In-app Billing", "titleFriendly":"", "summary":"In-app billing frees you from processing financial transactions, but you still need to perform a few administrative tasks, including setting up and maintaining your product list on the Google Play Developer Console, registering test accounts, and handling…", "url":"google/play/billing/billing_admin.html", "group":"", "keywords": [], "tags": [], "image":"images/in-app-billing/billing_product_list.png", "lang":"en", "type":"google" }, { "title":"In-App Subscriptions", "titleFriendly":"", "summary":"Subscriptions let you sell content or features in your app with automated, recurring billing.", "url":"google/play/billing/billing_subscriptions.html", "group":"", "keywords": ["subscriptions","billing","inapp","iap"], "tags": ["monetization","inappbilling","subscriptions"], "image":"images/play_dev.jpg", "lang":"en", "type":"google" }, { "title":"Setting Up for Licensing", "titleFriendly":"", "summary":"Before you start adding license verification to your application, you need to set up your Google Play publishing account, your development environment, and any test accounts required to verify your implementation. If you don't already have a publisher…", "url":"google/play/licensing/setting-up.html", "group":"", "keywords": [], "tags": [], "image":"images/licensing_public_key.png", "lang":"en", "type":"google" }, { "title":"Licensing Overview", "titleFriendly":"", "summary":"Google Play Licensing is a network-based service that lets an application query a trusted Google Play licensing server to determine whether the application is licensed to the current device user. The licensing service is based on the capability of the…", "url":"google/play/licensing/overview.html", "group":"", "keywords": [], "tags": [], "image":"images/licensing_arch.png", "lang":"en", "type":"google" }, { "title":"App Licensing", "titleFriendly":"", "summary":"Information on using the licensing feature of Google Play to protect your apps.", "url":"google/play/licensing/index.html", "group":"", "keywords": [], "tags": ["licensing","drm"], "image":"assets/images/resource-card-default-android.jpg", "lang":"en", "type":"google" }, { "title":"Licensing Reference", "titleFriendly":"", "summary":"Table 1 lists all of the source files in the License Verification Library (LVL) available through the Android SDK. All of the files are part of the com.android.vending.licensing package. Table 2 lists all of the license response codes supported by the…", "url":"google/play/licensing/licensing-reference.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"google" }, { "title":"Adding Licensing to Your App", "titleFriendly":"", "summary":"After you've set up a publisher account and development environment (see Setting Up for Licensing ), you are ready to add license verification to your app with the License Verification Library (LVL). Adding license verification with the LVL involves…", "url":"google/play/licensing/adding-licensing.html", "group":"", "keywords": [], "tags": [], "image":"images/licensing_flow.png", "lang":"en", "type":"google" }, { "title":"Google Services", "titleFriendly":"", "summary":"Google offers a variety of services that help you build new revenue streams, manage app distribution, track app usage, and enhance your app with features such as maps, sign-in, and cloud messaging.…", "url":"google/index.html", "group":"", "keywords": [], "tags": [], "image":"images/google/google-services.png", "lang":"en", "type":"google" }, { "title":"Getting Started", "titleFriendly":"", "summary":"This document tells you how to get started setting up a Google Cloud Messaging (GCM) implementation. Before you begin, make sure to set up the Google Play Services SDK . You need this SDK to use the GCM APIs . To create a Google API project: Once the …", "url":"google/gcm/gs.html", "group":"", "keywords": ["cloud","push","messaging"], "tags": ["cloud","push","messaging"], "image":"", "lang":"en", "type":"google" }, { "title":"User Notifications", "titleFriendly":"", "summary":"With user notifications, 3rd-party app servers can send a single message to multiple instance of an app running on devices owned by a single user. This feature is called user notifications . User notifications make it possible for every app instance that…", "url":"google/gcm/notifications.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"google" }, { "title":"GCM HTTP Connection Server", "titleFriendly":"", "summary":"This document describes the Google Cloud Messaging (GCM) HTTP connection server. Connection servers are the Google-provided servers that take messages from the 3rd-party application server and sending them to the device. See Implementing GCM Server for…", "url":"google/gcm/http.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"google" }, { "title":"Migration", "titleFriendly":"", "summary":"Android Cloud to Device Messaging (C2DM) is deprecated. The C2DM service will continue to be maintained in the short term, but C2DM will accept no new users, and it will grant no new quotas. C2DM developers are strongly encouraged to move to Google Cloud…", "url":"google/gcm/c2dm.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"google" }, { "title":"Google Cloud Messaging for Android", "titleFriendly":"", "summary":"Google Cloud Messaging (GCM) for Android is a service that allows you to send data from your server to your users' Android-powered device, and also to receive messages from devices on the same connection. The GCM service handles all aspects of queueing…", "url":"google/gcm/index.html", "group":"", "keywords": ["gcm"], "tags": ["gcm"], "image":"images/gcm/gcm-logo.png", "lang":"en", "type":"google" }, { "title":"Implementing GCM Server", "titleFriendly":"", "summary":"The server side of Google Cloud Messaging (GCM) consists of 2 components: Here are the basic steps you follow to implement your 3rd-party app server: A full GCM implementation requires both a client implementation and a server implementation. For more…", "url":"google/gcm/server.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"google" }, { "title":"Overview", "titleFriendly":"", "summary":"Google Cloud Messaging (GCM) for Android is a free service that helps developers send data from servers to their Android applications on Android devices, and upstream messages from the user's device back to the cloud. This could be a lightweight message…", "url":"google/gcm/gcm.html", "group":"", "keywords": [], "tags": [], "image":"images/gcm/GCM-arch.png", "lang":"en", "type":"google" }, { "title":"Using the GCM Helper Libraries", "titleFriendly":"", "summary":"The information in this document has been superseded by GCM Server and GCM Client . Please use the GoogleCloudMessaging API instead of the GCM client helper library. The GCM server helper library is still valid. This document describes how to write an…", "url":"google/gcm/helper.html", "group":"", "keywords": ["cloud","push","messaging"], "tags": ["cloud","push","messaging"], "image":"", "lang":"en", "type":"google" }, { "title":"GCM Demo Application", "titleFriendly":"", "summary":"The information in this document has been superseded by GCM Server and GCM Client . Please use the GoogleCloudMessaging API instead of the GCM client helper library. The GCM server helper library is still valid. The Google Cloud Messaging (GCM) Demo demonstrates…", "url":"google/gcm/demo.html", "group":"", "keywords": [], "tags": [], "image":"images/gcm/gcm-avd-home-auto-reg.png", "lang":"en", "type":"google" }, { "title":"GCM Cloud Connection Server (XMPP)", "titleFriendly":"", "summary":"The Google Cloud Messaging (GCM) Cloud Connection Server (CCS) is an XMPP endpoint that provides a persistent, asynchronous, bidirectional connection to Google servers. The connection can be used to send and receive messages between your server and your…", "url":"google/gcm/ccs.html", "group":"", "keywords": [], "tags": [], "image":"images/gcm/CCS-ack.png", "lang":"en", "type":"google" }, { "title":"Implementing GCM Client", "titleFriendly":"", "summary":"A Google Cloud Messaging (GCM) client is a GCM-enabled app that runs on an Android device. To write your client code, we recommend that you use the GCM APIs . The client helper library that was offered in previous versions of GCM still works, but it has…", "url":"google/gcm/client.html", "group":"", "keywords": ["cloud","push","messaging"], "tags": ["cloud","push","messaging"], "image":"", "lang":"en", "type":"google" }, { "title":"GCM Advanced Topics", "titleFriendly":"", "summary":"This document covers advanced topics for GCM. When a 3rd-party server posts a message to GCM and receives a message ID back, it does not mean that the message was already delivered to the device. Rather, it means that it was accepted for delivery. What…", "url":"google/gcm/adv.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"google" }, { "title":"Authorization", "titleFriendly":"", "summary":"Google Play services offers a standard authorization flow for all Google APIs and all components of Google Play services. In addition, you can leverage the authorization portion of the Google Play services SDK to gain authorization to services that are…", "url":"google/play-services/auth.html", "group":"", "keywords": ["accountmanager","oauth2"], "tags": ["accountmanager","oauth2"], "image":"", "lang":"en", "type":"google" }, { "title":"Location APIs", "titleFriendly":"", "summary":"The location APIs make it easy for you to build location-aware applications, without needing to focus on the details of the underlying location technology. They also let you minimize power consumption by using all of the capabilities of the device hardware…", "url":"google/play-services/location.html", "group":"", "keywords": ["location","geofence","geofencing","gps"], "tags": ["location","geofence","geofencing","gps"], "image":"images/google/gps-location.png", "lang":"en", "type":"google" }, { "title":"Google Mobile Ads", "titleFriendly":"", "summary":"Monetize your app with banner or interstitial ads from Google's vast pool of advertisers. Integrate with top ad networks through mediation to maximize your revenue from impressions. Take advantage of new ad features and capabilities through Google…", "url":"google/play-services/ads.html", "group":"", "keywords": ["ads","monetization","admob","google play services"], "tags": ["ads","monetization","admob","googleplayservices"], "image":"images/google/gps-ads.png", "lang":"en", "type":"google" }, { "title":"Google+ Platform for Android", "titleFriendly":"", "summary":"The Google+ platform for Android lets you authenticate a user with the same credentials they use on Google every day. Once a user signs in with Google, you can create more engaging experiences and drive usage of your app.…", "url":"google/play-services/plus.html", "group":"", "keywords": ["authentication","signin","social"], "tags": ["authentication","signin","social"], "image":"images/google/gps-googleplus.png", "lang":"en", "type":"google" }, { "title":"Google Maps Android API v2", "titleFriendly":"", "summary":"Allow your users to explore the world with rich maps provided by Google. Identify locations with custom markers, augment the map data with image overlays, embed one or more maps as fragments, and much more.…", "url":"google/play-services/maps.html", "group":"", "keywords": ["mapview","location"], "tags": ["mapview","location"], "image":"images/google/gps-maps.png", "lang":"en", "type":"google" }, { "title":"Google Play Services", "titleFriendly":"", "summary":"With Google Play services, your app can take advantage of the latest Google-powered features such as Maps, Analytics, and more: platform updates are distributed automatically as an APK through the Google Play Store.", "url":"google/play-services/index.html", "group":"", "keywords": [], "tags": [], "image":"images/google/gps.png", "lang":"en", "type":"google" }, { "title":"Google Cast Android API", "titleFriendly":"", "summary":"Google Cast is a technology that enables multi-screen experiences, which allows users to send content from mobile devices and personal computers to their TVs. You can use the Google Cast Android API to add casting functionality to your Android app so …", "url":"google/play-services/cast.html", "group":"", "keywords": ["chromecast","miracast"], "tags": ["chromecast","miracast"], "image":"images/google/googlecast.png", "lang":"en", "type":"google" }, { "title":"Google Play Game Services", "titleFriendly":"", "summary":"Make your games social with Google Play game services. Add achievements, leaderboards, real-time multiplayer, and other popular features using the Google Play game services SDK. Let players sign in using their Google+ identities and share their gaming…", "url":"google/play-services/games.html", "group":"", "keywords": ["games"], "tags": ["games"], "image":"images/google/gps-play_games_logo.png", "lang":"en", "type":"google" }, { "title":"Setting Up Google Play Services", "titleFriendly":"", "summary":"To develop an app using the Google Play services APIs , you need to set up your project with the Google Play services SDK. If you haven't installed the Google Play services SDK yet, go get it now by following the guide to Adding SDK Packages . To …", "url":"google/play-services/setup.html", "group":"", "keywords": [], "tags": [], "image":"images/tools/sync-project.png", "lang":"en", "type":"google" }, { "title":"Google Drive Android API", "titleFriendly":"", "summary":"Give your users access to their files, wherever they are, on any device. The Google Drive Android API makes it easier than ever to use Drive to store and sync user’s files between their mobile devices and the cloud. Simply use Drive like local file storage…", "url":"google/play-services/drive.html", "group":"", "keywords": ["storage","files","cloud"], "tags": ["storage","files","cloud"], "image":"images/google/gps-drive.png", "lang":"en", "type":"google" }, { "title":"Advertising ID", "titleFriendly":"", "summary":"The advertising ID is a user-specific, unique, resettable ID for advertising, provided by Google Play services. It gives users better controls and provides developers with a simple, standard system to continue to monetize your apps. It is an anonymous…", "url":"google/play-services/id.html", "group":"", "keywords": ["ads","advertising id","id"], "tags": ["ads","advertisingid","id"], "image":"", "lang":"en", "type":"google" }, { "title":"Google Wallet Instant Buy for Android", "titleFriendly":"", "summary":"Add fast, secure checkout for users buying physical goods and services from your app. Transactions are monitored for fraud 24/7. Keep your existing payments infrastructure and integrate Google Wallet quickly, easily and free of charge.…", "url":"google/play-services/wallet.html", "group":"", "keywords": ["wallet","payments","instant buy"], "tags": ["wallet","payments","instantbuy"], "image":"images/google/gps-wallet-instant.png", "lang":"en", "type":"google" }, { "title":"Android Backup Service", "titleFriendly":"", "summary":"Android Backup Service provides a backup transport for Android's data backup framework, which allows you to copy a user's persistent app data to remote "cloud" storage. Backing up persistent data this way provides a restore point for…", "url":"google/backup/index.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"google" }, { "title":"Accessing Google APIs", "titleFriendly":"", "summary":"When you want to make a connection to one of the Google APIs provided in the Google Play services library (such as Google+, Games, or Drive), you need to create an instance of GoogleApiClient ("Google API Client"). The Google API Client provides…", "url":"google/auth/api-client.html", "group":"", "keywords": ["oauth 2.0","googleauthutil"], "tags": ["oauth2.0","googleauthutil"], "image":"images/google/GoogleApiClient@2x.png", "lang":"en", "type":"google" }, { "title":"Authorizing with Google for REST APIs", "titleFriendly":"", "summary":"When you want your Android app to access Google APIs using the user's Google account over HTTP, the GoogleAuthUtil class and related APIs provide your users a secure and consistent experience for picking an account and retrieving an OAuth 2.0 token…", "url":"google/auth/http-auth.html", "group":"", "keywords": ["oauth 2.0","googleauthutil"], "tags": ["oauth2.0","googleauthutil"], "image":"", "lang":"en", "type":"google" } ]; var GUIDE_RESOURCES = [ { "title":"中文资源", "titleFriendly":"", "summary":"我们翻译了以下一些网站资源,希望能帮助你开始设计、开发和在全球发布你的Android应用。", "url":"intl/zh-cn/resources.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"zh-cn", "type":"guide" }, { "title":"開発の基礎", "titleFriendly":"", "summary":"Android アプリケーションはすべて Java プログラミング言語で記述します。コンパイル済みの Java コード(およびそのアプリケーションに必要なすべてのデータやリソース ファイル)は、 aapt ツール を使用して Android パッケージにバンドルします。Android パッケージは、拡張子が apk のアーカイブ ファイルです。 ユーザーは、このファイルをデバイスにダウンロードして利用します。つまり、Android パッケージは、アプリケーションをモバイル デバイスに配布およびインストール…", "url":"intl/ja/guide/topics/fundamentals.html", "group":"", "keywords": [], "tags": [], "image":"images/binder_rpc.png", "lang":"ja", "type":"guide" }, { "title":"公開の準備", "titleFriendly":"", "summary":"アプリケーションの公開とは、アプリケーションをテストして適切にパッケージし、Android 搭載の携帯端末のユーザーが利用できる状態にすることです。 アプリケーションを公開して Android 搭載デバイスにインストールするには、いくつかの作業を行ってアプリケーションの準備を整える必要があります。このドキュメントでは、アプリケーションのリリースを成功させるための準備における、重要なチェックポイントを説明しています。 アプリケーションを Android マーケットに公開する場合は、アプリケーションの…", "url":"intl/ja/guide/publishing/preparing.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"ja", "type":"guide" }, { "title":"アプリケーションのバージョニング", "titleFriendly":"", "summary":"バージョン管理のコンポーネントは、アプリケーションのアップグレード及びメンテナンスの計画を立てるのに重要です。 Android システム自体は、アップグレードや互換性の制約の実施などのために、アプリケーション バージョン情報をアプリケーションに対して 確認することはありません 。代わりに、アプリケーションにおけるバージョン制約はユーザーまたはアプリケーション自体によって完全に実施されます。 Android システムが確認を行うのは、アプリケーションによってマニフェストの minSdkVersion…", "url":"intl/ja/guide/publishing/versioning.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"ja", "type":"guide" }, { "title":"アプリケーションへの署名", "titleFriendly":"", "summary":"このドキュメントでは、Android アプリケーションを携帯端末ユーザーに公開する前に署名する方法について説明します。 Android システムでは、インストールするすべてのアプリケーションに対してデジタル署名されて証明書を必要とします。この証明書の秘密鍵は、アプリケーションのデベロッパーが所持するものです。Android システムは証明書をアプリケーションの作成者の識別手段、およびアプリケーション間の信頼関係の確立手段として使用します。証明書は、ユーザーがどのアプリケーションをインストールできるかを…", "url":"intl/ja/guide/publishing/app-signing.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"ja", "type":"guide" }, { "title":"Resources", "titleFriendly":"", "summary":"These resources will help you get started with Android and Google Play. 。", "url":"resources.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"Common Intents", "titleFriendly":"", "summary":"An intent allows you to start an activity in another app by describing a simple action you'd like to perform (such as "view a map" or "take a picture") in an Intent object. This type of intent is called an implicit intent because…", "url":"guide/components/intents-common.html", "group":"", "keywords": ["intentfilter"], "tags": ["intentfilter"], "image":"guide/components/images/voice-icon.png", "lang":"en", "type":"guide" }, { "title":"Processes and Threads", "titleFriendly":"", "summary":"When an application component starts and the application does not have any other components running, the Android system starts a new Linux process for the application with a single thread of execution. By default, all components of the same application…", "url":"guide/components/processes-and-threads.html", "group":"", "keywords": ["lifecycle","background"], "tags": ["lifecycle","background"], "image":"", "lang":"en", "type":"guide" }, { "title":"Application Fundamentals", "titleFriendly":"", "summary":"Android apps are written in the Java programming language. The Android SDK tools compile your code—along with any data and resource files—into an APK: an Android package , which is an archive file with an apk suffix. One APK file contains all the contents…", "url":"guide/components/fundamentals.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"Activities", "titleFriendly":"", "summary":"An Activity is an application component that provides a screen with which users can interact in order to do something, such as dial the phone, take a photo, send an email, or view a map. Each activity is given a window in which to draw its user interface…", "url":"guide/components/activities.html", "group":"", "keywords": ["activity","intent"], "tags": ["activity","intent"], "image":"images/activity_lifecycle.png", "lang":"en", "type":"guide" }, { "title":"App Components", "titleFriendly":"", "summary":"Android's application framework lets you create rich and innovative apps using a set of reusable components. This section explains how you can build the components that define the building blocks of your app and how to connect them together using intents. ", "url":"guide/components/index.html", "group":"", "keywords": [], "tags": [], "image":"images/develop/app_components.png", "lang":"en", "type":"guide" }, { "title":"Bound Services", "titleFriendly":"", "summary":"A bound service is the server in a client-server interface. A bound service allows components (such as activities) to bind to the service, send requests, receive responses, and even perform interprocess communication (IPC). A bound service typically lives…", "url":"guide/components/bound-services.html", "group":"", "keywords": [], "tags": [], "image":"images/fundamentals/service_binding_tree_lifecycle.png", "lang":"en", "type":"guide" }, { "title":"Android Interface Definition Language (AIDL)", "titleFriendly":"", "summary":"AIDL (Android Interface Definition Language) is similar to other IDLs you might have worked with. It allows you to define the programming interface that both the client and service agree upon in order to communicate with each other using interprocess …", "url":"guide/components/aidl.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"Tasks and Back Stack", "titleFriendly":"", "summary":"An application usually contains multiple activities . Each activity should be designed around a specific kind of action the user can perform and can start other activities. For example, an email application might have one activity to show a list of new…", "url":"guide/components/tasks-and-back-stack.html", "group":"", "keywords": [], "tags": [], "image":"images/fundamentals/diagram_backstack.png", "lang":"en", "type":"guide" }, { "title":"Overview Screen", "titleFriendly":"", "summary":"The overview screen (also referred to as the recents screen, recent task list, or recent apps) is a system-level UI that lists recently accessed activities and tasks . The user can navigate through the list and select a task to resume, or the user can…", "url":"guide/components/recents.html", "group":"", "keywords": ["recents","overview"], "tags": ["recents","overview"], "image":"images/components/recents.png", "lang":"en", "type":"guide" }, { "title":"Intents and Intent Filters", "titleFriendly":"", "summary":"An Intent is a messaging object you can use to request an action from another app component . Although intents facilitate communication between components in several ways, there are three fundamental use-cases: An Activity represents a single screen in…", "url":"guide/components/intents-filters.html", "group":"", "keywords": ["intentfilter"], "tags": ["intentfilter"], "image":"images/components/intent-filters@2x.png", "lang":"en", "type":"guide" }, { "title":"Fragments", "titleFriendly":"", "summary":"A Fragment represents a behavior or a portion of user interface in an Activity. You can combine multiple fragments in a single activity to build a multi-pane UI and reuse a fragment in multiple activities. You can think of a fragment as a modular section…", "url":"guide/components/fragments.html", "group":"", "keywords": [], "tags": [], "image":"images/fundamentals/fragments.png", "lang":"en", "type":"guide" }, { "title":"Loaders", "titleFriendly":"", "summary":"Introduced in Android 3.0, loaders make it easy to asynchronously load data in an activity or fragment. Loaders have these characteristics: There are multiple classes and interfaces that may be involved in using loaders in an application. They are summarized…", "url":"guide/components/loaders.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"Services", "titleFriendly":"", "summary":"A Service is an application component that can perform long-running operations in the background and does not provide a user interface. Another application component can start a service and it will continue to run in the background even if the user switches…", "url":"guide/components/services.html", "group":"", "keywords": [], "tags": [], "image":"images/service_lifecycle.png", "lang":"en", "type":"guide" }, { "title":"Introduction to Android", "titleFriendly":"", "summary":"Android provides a rich application framework that allows you to build innovative apps and games for mobile devices in a Java language environment. The documents listed in the left navigation provide details about how to build apps using Android's…", "url":"guide/index.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"Data Storage", "titleFriendly":"", "summary":"This class covers different strategies for cloud enabled applications. It covers syncing data with the cloud using your own back-end web application, and backing up data using the cloud so that users can restore their data when installing your application…", "url":"guide/topics/data/index.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"Data Backup", "titleFriendly":"", "summary":"Android's backup service allows you to copy your persistent application data to remote "cloud" storage, in order to provide a restore point for the application data and settings. If a user performs a factory reset or converts to a new Android-powered…", "url":"guide/topics/data/backup.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"App Install Location", "titleFriendly":"", "summary":"Beginning with API Level 8, you can allow your application to be installed on the external storage (for example, the device's SD card). This is an optional feature you can declare for your application with the preferExternal" or "auto"…", "url":"guide/topics/data/install-location.html", "group":"", "keywords": ["sdcard","external"], "tags": ["sdcard","external"], "image":"", "lang":"en", "type":"guide" }, { "title":"Storage Options", "titleFriendly":"", "summary":"Android provides several options for you to save persistent application data. The solution you choose depends on your specific needs, such as whether the data should be private to your application or accessible to other applications (and the user) and…", "url":"guide/topics/data/data-storage.html", "group":"", "keywords": ["database","sharedpreferences","sdcard"], "tags": ["database","sharedpreferences","sdcard"], "image":"", "lang":"en", "type":"guide" }, { "title":"Searchable Configuration", "titleFriendly":"", "summary":"In order to implement search with assistance from the Android system (to deliver search queries to an activity and provide search suggestions), your application must provide a search configuration in the form of an XML file. This page describes the search…", "url":"guide/topics/search/searchable-config.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"Adding Recent Query Suggestions", "titleFriendly":"", "summary":"When using the Android search dialog or search widget, you can provide search suggestions based on recent search queries. For example, if a user previously searched for "puppies," then that query appears as a suggestion once he or she begins…", "url":"guide/topics/search/adding-recent-query-suggestions.html", "group":"", "keywords": ["searchrecentsuggestions","searchrecentsuggestionsprovider"], "tags": ["searchrecentsuggestions","searchrecentsuggestionsprovider"], "image":"images/search/search-suggest-recent-queries.png", "lang":"en", "type":"guide" }, { "title":"Creating a Search Interface", "titleFriendly":"", "summary":"When you're ready to add search functionality to your application, Android helps you implement the user interface with either a search dialog that appears at the top of the activity window or a search widget that you can insert in your layout. Both…", "url":"guide/topics/search/search-dialog.html", "group":"", "keywords": ["searchview"], "tags": ["searchview"], "image":"images/search/search-ui.png", "lang":"en", "type":"guide" }, { "title":"Search Overview", "titleFriendly":"", "summary":"Search is a core user feature on Android. Users should be able to search any data that is available to them, whether the content is located on the device or the Internet. To help create a consistent search experience for users, Android provides a search…", "url":"guide/topics/search/index.html", "group":"", "keywords": [], "tags": [], "image":"images/search/search-suggest-custom.png", "lang":"en", "type":"guide" }, { "title":"Adding Custom Suggestions", "titleFriendly":"", "summary":"When using the Android search dialog or search widget, you can provide custom search suggestions that are created from data in your application. For example, if your application is a word dictionary, you can suggest words from the dictionary that match…", "url":"guide/topics/search/adding-custom-suggestions.html", "group":"", "keywords": ["searchrecentsuggestionsprovider"], "tags": ["searchrecentsuggestionsprovider"], "image":"images/search/search-suggest-custom.png", "lang":"en", "type":"guide" }, { "title":"Administration", "titleFriendly":"", "summary":"Android 4.0 (ICS) comes with a number of enhancements that make it easier for people to bring their personal Android devices to work. In this post, we’re going to have a look at the key store functionality.…", "url":"guide/topics/admin/index.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"Device Administration", "titleFriendly":"", "summary":"Android 2.2 introduces support for enterprise applications by offering the Android Device Administration API. The Device Administration API provides device administration features at the system level. These APIs allow you to create security-aware applications…", "url":"guide/topics/admin/device-admin.html", "group":"", "keywords": ["devicepolicymanager","policy","security"], "tags": ["devicepolicymanager","policy","security"], "image":"images/admin/device-admin-app.png", "lang":"en", "type":"guide" }, { "title":"Creating an Input Method", "titleFriendly":"", "summary":"An input method editor (IME) is a user control that enables users to enter text. Android provides an extensible input-method framework that allows applications to provide users alternative input methods, such as on-screen keyboards or even speech input…", "url":"guide/topics/text/creating-input-method.html", "group":"", "keywords": ["ime","keyboard","inputmethodservice"], "tags": ["ime","keyboard","inputmethodservice"], "image":"resources/articles/images/inputmethod_lifecycle_image.png", "lang":"en", "type":"guide" }, { "title":"Text and Input", "titleFriendly":"", "summary":"A new feature available in Android 4.0 is voice typing: the difference for users is that the recognition results appear in the text box while they are still speaking. If you are an IME developer, you can easily integrate with voice typing. We believe …", "url":"guide/topics/text/index.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"Copy and Paste", "titleFriendly":"", "summary":"Android provides a powerful clipboard-based framework for copying and pasting. It supports both simple and complex data types, including text strings, complex data structures, text and binary stream data, and even application assets. Simple text data …", "url":"guide/topics/text/copy-paste.html", "group":"", "keywords": ["clipboardmanager","clipdata","input"], "tags": ["clipboardmanager","clipdata","input"], "image":"images/ui/clipboard/copy_paste_framework.png", "lang":"en", "type":"guide" }, { "title":"Spelling Checker Framework", "titleFriendly":"", "summary":"The Android platform offers a spelling checker framework that lets you implement and access spell checking in your application. The framework is one of the Text Service APIs offered by the Android platform. To use the framework in your app, you create…", "url":"guide/topics/text/spell-checker-framework.html", "group":"", "keywords": ["input","spellcheckerservice"], "tags": ["input","spellcheckerservice"], "image":"resources/articles/images/spellcheck_lifecycle.png", "lang":"en", "type":"guide" }, { "title":"SONiVOX JETCreator User Manual", "titleFriendly":"", "summary":"Content Authoring Application for the JET Interactive Music Engine This document contains the user guidelines for the SONiVOX JET Creator, an authoring application for creating and auditioning JET files. JET is an interactive music player for small embedded…", "url":"guide/topics/media/jet/jetcreator_manual.html", "group":"", "keywords": [], "tags": [], "image":"images/jet/linear_music.png", "lang":"en", "type":"guide" }, { "title":"Media and Camera", "titleFriendly":"", "summary":"If your media playback application creates a media playback service, just like Music, that responds to the media button events, how will the user know where those events are going to? Music, or your new application? Making a game on Android is easy. Making…", "url":"guide/topics/media/index.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"Media Playback", "titleFriendly":"", "summary":"The Android multimedia framework includes support for playing variety of common media types, so that you can easily integrate audio, video and images into your applications. You can play audio or video from media files stored in your application's…", "url":"guide/topics/media/mediaplayer.html", "group":"", "keywords": ["mediaplayer","soundpool","audiomanager"], "tags": ["mediaplayer","soundpool","audiomanager"], "image":"images/notification1.png", "lang":"en", "type":"guide" }, { "title":"Media Router", "titleFriendly":"", "summary":"As users connect their televisions, home theater systems and music players with wireless technologies, they want to be able to play content from Android apps on these larger, louder devices. Enabling this kind of playback can turn your one-device, one-user…", "url":"guide/topics/media/mediarouter.html", "group":"", "keywords": ["mediarouter","cast","chromecast","wireless display","miracast"], "tags": ["mediarouter","cast","chromecast","wirelessdisplay","miracast"], "image":"images/mediarouter/mediarouter-framework.png", "lang":"en", "type":"guide" }, { "title":"Media Route Provider", "titleFriendly":"", "summary":"Users want to play media content from their Android devices bigger, brighter, and louder on connected playback devices such as televisions, stereos, and home theater equipment. As a manufacturer of these devices, allowing Android users to instantly show…", "url":"guide/topics/media/mediarouteprovider.html", "group":"", "keywords": ["mediarouteprovider","mediacontrolintent"], "tags": ["mediarouteprovider","mediacontrolintent"], "image":"images/mediarouter/media-route-provider-framework.png", "lang":"en", "type":"guide" }, { "title":"JetPlayer", "titleFriendly":"", "summary":"The Android platform includes a JET engine that lets you add interactive playback of JET audio content in your applications. You can create JET content for interactive playback using the JetCreator authoring application that ships with the SDK. To play…", "url":"guide/topics/media/jetplayer.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"ExoPlayer", "titleFriendly":"", "summary":"Playing videos and music is a popular activity on Android devices. The Android framework provides MediaPlayer as a quick solution for playing media with minimal code, and the MediaCodec and MediaExtractor classes are provided for building custom media…", "url":"guide/topics/media/exoplayer.html", "group":"", "keywords": ["audio","video","adaptive","streaming","dash","smoothstreaming"], "tags": ["audio","video","adaptive","streaming","dash","smoothstreaming"], "image":"images/exoplayer/object-model.png", "lang":"en", "type":"guide" }, { "title":"Camera", "titleFriendly":"", "summary":"The Android framework includes support for various cameras and camera features available on devices, allowing you to capture pictures and videos in your applications. This document discusses a quick, simple approach to image and video capture and outlines…", "url":"guide/topics/media/camera.html", "group":"", "keywords": ["photo","video","picture","mediarecorder"], "tags": ["photo","video","picture","mediarecorder"], "image":"images/camera-area-coordinates.png", "lang":"en", "type":"guide" }, { "title":"Audio Capture", "titleFriendly":"", "summary":"The Android multimedia framework includes support for capturing and encoding a variety of common audio formats, so that you can easily integrate audio into your applications. You can record audio using the MediaRecorder APIs if supported by the device…", "url":"guide/topics/media/audio-capture.html", "group":"", "keywords": ["mediarecorder"], "tags": ["mediarecorder"], "image":"", "lang":"en", "type":"guide" }, { "title":"Content Providers", "titleFriendly":"", "summary":"Content providers manage access to a structured set of data. They encapsulate the data, and provide mechanisms for defining data security. Content providers are the standard interface that connects data in one process with code running in another process…", "url":"guide/topics/providers/content-providers.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"Content Provider Basics", "titleFriendly":"", "summary":"A content provider manages access to a central repository of data. A provider is part of an Android application, which often provides its own UI for working with the data. However, content providers are primarily intended to be used by other applications…", "url":"guide/topics/providers/content-provider-basics.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"Calendar Provider", "titleFriendly":"", "summary":"The Calendar Provider is a repository for a user's calendar events. The Calendar Provider API allows you to perform query, insert, update, and delete operations on calendars, events, attendees, reminders, and so on. The Calender Provider API can be…", "url":"guide/topics/providers/calendar-provider.html", "group":"", "keywords": [], "tags": [], "image":"images/providers/datamodel.png", "lang":"en", "type":"guide" }, { "title":"Creating a Content Provider", "titleFriendly":"", "summary":"A content provider manages access to a central repository of data. You implement a provider as one or more classes in an Android application, along with elements in the manifest file. One of your classes implements a subclass ContentProvider, which is…", "url":"guide/topics/providers/content-provider-creating.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"Contacts Provider", "titleFriendly":"", "summary":"The Contacts Provider is a powerful and flexible Android component that manages the device's central repository of data about people. The Contacts Provider is the source of data you see in the device's contacts application, and you can also access…", "url":"guide/topics/providers/contacts-provider.html", "group":"", "keywords": [], "tags": [], "image":"images/providers/contacts_structure.png", "lang":"en", "type":"guide" }, { "title":"Storage Access Framework", "titleFriendly":"", "summary":"Android 4.4 (API level 19) introduces the Storage Access Framework (SAF). The SAF makes it simple for users to browse and open documents, images, and other files across all of their their preferred document storage providers. A standard, easy-to-use UI…", "url":"guide/topics/providers/document-provider.html", "group":"", "keywords": [], "tags": [], "image":"images/providers/storage_datamodel.png", "lang":"en", "type":"guide" }, { "title":"More Resource Types", "titleFriendly":"", "summary":"This page defines more types of resources you can externalize, including: A boolean value defined in XML. No attributes. This application code retrieves the boolean: This layout XML uses the boolean for an attribute: A color value defined in XML. The …", "url":"guide/topics/resources/more-resources.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"Color State List Resource", "titleFriendly":"", "summary":"A ColorStateList is an object you can define in XML that you can apply as a color, but will actually change colors, depending on the state of the View object to which it is applied. For example, a Button widget can exist in one of several different states…", "url":"guide/topics/resources/color-list-resource.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"Layout Resource", "titleFriendly":"", "summary":"A layout resource defines the architecture for the UI in an Activity or a component of a UI. You should not assume that any derivation of ViewGroup will accept nested Views. Some ViewGroups are implementations of the AdapterView class, which determines…", "url":"guide/topics/resources/layout-resource.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"Application Resources", "titleFriendly":"", "summary":"This document has moved. Please see Application Resources .…", "url":"guide/topics/resources/resources-i18n.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"Menu Resource", "titleFriendly":"", "summary":"A menu resource defines an application menu (Options Menu, Context Menu, or submenu) that can be inflated with MenuInflater. For a guide to using menus, see the Menus developer guide. Introduced in API Level 11. See the Action Bar developer guide for …", "url":"guide/topics/resources/menu-resource.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"Resources Overview", "titleFriendly":"", "summary":"You should always externalize resources such as images and strings from your application code, so that you can maintain them independently. Externalizing your resources also allows you to provide alternative resources that support specific device configurations…", "url":"guide/topics/resources/overview.html", "group":"", "keywords": [], "tags": [], "image":"images/resources/resource_devices_diagram1.png", "lang":"en", "type":"guide" }, { "title":"Accessing Resources", "titleFriendly":"", "summary":"Once you provide a resource in your application (discussed in Providing Resources ), you can apply it by referencing its resource ID. All resource IDs are defined in your project's R class, which the aapt tool automatically generates. When your application…", "url":"guide/topics/resources/accessing-resources.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"Animation Resources", "titleFriendly":"", "summary":"An animation resource can define one of two types of animations: There are two types of animations that you can do with the view animation framework: An animation defined in XML that modifies properties of the target object, such as background color or…", "url":"guide/topics/resources/animation-resource.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"App Resources", "titleFriendly":"", "summary":"Developer guide about how to use resources in your Android apps.", "url":"guide/topics/resources/index.html", "group":"", "keywords": [], "tags": [], "image":"images/develop/resources.png", "lang":"en", "type":"guide" }, { "title":"Style Resource", "titleFriendly":"", "summary":"A style resource defines the format and look for a UI. A style can be applied to an individual View (from within a layout file) or to an entire Activity or application (from within the manifest file). For more information about creating and applying styles…", "url":"guide/topics/resources/style-resource.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"Localizing with Resources", "titleFriendly":"", "summary":"Android will run on many devices in many regions. To reach the most users, your application should handle text, audio files, numbers, currency, and graphics in ways appropriate to the locales where your application will be used. This document describes…", "url":"guide/topics/resources/localization.html", "group":"", "keywords": ["localizing","localization","resources","formats","l10n"], "tags": ["localizing","localization","resources","formats","l10n"], "image":"../../../images/resources/right-arrow.png", "lang":"en", "type":"guide" }, { "title":"String Resources", "titleFriendly":"", "summary":"A string resource provides text strings for your application with optional text styling and formatting. There are three types of resources that can provide your application with strings: All strings are capable of applying some styling markup and formatting…", "url":"guide/topics/resources/string-resource.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"Providing Resources", "titleFriendly":"", "summary":"You should always externalize application resources such as images and strings from your code, so that you can maintain them independently. You should also provide alternative resources for specific device configurations, by grouping them in specially-named…", "url":"guide/topics/resources/providing-resources.html", "group":"", "keywords": [], "tags": [], "image":"images/resources/resource_devices_diagram2.png", "lang":"en", "type":"guide" }, { "title":"Resource Types", "titleFriendly":"", "summary":"Each of the documents in this section describe the usage, format and syntax for a certain type of application resource that you can provide in your resources directory ({@code res/}). Here's a brief summary of each resource type:…", "url":"guide/topics/resources/available-resources.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"Handling Runtime Changes", "titleFriendly":"", "summary":"Some device configurations can change during runtime (such as screen orientation, keyboard availability, and language). When such a change occurs, Android restarts the running Activity (onDestroy() is called, followed by onCreate()). The restart behavior…", "url":"guide/topics/resources/runtime-changes.html", "group":"", "keywords": ["activity","lifecycle"], "tags": ["activity","lifecycle"], "image":"", "lang":"en", "type":"guide" }, { "title":"Drawable Resources", "titleFriendly":"", "summary":"A drawable resource is a general concept for a graphic that can be drawn to the screen and which you can retrieve with APIs such as getDrawable(int) or apply to another XML resource with attributes such as AnimationDrawable. A bitmap image. Android supports…", "url":"guide/topics/resources/drawable-resource.html", "group":"", "keywords": [], "tags": [], "image":"images/resources/layers.png", "lang":"en", "type":"guide" }, { "title":"Canvas and Drawables", "titleFriendly":"", "summary":"The Android framework APIs provides a set of 2D-drawing APIs that allow you to render your own custom graphics onto a canvas or to modify existing Views to customize their look and feel. When drawing 2D graphics, you'll typically do so in one of two…", "url":"guide/topics/graphics/2d-graphics.html", "group":"", "keywords": [], "tags": [], "image":"images/ninepatch_raw.png", "lang":"en", "type":"guide" }, { "title":"Hardware Acceleration", "titleFriendly":"", "summary":"Beginning in Android 3.0 (API level 11), the Android 2D rendering pipeline supports hardware acceleration, meaning that all drawing operations that are performed on a View's canvas use the GPU. Because of the increased resources required to enable…", "url":"guide/topics/graphics/hardware-accel.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"Animation and Graphics Overview", "titleFriendly":"", "summary":"Android provides a variety of powerful APIs for applying animation to UI elements and drawing custom 2D and 3D graphics. The sections below provide an overview of the APIs and system capabilities available and help you decide with approach is best for…", "url":"guide/topics/graphics/overview.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"Animation and Graphics", "titleFriendly":"", "summary":"Earlier this year, Android 3.0 launched with a new 2D rendering pipeline designed to support hardware acceleration on tablets. With this new pipeline, all drawing operations performed by the UI toolkit are carried out using the GPU. You’ll be happy to…", "url":"guide/topics/graphics/index.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"OpenGL ES", "titleFriendly":"", "summary":"Android includes support for high performance 2D and 3D graphics with the Open Graphics Library (OpenGL®), specifically, the OpenGL ES API. OpenGL is a cross-platform graphics API that specifies a standard software interface for 3D graphics processing…", "url":"guide/topics/graphics/opengl.html", "group":"", "keywords": ["games"], "tags": ["games"], "image":"images/opengl/coordinates.png", "lang":"en", "type":"guide" }, { "title":"Property Animation", "titleFriendly":"", "summary":"The property animation system is a robust framework that allows you to animate almost anything. You can define an animation to change any object property over time, regardless of whether it draws to the screen or not. A property animation changes a property…", "url":"guide/topics/graphics/prop-animation.html", "group":"", "keywords": ["valueanimator","objectanimator","layouttransition","viewpropertyanimator"], "tags": ["valueanimator","objectanimator","layouttransition","viewpropertyanimator"], "image":"images/animation/animation-linear.png", "lang":"en", "type":"guide" }, { "title":"Drawable Animation", "titleFriendly":"", "summary":"Drawable animation lets you load a series of Drawable resources one after another to create an animation. This is a traditional animation in the sense that it is created with a sequence of different images, played in order, like a roll of film. The AnimationDrawable…", "url":"guide/topics/graphics/drawable-animation.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"View Animation", "titleFriendly":"", "summary":"You can use the view animation system to perform tweened animation on Views. Tween animation calculates the animation with information such as the start point, end point, size, rotation, and other common aspects of an animation. A tween animation can …", "url":"guide/topics/graphics/view-animation.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"Processes and Application Life Cycle", "titleFriendly":"", "summary":"In most cases, every Android application runs in its own Linux process. This process is created for the application when some of its code needs to be run, and will remain running until it is no longer needed and the system needs to reclaim its memory …", "url":"guide/topics/processes/process-lifecycle.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"USB Host and Accessory", "titleFriendly":"", "summary":"Android supports a variety of USB peripherals and Android USB accessories (hardware that implements the Android accessory protocol) through two modes: USB accessory and USB host. In USB accessory mode, the external USB hardware act as the USB hosts. Examples…", "url":"guide/topics/connectivity/usb/index.html", "group":"", "keywords": [], "tags": [], "image":"images/usb-host-accessory.png", "lang":"en", "type":"guide" }, { "title":"USB Host", "titleFriendly":"", "summary":"When your Android-powered device is in USB host mode, it acts as the USB host, powers the bus, and enumerates connected USB devices. USB host mode is supported in Android 3.1 and higher. Before you begin, it is important to understand the classes that…", "url":"guide/topics/connectivity/usb/host.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"USB Accessory", "titleFriendly":"", "summary":"USB accessory mode allows users to connect USB host hardware specifically designed for Android-powered devices. The accessories must adhere to the Android accessory protocol outlined in the Android Accessory Development Kit documentation. This allows …", "url":"guide/topics/connectivity/usb/accessory.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"Session Initiation Protocol", "titleFriendly":"", "summary":"Android provides an API that supports the Session Initiation Protocol (SIP). This lets you add SIP-based internet telephony features to your applications. Android includes a full SIP protocol stack and integrated call management services that let applications…", "url":"guide/topics/connectivity/sip.html", "group":"", "keywords": ["sipmanager","sipprofile","sipaudiocall","telephony"], "tags": ["sipmanager","sipprofile","sipaudiocall","telephony"], "image":"", "lang":"en", "type":"guide" }, { "title":"Connectivity", "titleFriendly":"", "summary":"Most network-connected Android apps will use HTTP to send and receive data. Android includes two HTTP clients: HttpURLConnection and Apache HTTP Client. Both support HTTPS, streaming uploads and downloads, configurable timeouts, IPv6 and connection pooling…", "url":"guide/topics/connectivity/index.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"Wi-Fi Peer-to-Peer", "titleFriendly":"", "summary":"Wi-Fi peer-to-peer (P2P) allows Android 4.0 (API level 14) or later devices with the appropriate hardware to connect directly to each other via Wi-Fi without an intermediate access point (Android's Wi-Fi P2P framework complies with the Wi-Fi Alliance…", "url":"guide/topics/connectivity/wifip2p.html", "group":"", "keywords": ["wireless","wifip2pmanager","wi-fi direct","wifi direct","p2p","wi-fi p2p","wifi p2p"], "tags": ["wireless","wifip2pmanager","wi-fidirect","wifidirect","p2p","wi-fip2p","wifip2p"], "image":"", "lang":"en", "type":"guide" }, { "title":"Bluetooth", "titleFriendly":"", "summary":"The Android platform includes support for the Bluetooth network stack, which allows a device to wirelessly exchange data with other Bluetooth devices. The application framework provides access to the Bluetooth functionality through the Android Bluetooth…", "url":"guide/topics/connectivity/bluetooth.html", "group":"", "keywords": ["wireless","bluetoothadapter","bluetoothdevice"], "tags": ["wireless","bluetoothadapter","bluetoothdevice"], "image":"images/bt_enable_request.png", "lang":"en", "type":"guide" }, { "title":"Bluetooth Low Energy", "titleFriendly":"", "summary":"DevBytes: Bluetooth Low Energy API Android 4.3 (API Level 18) introduces built-in platform support for Bluetooth Low Energy in the central role and provides APIs that apps can use to discover devices, query for services, and read/write characteristics…", "url":"guide/topics/connectivity/bluetooth-le.html", "group":"", "keywords": ["wireless","bluetoothadapter","bluetoothdevice","ble","btle"], "tags": ["wireless","bluetoothadapter","bluetoothdevice","ble","btle"], "image":"", "lang":"en", "type":"guide" }, { "title":"Host-based Card Emulation", "titleFriendly":"", "summary":"Many Android-powered devices that offer NFC functionality already support NFC card emulation. In most cases, the card is emulated by a separate chip in the device, called a secure element . Many SIM cards provided by wireless carriers also contain a secure…", "url":"guide/topics/connectivity/nfc/hce.html", "group":"", "keywords": ["host card emulation","hce","hostapduservice","offhostapduservice","tap and pay"], "tags": ["hostcardemulation","hce","hostapduservice","offhostapduservice","tapandpay"], "image":"images/nfc/secure-element.png", "lang":"en", "type":"guide" }, { "title":"Near Field Communication", "titleFriendly":"", "summary":"Near Field Communication (NFC) is a set of short-range wireless technologies, typically requiring a distance of 4cm or less to initiate a connection. NFC allows you to share small payloads of data between an NFC tag and an Android-powered device, or between…", "url":"guide/topics/connectivity/nfc/index.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"NFC Basics", "titleFriendly":"", "summary":"This document describes the basic NFC tasks you perform in Android. It explains how to send and receive NFC data in the form of NDEF messages and describes the Android framework APIs that support these features. For more advanced topics, including a discussion…", "url":"guide/topics/connectivity/nfc/nfc.html", "group":"", "keywords": [], "tags": [], "image":"images/nfc_tag_dispatch.png", "lang":"en", "type":"guide" }, { "title":"Advanced NFC", "titleFriendly":"", "summary":"This document describes advanced NFC topics, such as working with various tag technologies, writing to NFC tags, and foreground dispatching, which allows an application in the foreground to handle intents even when other applications filter for the same…", "url":"guide/topics/connectivity/nfc/advanced-nfc.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"Advanced RenderScript", "titleFriendly":"", "summary":"Because applications that utilize RenderScript still run inside of the Android VM, you have access to all of the framework APIs that you are familiar with, but can utilize RenderScript when appropriate. To facilitate this interaction between the framework…", "url":"guide/topics/renderscript/advanced.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"Runtime API Reference", "titleFriendly":"", "summary":"", "url":"guide/topics/renderscript/reference.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"Computation", "titleFriendly":"", "summary":"It’s been a year since the last blog post on RenderScript, and with the release of Android 4.2, it’s a good time to talk about the performance work that we’ve done since then. One of the major goals of this past year was to improve the performance of …", "url":"guide/topics/renderscript/index.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"RenderScript", "titleFriendly":"", "summary":"RenderScript is a framework for running computationally intensive tasks at high performance on Android. RenderScript is primarily oriented for use with data-parallel computation, although serial computationally intensive workloads can benefit as well.…", "url":"guide/topics/renderscript/compute.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"Styles and Themes", "titleFriendly":"", "summary":"A style is a collection of properties that specify the look and format for a View or window. A style can specify properties such as height, padding, font color, font size, background color, and much more. A style is defined in an XML resource that is …", "url":"guide/topics/ui/themes.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"Action Bar", "titleFriendly":"", "summary":"Action Bar The action bar is a window feature that identifies the user location, and provides user actions and navigation modes. Using the action bar offers your users a familiar interface across applications that the system gracefully adapts for different…", "url":"guide/topics/ui/actionbar.html", "group":"", "keywords": ["actionbar","menu","tabs"], "tags": ["actionbar","menu","tabs"], "image":"images/ui/actionbar@2x.png", "lang":"en", "type":"guide" }, { "title":"Input Controls", "titleFriendly":"", "summary":"Input controls are the interactive components in your app's user interface. Android provides a wide variety of controls you can use in your UI, such as buttons, text fields, seek bars, checkboxes, zoom buttons, toggle buttons, and many more. Adding…", "url":"guide/topics/ui/controls.html", "group":"", "keywords": [], "tags": [], "image":"images/ui/ui-controls.png", "lang":"en", "type":"guide" }, { "title":"Settings", "titleFriendly":"", "summary":"Applications often include settings that allow users to modify app features and behaviors. For example, some apps allow users to specify whether notifications are enabled or specify how often the application syncs data with the cloud. If you want to provide…", "url":"guide/topics/ui/settings.html", "group":"", "keywords": ["preference","preferenceactivity","preferencefragment"], "tags": ["preference","preferenceactivity","preferencefragment"], "image":"images/ui/settings/settings.png", "lang":"en", "type":"guide" }, { "title":"Menus", "titleFriendly":"", "summary":"Menus are a common user interface component in many types of applications. To provide a familiar and consistent user experience, you should use the Menu APIs to present user actions and other options in your activities. Beginning with Android 3.0 (API…", "url":"guide/topics/ui/menus.html", "group":"", "keywords": [], "tags": [], "image":"images/options_menu.png", "lang":"en", "type":"guide" }, { "title":"UI Overview", "titleFriendly":"", "summary":"All user interface elements in an Android app are built using View and ViewGroup objects. A View is an object that draws something on the screen that the user can interact with. A ViewGroup is an object that holds other View (and ViewGroup) objects in…", "url":"guide/topics/ui/overview.html", "group":"", "keywords": [], "tags": [], "image":"images/viewgroup.png", "lang":"en", "type":"guide" }, { "title":"Making Applications Accessible", "titleFriendly":"", "summary":"Applications built for Android are more accessible to users with visual, physical or age-related limitations when those users activate accessibility services and features on a device. These services make your application more accessible even if you do…", "url":"guide/topics/ui/accessibility/apps.html", "group":"", "keywords": [], "tags": [], "image":"calendar.png", "lang":"en", "type":"guide" }, { "title":"Accessibility", "titleFriendly":"", "summary":"How to make your apps accessible to users with visual, physical, or other limitations. Robust support will increase your app's user base.", "url":"guide/topics/ui/accessibility/index.html", "group":"", "keywords": ["accessibility"], "tags": ["accessibility"], "image":"design/media/accessibility_contentdesc.png", "lang":"en", "type":"guide" }, { "title":"Accessibility Developer Checklist", "titleFriendly":"", "summary":"Making an application accessible is about a deep commitment to usability, getting the details right and delighting your users. This document provides a checklist of accessibility requirements, recommendations and considerations to help you make sure your…", "url":"guide/topics/ui/accessibility/checklist.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"Building Accessibility Services", "titleFriendly":"", "summary":"An accessibility service is an application that provides user interface enhancements to assist users with disabilities, or who may temporarily be unable to fully interact with a device. For example, users who are driving, taking care of a young child …", "url":"guide/topics/ui/accessibility/services.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"Dialogs", "titleFriendly":"", "summary":"A dialog is a small window that prompts the user to make a decision or enter additional information. A dialog does not fill the screen and is normally used for modal events that require users to take an action before they can proceed. Dialog Design For…", "url":"guide/topics/ui/dialogs.html", "group":"", "keywords": ["alertdialog","dialogfragment"], "tags": ["alertdialog","dialogfragment"], "image":"images/ui/dialogs.png", "lang":"en", "type":"guide" }, { "title":"Text Fields", "titleFriendly":"", "summary":"A text field allows the user to type text into your app. It can be either single line or multi-line. Touching a text field places the cursor and automatically displays the keyboard. In addition to typing, text fields allow for a variety of other activities…", "url":"guide/topics/ui/controls/text.html", "group":"", "keywords": ["edittext","autocompletetextview"], "tags": ["edittext","autocompletetextview"], "image":"images/ui/edittext-noextract.png", "lang":"en", "type":"guide" }, { "title":"Buttons", "titleFriendly":"", "summary":"A button consists of text or an icon (or both text and an icon) that communicates what action occurs when the user touches it. Depending on whether you want a button with text, an icon, or both, you can create the button in your layout in three ways: …", "url":"guide/topics/ui/controls/button.html", "group":"", "keywords": ["button","imagebutton"], "tags": ["button","imagebutton"], "image":"images/ui/button-types.png", "lang":"en", "type":"guide" }, { "title":"Radio Buttons", "titleFriendly":"", "summary":"Radio buttons allow the user to select one option from a set. You should use radio buttons for optional sets that are mutually exclusive if you think that the user needs to see all available options side-by-side. If it's not necessary to show all …", "url":"guide/topics/ui/controls/radiobutton.html", "group":"", "keywords": ["radiobutton","radiogroup"], "tags": ["radiobutton","radiogroup"], "image":"images/ui/radiobuttons.png", "lang":"en", "type":"guide" }, { "title":"Checkboxes", "titleFriendly":"", "summary":"Checkboxes allow the user to select one or more options from a set. Typically, you should present each checkbox option in a vertical list. To create each checkbox option, create a CheckBox in your layout. Because a set of checkbox options allows the user…", "url":"guide/topics/ui/controls/checkbox.html", "group":"", "keywords": [], "tags": [], "image":"images/ui/checkboxes.png", "lang":"en", "type":"guide" }, { "title":"Pickers", "titleFriendly":"", "summary":"Android provides controls for the user to pick a time or pick a date as ready-to-use dialogs. Each picker provides controls for selecting each part of the time (hour, minute, AM/PM) or date (month, day, year). Using these pickers helps ensure that…", "url":"guide/topics/ui/controls/pickers.html", "group":"", "keywords": ["datepicker","timepicker"], "tags": ["datepicker","timepicker"], "image":"images/ui/pickers.png", "lang":"en", "type":"guide" }, { "title":"Toggle Buttons", "titleFriendly":"", "summary":"A toggle button allows the user to change a setting between two states. You can add a basic toggle button to your layout with the ToggleButton object. Android 4.0 (API level 14) introduces another kind of toggle button called a switch that provides a …", "url":"guide/topics/ui/controls/togglebutton.html", "group":"", "keywords": ["switch","togglebutton"], "tags": ["switch","togglebutton"], "image":"images/ui/togglebutton.png", "lang":"en", "type":"guide" }, { "title":"Spinners", "titleFriendly":"", "summary":"Spinners provide a quick way to select one value from a set. In the default state, a spinner shows its currently selected value. Touching the spinner displays a dropdown menu with all other available values, from which the user can select a new one. You…", "url":"guide/topics/ui/controls/spinner.html", "group":"", "keywords": ["adapterview","spinneradapter"], "tags": ["adapterview","spinneradapter"], "image":"images/ui/spinner.png", "lang":"en", "type":"guide" }, { "title":"Grid View", "titleFriendly":"", "summary":"GridView is a ViewGroup that displays items in a two-dimensional, scrollable grid. The grid items are automatically inserted to the layout using a ListAdapter. For an introduction to how you can dynamically insert views using an adapter, read Building…", "url":"guide/topics/ui/layout/gridview.html", "group":"", "keywords": ["gridview"], "tags": ["gridview"], "image":"images/ui/gridview.png", "lang":"en", "type":"guide" }, { "title":"Relative Layout", "titleFriendly":"", "summary":"RelativeLayout is a view group that displays child views in relative positions. The position of each view can be specified as relative to sibling elements (such as to the left-of or below another view) or in positions relative to the parent RelativeLayout…", "url":"guide/topics/ui/layout/relative.html", "group":"", "keywords": ["relativelayout"], "tags": ["relativelayout"], "image":"images/ui/relativelayout.png", "lang":"en", "type":"guide" }, { "title":"Table", "titleFriendly":"", "summary":"TableLayout is a ViewGroup that displays child View elements in rows and columns. TableLayout positions its children into rows and columns. TableLayout containers do not display border lines for their rows, columns, or cells. The table will have as many…", "url":"guide/topics/ui/layout/grid.html", "group":"", "keywords": [], "tags": [], "image":"images/ui/gridlayout.png", "lang":"en", "type":"guide" }, { "title":"List View", "titleFriendly":"", "summary":"ListView is a view group that displays a list of scrollable items. The list items are automatically inserted to the list using an Adapter that pulls content from a source such as an array or database query and converts each item result into a view that…", "url":"guide/topics/ui/layout/listview.html", "group":"", "keywords": ["listview"], "tags": ["listview"], "image":"images/ui/listview.png", "lang":"en", "type":"guide" }, { "title":"Linear Layout", "titleFriendly":"", "summary":"LinearLayout is a view group that aligns all children in a single direction, vertically or horizontally. You can specify the layout direction with the LinearLayout are stacked one after the other, so a vertical list will only have one child per row, no…", "url":"guide/topics/ui/layout/linear.html", "group":"", "keywords": ["linearlayout"], "tags": ["linearlayout"], "image":"images/ui/linearlayout.png", "lang":"en", "type":"guide" }, { "title":"User Interface", "titleFriendly":"", "summary":"As Ice Cream Sandwich rolls out to more devices, it’s important that you begin to migrate your designs to the action bar in order to promote a consistent Android user experience. Ice Cream Sandwich (ICS) sports two new widgets that have been designed …", "url":"guide/topics/ui/index.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"Layouts", "titleFriendly":"", "summary":"A layout defines the visual structure for a user interface, such as the UI for an activity or app widget . You can declare a layout in two ways: The Android framework gives you the flexibility to use either or both of these methods for declaring and managing…", "url":"guide/topics/ui/declaring-layout.html", "group":"", "keywords": ["view","viewgroup"], "tags": ["view","viewgroup"], "image":"images/layoutparams.png", "lang":"en", "type":"guide" }, { "title":"Custom Components", "titleFriendly":"", "summary":"Android offers a sophisticated and powerful componentized model for building your UI, based on the fundamental layout classes: View and ViewGroup. To start with, the platform includes a variety of prebuilt View and ViewGroup subclasses — called widgets…", "url":"guide/topics/ui/custom-components.html", "group":"", "keywords": ["view","widget"], "tags": ["view","widget"], "image":"", "lang":"en", "type":"guide" }, { "title":"How Android Draws Views", "titleFriendly":"", "summary":"When an Activity receives focus, it will be requested to draw its layout. The Android framework will handle the procedure for drawing, but the Activity must provide the root node of its layout hierarchy. Drawing begins with the root node of the layout…", "url":"guide/topics/ui/how-android-draws.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"Notifications", "titleFriendly":"", "summary":"A notification is a message you can display to the user outside of your application's normal UI. When you tell the system to issue a notification, it first appears as an icon in the notification area . To see the details of the notification, the user…", "url":"guide/topics/ui/notifiers/notifications.html", "group":"", "keywords": [], "tags": [], "image":"images/ui/notifications/notification_area.png", "lang":"en", "type":"guide" }, { "title":"Toasts", "titleFriendly":"", "summary":"A toast provides simple feedback about an operation in a small popup. It only fills the amount of space required for the message and the current activity remains visible and interactive. For example, navigating away from an email before you send it triggers…", "url":"guide/topics/ui/notifiers/toasts.html", "group":"", "keywords": [], "tags": [], "image":"images/toast.png", "lang":"en", "type":"guide" }, { "title":"Input Events", "titleFriendly":"", "summary":"On Android, there's more than one way to intercept the events from a user's interaction with your application. When considering events within your user interface, the approach is to capture the events from the specific View object that the user…", "url":"guide/topics/ui/ui-events.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"AdapterView", "titleFriendly":"", "summary":"Note that it is necessary to have the People._ID column in projection used with CursorAdapter or else you will get an exception. If, during the course of your application's life, you change the underlying data that is read by your Adapter, you should…", "url":"guide/topics/ui/binding.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"Drag and Drop", "titleFriendly":"", "summary":"With the Android drag/drop framework, you can allow your users to move data from one View to another View in the current layout using a graphical drag and drop gesture. The framework includes a drag event class, drag listeners, and helper methods …", "url":"guide/topics/ui/drag-drop.html", "group":"", "keywords": ["clipdata","dragevent","onlongclicklistener"], "tags": ["clipdata","dragevent","onlongclicklistener"], "image":"", "lang":"en", "type":"guide" }, { "title":"<grant-uri-permission>", "titleFriendly":"", "summary":"Specifies which data subsets of the parent content provider permission can be granted for. Data subsets are indicated by the path part of a true", permission can be granted for any the data under the provider's purview. However, if that attribute…", "url":"guide/topics/manifest/grant-uri-permission-element.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"<meta-data>", "titleFriendly":"", "summary":"A name-value pair for an item of additional, arbitrary data that can be supplied to the parent component. A component element can contain any number of Bundle object and made available to the component as the metaData field. Ordinary values are specified…", "url":"guide/topics/manifest/meta-data-element.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"<manifest>", "titleFriendly":"", "summary":"The root element of the AndroidManifest.xml file. It must contain an <application> element and specify package attributes.…", "url":"guide/topics/manifest/manifest-element.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"<service>", "titleFriendly":"", "summary":"Declares a service (a Service subclass) as one of the application's components. Unlike activities, services lack a visual user interface. They're used to implement long-running background operations or a rich communications API that can be called…", "url":"guide/topics/manifest/service-element.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"<receiver>", "titleFriendly":"", "summary":"Declares a broadcast receiver (a BroadcastReceiver subclass) as one of the application's components. Broadcast receivers enable applications to receive intents that are broadcast by the system or by other applications, even when other components of…", "url":"guide/topics/manifest/receiver-element.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"App Manifest", "titleFriendly":"", "summary":"The manifest file presents essential information about your app to the Android system, information the system must have before it can run any of the app's code.…", "url":"guide/topics/manifest/manifest-intro.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"<uses-library>", "titleFriendly":"", "summary":"All of the android packages (such as app, content, view, and widget) are in the default library that all applications are automatically linked against. However, some packages (such as maps) are in separate libraries that are not automatically linked. …", "url":"guide/topics/manifest/uses-library-element.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"<application>", "titleFriendly":"", "summary":"The declaration of the application. This element contains subelements that declare each of the application's components and has attributes that can affect all the components. Many of these attributes (such as icon, label, permission, process, taskAffinity…", "url":"guide/topics/manifest/application-element.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"<uses-feature>", "titleFriendly":"", "summary":"Declares a single hardware or software feature that is used by the application. The purpose of a <uses-feature> declaration is to inform any external entity of the set of hardware and software features on which your application depends. The element…", "url":"guide/topics/manifest/uses-feature-element.html", "group":"", "keywords": ["filtering","features","google play filters","permissions"], "tags": ["filtering","features","googleplayfilters","permissions"], "image":"", "lang":"en", "type":"guide" }, { "title":"<supports-gl-texture>", "titleFriendly":"", "summary":"Declares a single GL texture compression format that is supported by the application. An application "supports" a GL texture compression format if it is capable of providing texture assets that are compressed in that format, once the application…", "url":"guide/topics/manifest/supports-gl-texture-element.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"<activity-alias>", "titleFriendly":"", "summary":"An alias for an activity, named by the targetActivity attribute. The target must be in the same application as the alias and it must be declared before the alias in the manifest. The alias presents the target activity as a independent entity. It can have…", "url":"guide/topics/manifest/activity-alias-element.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"<data>", "titleFriendly":"", "summary":"Adds a data specification to an intent filter. The specification can be just a data type (the mimeType attribute), just a URI, or both a data type and a URI. A URI is specified by separate attributes for each of its parts: port attribute and all the path…", "url":"guide/topics/manifest/data-element.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"<action>", "titleFriendly":"", "summary":"Adds an action to an intent filter. An <intent-filter> element must contain one or more {@code <action>} elements. If it doesn't contain any, no Intent objects will get through the filter. See Intents and Intent Filters for details on …", "url":"guide/topics/manifest/action-element.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"<activity>", "titleFriendly":"", "summary":"Declares an activity (an Activity subclass) that implements part of the application's visual user interface. All activities must be represented by {@code <activity>} elements in the manifest file. Any that are not declared there will not be …", "url":"guide/topics/manifest/activity-element.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"<provider>", "titleFriendly":"", "summary":"Declares a content provider component. A content provider is a subclass of ContentProvider that supplies structured access to data managed by the application. All content providers in your application must be defined in a query(), which among other arguments…", "url":"guide/topics/manifest/provider-element.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"<permission-tree>", "titleFriendly":"", "summary":"Declares the base name for a tree of permissions. The application takes ownership of all names within the tree. It can dynamically add new permissions to the tree by calling addPermission(). Names within the tree are separated by periods ('taxes, …", "url":"guide/topics/manifest/permission-tree-element.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"<category>", "titleFriendly":"", "summary":"Adds a category name to an intent filter. See Intents and Intent Filters for details on intent filters and the role of category specifications within a filter.…", "url":"guide/topics/manifest/category-element.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"<compatible-screens>", "titleFriendly":"", "summary":"Specifies each screen configuration with which the application is compatible. Only one instance of the {@code <compatible-screens>} element is allowed in the manifest, but it can contain multiple <screen> elements. Each <screen> element…", "url":"guide/topics/manifest/compatible-screens-element.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"<permission-group>", "titleFriendly":"", "summary":"Declares a name for a logical grouping of related permissions. Individual permission join the group through the permissionGroup attribute of the <permission> element. Members of a group are presented together in the user interface. Note that this…", "url":"guide/topics/manifest/permission-group-element.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"<intent-filter>", "titleFriendly":"", "summary":"Specifies the types of intents that an activity, service, or broadcast receiver can respond to. An intent filter declares the capabilities of its parent component — what an activity or service can do and what types of broadcasts a receiver can handle.…", "url":"guide/topics/manifest/intent-filter-element.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"<uses-sdk>", "titleFriendly":"", "summary":"Lets you express an application's compatibility with one or more versions of the Android platform, by means of an API Level integer. The API Level expressed by an application will be compared to the API Level of a given Android system, which may vary…", "url":"guide/topics/manifest/uses-sdk-element.html", "group":"", "keywords": ["api levels","sdk version","minsdkversion","targetsdkversion","maxsdkversion"], "tags": ["apilevels","sdkversion","minsdkversion","targetsdkversion","maxsdkversion"], "image":"", "lang":"en", "type":"guide" }, { "title":"<uses-permission>", "titleFriendly":"", "summary":"Requests a permission that the application must be granted in order for it to operate correctly. Permissions are granted by the user when the application is installed, not while it's running. For more information on permissions, see the Permissions…", "url":"guide/topics/manifest/uses-permission-element.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"<path-permission>", "titleFriendly":"", "summary":"Defines the path and required permissions for a specific subset of data within a content provider. This element can be specified multiple times to supply multiple paths.…", "url":"guide/topics/manifest/path-permission-element.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"<uses-configuration>", "titleFriendly":"", "summary":"Indicates what hardware and software features the application requires. For example, an application might specify that it requires a physical keyboard or a particular navigation device, like a trackball. The specification is used to avoid installing the…", "url":"guide/topics/manifest/uses-configuration-element.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"<supports-screens>", "titleFriendly":"", "summary":"Lets you specify the screen sizes your application supports and enable screen compatibility mode for screens larger than what your application supports. It's important that you always use this element in your application to specify the screen sizes…", "url":"guide/topics/manifest/supports-screens-element.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"<permission>", "titleFriendly":"", "summary":"Declares a security permission that can be used to limit access to specific components or features of this or other applications. See the Permissions section in the introduction, and the Security and Permissions document for more information on how permissions…", "url":"guide/topics/manifest/permission-element.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"<instrumentation>", "titleFriendly":"", "summary":"Declares an Instrumentation class that enables you to monitor an application's interaction with the system. The Instrumentation object is instantiated before any of the application's components.…", "url":"guide/topics/manifest/instrumentation-element.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"System Permissions", "titleFriendly":"", "summary":"Android is a privilege-separated operating system, in which each application runs with a distinct system identity (Linux user ID and group ID). Parts of the system are also separated into distinct identities. Linux thereby isolates applications from each…", "url":"guide/topics/security/permissions.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"Environment Sensors", "titleFriendly":"", "summary":"The Android platform provides four sensors that let you monitor various environmental properties. You can use these sensors to monitor relative ambient humidity, illuminance, ambient pressure, and ambient temperature near an Android-powered device. All…", "url":"guide/topics/sensors/sensors_environment.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"Motion Sensors", "titleFriendly":"", "summary":"The Android platform provides several sensors that let you monitor the motion of a device. Two of these sensors are always hardware-based (the accelerometer and gyroscope), and three of these sensors can be either hardware-based or software-based (the…", "url":"guide/topics/sensors/sensors_motion.html", "group":"", "keywords": ["sensorevent","accelerometer","gyroscope","gravity","rotation","stepcounter"], "tags": ["sensorevent","accelerometer","gyroscope","gravity","rotation","stepcounter"], "image":"images/axis_globe.png", "lang":"en", "type":"guide" }, { "title":"Location and Sensors APIs", "titleFriendly":"", "summary":"However, there’s a new wrinkle: recently, a few devices have shipped (see here and here) that run Android on screens that are naturally landscape in their orientation. That is, when held in the default position, the screens are wider than they are tall…", "url":"guide/topics/sensors/index.html", "group":"", "keywords": ["location","sensors"], "tags": ["location","sensors"], "image":"", "lang":"en", "type":"guide" }, { "title":"Sensors Overview", "titleFriendly":"", "summary":"Most Android-powered devices have built-in sensors that measure motion, orientation, and various environmental conditions. These sensors are capable of providing raw data with high precision and accuracy, and are useful if you want to monitor three-dimensional…", "url":"guide/topics/sensors/sensors_overview.html", "group":"", "keywords": [], "tags": [], "image":"images/axis_device.png", "lang":"en", "type":"guide" }, { "title":"Position Sensors", "titleFriendly":"", "summary":"The Android platform provides two sensors that let you determine the position of a device: the geomagnetic field sensor and the orientation sensor. The Android platform also provides a sensor that lets you determine how close the face of a device is to…", "url":"guide/topics/sensors/sensors_position.html", "group":"", "keywords": ["sensorevent","orientation","proximity"], "tags": ["sensorevent","orientation","proximity"], "image":"", "lang":"en", "type":"guide" }, { "title":"App Widgets", "titleFriendly":"", "summary":"App Widgets are miniature application views that can be embedded in other applications (such as the Home screen) and receive periodic updates. These views are referred to as Widgets in the user interface, and you can publish one with an App Widget provider…", "url":"guide/topics/appwidgets/index.html", "group":"", "keywords": ["home","appwidgetprovider"], "tags": ["home","appwidgetprovider"], "image":"images/appwidgets/appwidget.png", "lang":"en", "type":"guide" }, { "title":"App Widget Host", "titleFriendly":"", "summary":"The Android Home screen available on most Android devices allows the user to embed app widgets for quick access to content. If you're building a Home replacement or a similar app, you can also allow the user to embed app widgets by implementing an…", "url":"guide/topics/appwidgets/host.html", "group":"", "keywords": ["appwidgethost","home screen","launcher"], "tags": ["appwidgethost","homescreen","launcher"], "image":"", "lang":"en", "type":"guide" }, { "title":"Appendix", "titleFriendly":"", "summary":"", "url":"guide/appendix/index.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"Supported Media Formats", "titleFriendly":"", "summary":"This document describes the media codec, container, and network protocol support provided by the Android platform. As an application developer, you are free to make use of any media codec that is available on any Android-powered device, including those…", "url":"guide/appendix/media-formats.html", "group":"", "keywords": ["video","audio","mpeg","mp4","m4a","mp3","3gp","3gpp","flac","wave","wav"], "tags": ["video","audio","mpeg","mp4","m4a","mp3","3gp","3gpp","flac","wave","wav"], "image":"", "lang":"en", "type":"guide" }, { "title":"", "titleFriendly":"", "summary":"You should have already been redirected by your browser. Please follow this link .…", "url":"guide/appendix/faq/index.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"", "titleFriendly":"", "summary":"You should have already been redirected by your browser. Please follow this link .…", "url":"guide/appendix/faq/licensingandoss.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"", "titleFriendly":"", "summary":"You should have already been redirected by your browser. Please follow this link .…", "url":"guide/appendix/faq/security.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"", "titleFriendly":"", "summary":"You should have already been redirected by your browser. Please follow this link .…", "url":"guide/appendix/faq/framework.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"", "titleFriendly":"", "summary":"You should have already been redirected by your browser. Please follow this link .…", "url":"guide/appendix/faq/troubleshooting.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"", "titleFriendly":"", "summary":"You should have already been redirected by your browser. Please follow this link .…", "url":"guide/appendix/faq/commontasks.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"Supporting Tablets and Handsets", "titleFriendly":"", "summary":"The Android platform runs on a variety of screen sizes and the system gracefully resizes your application's UI to fit each one. Typically, all you need to do is design your UI to be flexible and optimize some elements for different sizes by providing…", "url":"guide/practices/tablets-and-handsets.html", "group":"", "keywords": [], "tags": [], "image":"images/fundamentals/fragments.png", "lang":"en", "type":"guide" }, { "title":"Supporting Multiple Screens", "titleFriendly":"", "summary":"Nanaging UIs for the best display on multiple screen sizes.", "url":"guide/practices/screens_support.html", "group":"", "keywords": [], "tags": ["multiplescreens"], "image":"images/screens_support/screens-ranges.png", "lang":"en", "type":"guide" }, { "title":"Verifying App Behavior on the Android Runtime (ART)", "titleFriendly":"", "summary":"With Android 4.4, we are beginning to roll out a new Android runtime, ART . This runtime offers a number of new features that improve performance and smoothness of the Android platform and apps. (You can find more information about ART's new features…", "url":"guide/practices/verifying-apps-art.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"Designing for Seamlessness", "titleFriendly":"", "summary":"Even if your application is fast and responsive, certain design decisions can still cause problems for users — because of unplanned interactions with other applications or dialogs, inadvertent loss of data, unintended blocking, and so on. To avoid these…", "url":"guide/practices/app-design/seamlessness.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"Application Design Goals", "titleFriendly":"", "summary":"When learning how to build applications on a new platform, you first learn what APIs are available and how to use them. Later, you learn the nuances of the platform. Put another way: first you learn how you can build applications; later, you learn how…", "url":"guide/practices/app-design/index.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"Supporting Different Screens in Web Apps", "titleFriendly":"", "summary":"Because Android is available on devices with a variety of screen sizes and pixel densities, you should account for these factors in your web design so your web pages always appear at the appropriate size. When targeting your web pages for Android devices…", "url":"guide/webapps/targeting.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"Best Practices for Web Apps", "titleFriendly":"", "summary":"Developing web pages and web applications for mobile devices presents a different set of challenges compared to developing a web page for the typical desktop web browser. To help you get started, the following is a list of practices you should follow …", "url":"guide/webapps/best-practices.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"Migrating to WebView in Android 4.4", "titleFriendly":"", "summary":"Android 4.4 (API level 19) introduces a new version of WebView that is based on Chromium . This change upgrades WebView performance and standards support for HTML5, CSS3, and JavaScript to match the latest web browsers. Any apps using WebView will inherit…", "url":"guide/webapps/migrating.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"Web Apps", "titleFriendly":"", "summary":"There are essentially two ways to deliver an application on Android: as a client-side application (developed using the Android SDK and installed on user devices in an APK) or as a web application (developed using web standards and accessed through a web…", "url":"guide/webapps/index.html", "group":"", "keywords": [], "tags": [], "image":"images/webapps/webapps.png", "lang":"en", "type":"guide" }, { "title":"Debugging Web Apps", "titleFriendly":"", "summary":"If you are testing your web app with a device running Android 4.4 or higher, you can remotely debug your web pages in WebView with Chrome Developer Tools, while continuing to support older versions of Android. For more information, see Remote Debugging…", "url":"guide/webapps/debugging.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" }, { "title":"Building Web Apps in WebView", "titleFriendly":"", "summary":"If you want to deliver a web application (or just a web page) as a part of a client application, you can do it using WebView. The WebView class is an extension of Android's View class that allows you to display web pages as a part of your activity…", "url":"guide/webapps/webview.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"guide" } ]; var SAMPLES_RESOURCES = [ { "title":"NavigationDrawer", "titleFriendly":"", "summary":"This example illustrates a common usage of the DrawerLayout widget in the Android support library.…", "url":"samples/NavigationDrawer/index.html", "group":"ui", "keywords": ["navigation drawer"], "tags": ["navigationdrawer"], "image":"", "lang":"en", "type":"samples" }, { "title":"FindMyPhone", "titleFriendly":"", "summary":"This sample application notifies you when you may have left your phone behind (specifically, when your companion and wearable disconnect). If you have misplaced your phone, but it is still connected to your wearable, you can also start an activity on …", "url":"samples/FindMyPhone/index.html", "group":"wearable", "keywords": ["findmyphone"], "tags": ["findmyphone"], "image":"", "lang":"en", "type":"samples" }, { "title":"GridViewPager", "titleFriendly":"", "summary":"Demonstrates how to implement a GridViewPager in your wearable app.…", "url":"samples/GridViewPager/index.html", "group":"wearable", "keywords": ["gridviewpager"], "tags": ["gridviewpager"], "image":"", "lang":"en", "type":"samples" }, { "title":"ActionBarCompat-ListPopupMenu", "titleFriendly":"", "summary":"This sample shows you how to use PopupMenu from ActionBarCompat to create a list, with each item having a dropdown menu.…", "url":"samples/ActionBarCompat-ListPopupMenu/index.html", "group":"ui", "keywords": ["actionbarcompat-listpopupmenu"], "tags": ["actionbarcompat-listpopupmenu"], "image":"", "lang":"en", "type":"samples" }, { "title":"ImmersiveMode", "titleFriendly":"", "summary":"One of the features introduced in KitKat is "immersive mode". Immersive mode gives the user the ability to show/hide the status bar and navigation bar with a swipe. To try, click the "Toggle immersive mode" button, then try swiping…", "url":"samples/ImmersiveMode/index.html", "group":"ui", "keywords": ["immersivemode"], "tags": ["immersivemode"], "image":"", "lang":"en", "type":"samples" }, { "title":"SwipeRefreshListFragment", "titleFriendly":"", "summary":"A sample which shows how to use SwipeRefreshLayout within a ListFragment to add the \'swipe-to-refresh\' gesture to a ListView, enabling the ability to trigger a refresh from swiping down on that view. This is provided through the re-usable SwipeRefreshListFragment…", "url":"samples/SwipeRefreshListFragment/index.html", "group":"ui", "keywords": ["swiperefreshlistfragment"], "tags": ["swiperefreshlistfragment"], "image":"", "lang":"en", "type":"samples" }, { "title":"MediaRecorder", "titleFriendly":"", "summary":"This sample uses the camera/camcorder as the A/V source for the MediaRecorder API. A TextureView is used as the camera preview which limits the code to API 14+. This can be easily replaced with a SurfaceView to run on older devices.…", "url":"samples/MediaRecorder/index.html", "group":"media", "keywords": ["mediarecorder"], "tags": ["mediarecorder"], "image":"", "lang":"en", "type":"samples" }, { "title":"RecipeAssistant", "titleFriendly":"", "summary":"This phone application uses the enhanced notifications API to display recipe instructions using paged notifications. After starting the application on your phone, you can browse from a short list of recipes and select one to view. Each recipe is broken…", "url":"samples/RecipeAssistant/index.html", "group":"wearable", "keywords": ["recipeassistant"], "tags": ["recipeassistant"], "image":"", "lang":"en", "type":"samples" }, { "title":"HorizontalPaging", "titleFriendly":"", "summary":"This sample demonstrates how to implement horizontal paging between fragments in applications that use ActionBar, using a ViewPager widget.…", "url":"samples/HorizontalPaging/index.html", "group":"ui", "keywords": ["horizontalpaging"], "tags": ["horizontalpaging"], "image":"", "lang":"en", "type":"samples" }, { "title":"DoneBar", "titleFriendly":"", "summary":"This sample demonstrates two alternative presentations of the action bar that are well-suited for simple data entry scenarios. In this presentation, a done bar replaces the action bar entirely, providing two direct actions to persist or dismiss changes…", "url":"samples/DoneBar/index.html", "group":"ui", "keywords": ["donebar"], "tags": ["donebar"], "image":"", "lang":"en", "type":"samples" }, { "title":"Camera2Video", "titleFriendly":"", "summary":"This sample demonstrates how to record video using Camera2 API.…", "url":"samples/Camera2Video/index.html", "group":"media", "keywords": ["camera2video"], "tags": ["camera2video"], "image":"", "lang":"en", "type":"samples" }, { "title":"BatchStepSensor", "titleFriendly":"", "summary":"This sample demonstrates the use of the two step sensors (step detector and counter) and sensor batching. It shows how to register a SensorEventListener with and without batching and shows how these events are received. The Step Detector sensor fires …", "url":"samples/BatchStepSensor/index.html", "group":"sensors", "keywords": ["batchstepsensor"], "tags": ["batchstepsensor"], "image":"", "lang":"en", "type":"samples" }, { "title":"ActionBarCompat-Styled", "titleFriendly":"", "summary":"This sample shows you how to use ActionBarCompat with a customized theme. It utilizes a split action bar when running on a device with a narrow display, and show three tabs.…", "url":"samples/ActionBarCompat-Styled/index.html", "group":"ui", "keywords": ["actionbarcompat-styled"], "tags": ["actionbarcompat-styled"], "image":"", "lang":"en", "type":"samples" }, { "title":"BluetoothLeGatt", "titleFriendly":"", "summary":"This sample demonstrates how to use the Bluetooth LE Generic Attribute Profile (GATT) to transmit arbitrary data between devices.…", "url":"samples/BluetoothLeGatt/index.html", "group":"connectivity", "keywords": ["bluetoothlegatt"], "tags": ["bluetoothlegatt"], "image":"", "lang":"en", "type":"samples" }, { "title":"RevealEffectBasic", "titleFriendly":"", "summary":"", "url":"samples/RevealEffectBasic/index.html", "group":"ui", "keywords": ["revealeffectbasic"], "tags": ["revealeffectbasic"], "image":"", "lang":"en", "type":"samples" }, { "title":"NetworkConnect", "titleFriendly":"", "summary":"This sample demonstrates how to connect to the network and fetch raw HTML using HttpURLConnection. AsyncTask is used to perform the fetch on a background thread.…", "url":"samples/NetworkConnect/index.html", "group":"connectivity", "keywords": ["networkconnect"], "tags": ["networkconnect"], "image":"", "lang":"en", "type":"samples" }, { "title":"DocumentCentricApps", "titleFriendly":"", "summary":"This sample shows the basic usage of the new \"Document Centric Apps\" API. It let\'s you create new documents in the system overview menu and persists its state through reboots. If \"Task per document\" is checked a new task will…", "url":"samples/DocumentCentricApps/index.html", "group":"ui", "keywords": ["documentcentricrecents"], "tags": ["documentcentricrecents"], "image":"", "lang":"en", "type":"samples" }, { "title":"Geofencing", "titleFriendly":"", "summary":"When a user enters the vicinity of the Android building (B44) or the Yerba Buena Gardens near the Moscone center in San Francisco, a notification silently appears on his/her wearable with an option to check in. This notification automatically disappears…", "url":"samples/Geofencing/index.html", "group":"wearable", "keywords": ["geofencing"], "tags": ["geofencing"], "image":"", "lang":"en", "type":"samples" }, { "title":"EmbeddedApp", "titleFriendly":"", "summary":"This simple app demonstrates how to embed a wearable app into a phone app.…", "url":"samples/EmbeddedApp/index.html", "group":"wearable", "keywords": ["embeddedapp"], "tags": ["embeddedapp"], "image":"", "lang":"en", "type":"samples" }, { "title":"JobScheduler", "titleFriendly":"", "summary":"Demonstration of the JobScheduler API, which provides an interface for scheduling background tasks when certain tasks apply.…", "url":"samples/JobScheduler/index.html", "group":"background", "keywords": ["jobscheduler"], "tags": ["jobscheduler"], "image":"", "lang":"en", "type":"samples" }, { "title":"TextLinkify", "titleFriendly":"", "summary":"This sample illustrates how links can be added to a TextView. This can be done either automatically by setting the "autoLink" property or explicitly.…", "url":"samples/TextLinkify/index.html", "group":"views", "keywords": ["textlinkify"], "tags": ["textlinkify"], "image":"", "lang":"en", "type":"samples" }, { "title":"WatchViewStub", "titleFriendly":"", "summary":"This sample demonstrates how to specify different layouts for round and rectangular screens.…", "url":"samples/WatchViewStub/index.html", "group":"wearable", "keywords": ["watchviewstub"], "tags": ["watchviewstub"], "image":"", "lang":"en", "type":"samples" }, { "title":"ActivityInstrumentation", "titleFriendly":"", "summary":"This sample provides a basic example of using an InstrumentationTest to probe the internal state of an Activity.…", "url":"samples/ActivityInstrumentation/index.html", "group":"testing", "keywords": ["activityinstrumentation"], "tags": ["activityinstrumentation"], "image":"", "lang":"en", "type":"samples" }, { "title":"StorageProvider", "titleFriendly":"", "summary":"\nA simple implementation of a documents provider using the storage access framework in Android 4.4.…", "url":"samples/StorageProvider/index.html", "group":"content", "keywords": ["mycloud"], "tags": ["mycloud"], "image":"", "lang":"en", "type":"samples" }, { "title":"MediaEffects", "titleFriendly":"", "summary":"This sample shows how to use the Media Effects APIs that were introduced in Android 4.0. These APIs let you apply effects to image frames represented as OpenGL ES 2.0 textures. Image frames can be images loaded from disk, frames from the device\'s…", "url":"samples/MediaEffects/index.html", "group":"media", "keywords": ["mediaeffects"], "tags": ["mediaeffects"], "image":"", "lang":"en", "type":"samples" }, { "title":"AdvancedImmersiveMode", "titleFriendly":"", "summary":"\n\n\n\"Immersive Mode\", added in Android 4.4, improves the \"hide full screen\" and \"hide nav bar\" modes, by letting users swipe the bars in and out. This sample lets the user experiment with immersive mode by seeing …", "url":"samples/AdvancedImmersiveMode/index.html", "group":"ui", "keywords": ["advancedimmersivemode"], "tags": ["advancedimmersivemode"], "image":"", "lang":"en", "type":"samples" }, { "title":"Interpolator", "titleFriendly":"", "summary":"This sample demonstrates the use of animation interpolators and path animations for Material Design. It shows how an ObjectAnimator is used to animate two properties of a view (scale X and Y) along a path.…", "url":"samples/Interpolator/index.html", "group":"ui", "keywords": ["interpolator"], "tags": ["interpolator"], "image":"", "lang":"en", "type":"samples" }, { "title":"WatchFace", "titleFriendly":"", "summary":"This sample demonstrates how to create watch faces for android wear and includes a phone app and a wearable app. The wearable app has a variety of watch faces including analog, digital, opengl, calendar, etc. It also includes a watch-side configuration…", "url":"samples/WatchFace/index.html", "group":"wearable", "keywords": ["watchface"], "tags": ["watchface"], "image":"", "lang":"en", "type":"samples" }, { "title":"LNotifications", "titleFriendly":"", "summary":"This sample demonstrates how new features for notifications introduced in Android L are used such as Heads-Up notifications, visibility, people, category and priority metadata. (Priority metadata has been present since Jelly Bean, but actually unused)…", "url":"samples/LNotifications/index.html", "group":"notification", "keywords": ["lnotifications sample"], "tags": ["lnotificationssample"], "image":"", "lang":"en", "type":"samples" }, { "title":"MediaRouter", "titleFriendly":"", "summary":"Demonstrates how to create a custom media route provider.…", "url":"samples/MediaRouter/index.html", "group":"media", "keywords": ["mediarouter"], "tags": ["mediarouter"], "image":"", "lang":"en", "type":"samples" }, { "title":"BasicRenderScript", "titleFriendly":"", "summary":"BasicRenderScript sample demonstrates basic steps how to use renderScript. In the sample, it performs graphical filter operation on a image with renderScript.…", "url":"samples/BasicRenderScript/index.html", "group":"renderscript", "keywords": ["basicrenderscript"], "tags": ["basicrenderscript"], "image":"", "lang":"en", "type":"samples" }, { "title":"BasicAndroidKeyStore", "titleFriendly":"", "summary":"Welcome to the Basic Android Key Store sample!\n\n This sample demonstrates how to use the Android Key Store to safely create and store encryption keys that only your application can access. You can also sign data using those keys.\n\n To create a new…", "url":"samples/BasicAndroidKeyStore/index.html", "group":"security", "keywords": ["basicandroidkeystore"], "tags": ["basicandroidkeystore"], "image":"", "lang":"en", "type":"samples" }, { "title":"BasicSyncAdapter", "titleFriendly":"", "summary":"This sample demonstrates using SyncAdapter to fetch background data for an app that doesn\'t require a user-visible account type or 2-way synchronization. \n\nThis sample periodically downloads the feed from the Android Developer Blog and caches the…", "url":"samples/BasicSyncAdapter/index.html", "group":"connectivity", "keywords": ["basicsyncadapter"], "tags": ["basicsyncadapter"], "image":"", "lang":"en", "type":"samples" }, { "title":"BasicManagedProfile", "titleFriendly":"", "summary":"This sample demonstrates how to create a managed profile. You can also learn how to enable or disable other apps and how to set restrictions to them. Intents can be configured to be forwarded between primary account and managed profile. Finally, you can…", "url":"samples/BasicManagedProfile/index.html", "group":"admin", "keywords": ["basicmanagedprofile"], "tags": ["basicmanagedprofile"], "image":"", "lang":"en", "type":"samples" }, { "title":"AdapterTransition", "titleFriendly":"", "summary":"Transition cannot be directly applied to AdapterViews. In this sample, we demonstrate how to create an overlay layout and run a Transition on it. Press the action bar button to toggle between ListView and GridView.…", "url":"samples/AdapterTransition/index.html", "group":"ui", "keywords": ["adaptertransition"], "tags": ["adaptertransition"], "image":"", "lang":"en", "type":"samples" }, { "title":"BasicImmersiveMode", "titleFriendly":"", "summary":"\"Immersive Mode\" is a new UI mode which improves \"hide full screen\" and \"hide nav bar\" modes, by letting users swipe the bars in and out. This sample demonstrates how to enable and disable immersive mode programmatically…", "url":"samples/BasicImmersiveMode/index.html", "group":"ui", "keywords": ["basicimmersivemode"], "tags": ["basicimmersivemode"], "image":"", "lang":"en", "type":"samples" }, { "title":"SkeletonWearableApp", "titleFriendly":"", "summary":"This sample is a mostly empty wearable app that implements a fullscreen activity conforming to Android Wear best practices. Included in the sample are examples of GridViewPager, DelayedConfirmationView, and DismissOverlayView. Developers who require a…", "url":"samples/SkeletonWearableApp/index.html", "group":"wearable", "keywords": ["skeletonwearableapp"], "tags": ["skeletonwearableapp"], "image":"", "lang":"en", "type":"samples" }, { "title":"SynchronizedNotifications", "titleFriendly":"", "summary":"This sample creates simple or synchronized notifications on a device and an Android Wear watch.…", "url":"samples/SynchronizedNotifications/index.html", "group":"wearable", "keywords": ["synchronizednotifications"], "tags": ["synchronizednotifications"], "image":"", "lang":"en", "type":"samples" }, { "title":"BasicMediaDecoder", "titleFriendly":"", "summary":"This activity uses a TextureView to render the frames of a video decoded using the MediaCodec API.…", "url":"samples/BasicMediaDecoder/index.html", "group":"media", "keywords": ["basicmediadecoder"], "tags": ["basicmediadecoder"], "image":"", "lang":"en", "type":"samples" }, { "title":"CardEmulation", "titleFriendly":"", "summary":"This sample demonstrates how to emulate an NFC card, using the "host card emulation" feature added in Android 4.4. This sample makes the device appear as a loyalty card whenever the screen is on and the user taps their device on an appropriately…", "url":"samples/CardEmulation/index.html", "group":"connectivity", "keywords": ["cardemulation"], "tags": ["cardemulation"], "image":"", "lang":"en", "type":"samples" }, { "title":"BasicMultitouch", "titleFriendly":"", "summary":"This samples demonstrates the use of MotionEvent properties to keep track of individual touches across multiple touch events. \n\nTouch the screen with multiple fingers to show that the pointer id (also represented by a colour) does not change as new …", "url":"samples/BasicMultitouch/index.html", "group":"input", "keywords": ["basicmultitouch"], "tags": ["basicmultitouch"], "image":"", "lang":"en", "type":"samples" }, { "title":"ActivitySceneTransitionBasic", "titleFriendly":"", "summary":"Demonstrates how to the use Activity scene transitions when transitions from one Activity to another. Uses a combination of changeImageTransform and changeBounds to nicely transition a grid of images to an Activity with a large image and detail text.…", "url":"samples/ActivitySceneTransitionBasic/index.html", "group":"ui", "keywords": ["activityscenetransitionbasic"], "tags": ["activityscenetransitionbasic"], "image":"", "lang":"en", "type":"samples" }, { "title":"CustomTransition", "titleFriendly":"", "summary":"This sample demonstrates how to create and use a custom Transition.…", "url":"samples/CustomTransition/index.html", "group":"ui", "keywords": ["customtransition"], "tags": ["customtransition"], "image":"", "lang":"en", "type":"samples" }, { "title":"RecyclerView", "titleFriendly":"", "summary":"Demonstration of using RecyclerView with a LinearLayoutManager and GridLayoutManager to create a vertical list. Tap \"SHOW LOG\" to view elements as they are bound to their ViewHolder. The log also displays elements that you tap.…", "url":"samples/RecyclerView/index.html", "group":"ui", "keywords": ["recyclerview"], "tags": ["recyclerview"], "image":"", "lang":"en", "type":"samples" }, { "title":"FloatingActionButtonBasic", "titleFriendly":"", "summary":"This sample shows the two sizes of Floating Action Buttons and how to interact with them.…", "url":"samples/FloatingActionButtonBasic/index.html", "group":"ui", "keywords": ["floatingactionbuttonbasic"], "tags": ["floatingactionbuttonbasic"], "image":"", "lang":"en", "type":"samples" }, { "title":"SwipeRefreshMultipleViews", "titleFriendly":"", "summary":"A sample which shows how to use SwipeRefreshLayout to add the \'swipe-to-refresh\' gesture to a layout with multiple children, enabling the ability to trigger a refresh from swiping down on the visible view. In this sample, SwipeRefreshLayout …", "url":"samples/SwipeRefreshMultipleViews/index.html", "group":"ui", "keywords": ["swiperefreshmultipleviews"], "tags": ["swiperefreshmultipleviews"], "image":"", "lang":"en", "type":"samples" }, { "title":"RepeatingAlarm", "titleFriendly":"", "summary":"Introductory text that explains what the sample is intended to demonstrate. Edit in template-params.xml.…", "url":"samples/RepeatingAlarm/index.html", "group":"background", "keywords": ["repeatingalarm"], "tags": ["repeatingalarm"], "image":"", "lang":"en", "type":"samples" }, { "title":"FragmentTransition", "titleFriendly":"", "summary":"This sample demonstrates how to start a transition right after a fragment transaction.…", "url":"samples/FragmentTransition/index.html", "group":"ui", "keywords": ["fragmenttransition"], "tags": ["fragmenttransition"], "image":"", "lang":"en", "type":"samples" }, { "title":"DataLayer", "titleFriendly":"", "summary":"Sample demonstrating the usage of the GoogleApiClient in order to send data from a handheld device to a wearable. The data transmitted is a picture taken by the user of the sample.…", "url":"samples/DataLayer/index.html", "group":"wearable", "keywords": ["datalayer"], "tags": ["datalayer"], "image":"", "lang":"en", "type":"samples" }, { "title":"CustomNotifications", "titleFriendly":"", "summary":"This sample demonstrates notifications with custom content views.…", "url":"samples/CustomNotifications/index.html", "group":"notification", "keywords": ["customnotifications"], "tags": ["customnotifications"], "image":"", "lang":"en", "type":"samples" }, { "title":"SlidingTabsColors", "titleFriendly":"", "summary":"A more advanced sample which shows how to use SlidingTabLayout to display a custom ViewPager title strip, with custom coloring for each tab.…", "url":"samples/SlidingTabsColors/index.html", "group":"ui", "keywords": ["slidingtabscolors"], "tags": ["slidingtabscolors"], "image":"", "lang":"en", "type":"samples" }, { "title":"BasicNotifications", "titleFriendly":"", "summary":"This sample demonstrates how to display events in the system\'s notification bar. The NotificationCompat API is used for compatibility with older devices, running Android 2.2 (Froyo) or newer.…", "url":"samples/BasicNotifications/index.html", "group":"notification", "keywords": ["basicnotifications"], "tags": ["basicnotifications"], "image":"", "lang":"en", "type":"samples" }, { "title":"BasicMediaRouter", "titleFriendly":"", "summary":"This sample demonstrates the use of the MediaRouter API to display content on a secondary display.\n\nUse the "Media Route Action Item" in the ActionBar to select an output device. If your device supports Miracast wireless displays, you may …", "url":"samples/BasicMediaRouter/index.html", "group":"media", "keywords": ["basicmediarouter"], "tags": ["basicmediarouter"], "image":"", "lang":"en", "type":"samples" }, { "title":"AppRestrictionEnforcer", "titleFriendly":"", "summary":"This sample demonstrates how to set restrictions to other apps as a profile owner. Use AppRestrictionSchema sample as a app with available restrictions.…", "url":"samples/AppRestrictionEnforcer/index.html", "group":"admin", "keywords": ["apprestrictionenforcer"], "tags": ["apprestrictionenforcer"], "image":"", "lang":"en", "type":"samples" }, { "title":"MessagingService", "titleFriendly":"", "summary":"This sample shows a simple service that sends notifications using NotificationCompat. In addition to sending a notification, it also extends the notification with a CarExtender to make it compatible with Android Auto. Each unread conversation from a user…", "url":"samples/MessagingService/index.html", "group":"notification", "keywords": ["messagingservice"], "tags": ["messagingservice"], "image":"", "lang":"en", "type":"samples" }, { "title":"BasicTransition", "titleFriendly":"", "summary":"This sample demonstrates the basic use of the transition framework introduced in KitKat. Select each of the RadioButtons to switch between the Scenes.…", "url":"samples/BasicTransition/index.html", "group":"ui", "keywords": ["basictransition"], "tags": ["basictransition"], "image":"", "lang":"en", "type":"samples" }, { "title":"PdfRendererBasic", "titleFriendly":"", "summary":"This sample demonstrates how to use PdfRenderer to display PDF documents on the screen.…", "url":"samples/PdfRendererBasic/index.html", "group":"ui", "keywords": ["pdfrendererbasic"], "tags": ["pdfrendererbasic"], "image":"", "lang":"en", "type":"samples" }, { "title":"Camera2Basic", "titleFriendly":"", "summary":"This sample demonstrates the basic use of Camera2 API. Check the source code to see how you can display camera preview and take pictures.…", "url":"samples/Camera2Basic/index.html", "group":"media", "keywords": ["camera2basic"], "tags": ["camera2basic"], "image":"", "lang":"en", "type":"samples" }, { "title":"AppRestrictionSchema", "titleFriendly":"", "summary":"This sample shows how to use app restrictions. This application has one boolean restriction with a key \"can_say_hello\" that defines whether the only feature of this app (press the button to show \"Hello\" message) is enabled or disabled…", "url":"samples/AppRestrictionSchema/index.html", "group":"admin", "keywords": ["apprestrictionschema"], "tags": ["apprestrictionschema"], "image":"", "lang":"en", "type":"samples" }, { "title":"AgendaData", "titleFriendly":"", "summary":"Syncs calendar events to your wearable at the press of a button, using the Wearable DataApi to transmit data such as event time, description, and background image. The DataItems can be deleted individually via an action on the event notifications, or …", "url":"samples/AgendaData/index.html", "group":"wearable", "keywords": ["agendadata"], "tags": ["agendadata"], "image":"", "lang":"en", "type":"samples" }, { "title":"BorderlessButtons", "titleFriendly":"", "summary":"This sample demonstrates the use of borderless buttons, bottom button bars (OK and Cancel) and dividers to establish visual structure.…", "url":"samples/BorderlessButtons/index.html", "group":"ui", "keywords": ["borderlessbuttons"], "tags": ["borderlessbuttons"], "image":"", "lang":"en", "type":"samples" }, { "title":"BasicNetworking", "titleFriendly":"", "summary":"This sample demonstrates how to use the ConnectivityManager to determine if you have a network connection, and if so, what type of connection it is. \n\nA "NetworkInfo" object is retrieved from the ConnectivityManager, which contains information…", "url":"samples/BasicNetworking/index.html", "group":"connectivity", "keywords": ["basicnetworking"], "tags": ["basicnetworking"], "image":"", "lang":"en", "type":"samples" }, { "title":"ActionBarCompat-ShareActionProvider", "titleFriendly":"", "summary":"This sample shows you how a provide a context-sensitive ShareActionProvider with ActionBarCompat, backwards compatible to API v7.…", "url":"samples/ActionBarCompat-ShareActionProvider/index.html", "group":"ui", "keywords": ["actionbarcompat-shareactionprovider"], "tags": ["actionbarcompat-shareactionprovider"], "image":"", "lang":"en", "type":"samples" }, { "title":"DocumentCentricRelinquishIdentity", "titleFriendly":"", "summary":"This sample shows how to relinquish identity to activities above it in the task stack.…", "url":"samples/DocumentCentricRelinquishIdentity/index.html", "group":"ui", "keywords": ["documentcentricrelinquishidentity"], "tags": ["documentcentricrelinquishidentity"], "image":"", "lang":"en", "type":"samples" }, { "title":"Quiz", "titleFriendly":"", "summary":"This sample uses Google Play Services Wearable Data APIs to communicate between applications on a phone and a paired wearable device. Users can create quiz questions on the phone, each of which has an associated DataItem. These DataItems are then received…", "url":"samples/Quiz/index.html", "group":"wearable", "keywords": ["quiz"], "tags": ["quiz"], "image":"", "lang":"en", "type":"samples" }, { "title":"Timer", "titleFriendly":"", "summary":"This simple wearable app allows the user to set a countdown timer. It runs independently on the wearable with no phone connection.…", "url":"samples/Timer/index.html", "group":"wearable", "keywords": ["timer"], "tags": ["timer"], "image":"", "lang":"en", "type":"samples" }, { "title":"RenderScriptIntrinsic", "titleFriendly":"", "summary":"RenderScriptIntrinsic sample that demonstrates how to use RenderScript intrinsics. Creates several RenderScript intrinsics and shows a filtering result with various parameters. Also shows how to extends RedioButton with StateListDrawable.…", "url":"samples/RenderScriptIntrinsic/index.html", "group":"renderscript", "keywords": ["renderscriptintrinsic"], "tags": ["renderscriptintrinsic"], "image":"", "lang":"en", "type":"samples" }, { "title":"JumpingJack", "titleFriendly":"", "summary":"Uses the Gravity sensor to count how many jumping jacks you have performed.…", "url":"samples/JumpingJack/index.html", "group":"wearable", "keywords": ["jumpingjack"], "tags": ["jumpingjack"], "image":"", "lang":"en", "type":"samples" }, { "title":"CardReader", "titleFriendly":"", "summary":"This sample demonstrates how to implement a low-level NFC card reader, for reading cards that do not contain NDEF or Android Beam data. This sample is designed to read the virtual loyalty card implemented in the "CardEmulation" sample.\n\n In…", "url":"samples/CardReader/index.html", "group":"connectivity", "keywords": ["cardreader"], "tags": ["cardreader"], "image":"", "lang":"en", "type":"samples" }, { "title":"ElevationDrag", "titleFriendly":"", "summary":"This sample demonstrates a drag and drop action on different shapes. Elevation and z-translation are used to render the shadows and the views are clipped using different Outlines.…", "url":"samples/ElevationDrag/index.html", "group":"ui", "keywords": ["elevationdrag"], "tags": ["elevationdrag"], "image":"", "lang":"en", "type":"samples" }, { "title":"ClippingBasic", "titleFriendly":"", "summary":"", "url":"samples/ClippingBasic/index.html", "group":"ui", "keywords": ["clippingbasic"], "tags": ["clippingbasic"], "image":"", "lang":"en", "type":"samples" }, { "title":"DelayedConfirmation", "titleFriendly":"", "summary":"Demonstrates how to create a DelayedConfirmationView in your wearable app. In this sample, pressing a button on the phone app sends a message to the wearable to start a simple activity. This activity displays a DelayedConfirmationView that starts when…", "url":"samples/DelayedConfirmation/index.html", "group":"wearable", "keywords": ["delayedconfirmation"], "tags": ["delayedconfirmation"], "image":"", "lang":"en", "type":"samples" }, { "title":"ElevationBasic", "titleFriendly":"", "summary":"This sample demonstrates two alternative ways to move a view in the z-axis. The first view has a fixed elevation using XML and the second one is raised when the user taps on it, using setTranslationZ().…", "url":"samples/ElevationBasic/index.html", "group":"ui", "keywords": ["elevationbasic"], "tags": ["elevationbasic"], "image":"", "lang":"en", "type":"samples" }, { "title":"Flashlight", "titleFriendly":"", "summary":"Wearable activity that uses your wearable screen as a flashlight. There is also a party-mode option, if you want to make things interesting.…", "url":"samples/Flashlight/index.html", "group":"wearable", "keywords": ["flashlight"], "tags": ["flashlight"], "image":"", "lang":"en", "type":"samples" }, { "title":"CustomChoiceList", "titleFriendly":"", "summary":"This sample demonstrates how to create custom checkable layouts, for use with ListView\'s choiceMode attribute.…", "url":"samples/CustomChoiceList/index.html", "group":"ui", "keywords": ["customchoicelist"], "tags": ["customchoicelist"], "image":"", "lang":"en", "type":"samples" }, { "title":"HdrViewfinder", "titleFriendly":"", "summary":"This demo implements a real-time high-dynamic-range camera viewfinder, by alternating the sensor\'s exposure time between two exposure values on even and odd frames, and then compositing together the latest two frames whenever a new frame is captured…", "url":"samples/HdrViewfinder/index.html", "group":"media", "keywords": ["hdrviewfinder"], "tags": ["hdrviewfinder"], "image":"", "lang":"en", "type":"samples" }, { "title":"DisplayingBitmaps", "titleFriendly":"", "summary":"This is a sample application for the Android Training class "Displaying Bitmaps Efficiently" (http://developer.android.com/training/displaying-bitmaps/).\n\n It demonstrates how to load large bitmaps efficiently off the main…", "url":"samples/DisplayingBitmaps/index.html", "group":"ui", "keywords": ["displayingbitmaps"], "tags": ["displayingbitmaps"], "image":"", "lang":"en", "type":"samples" }, { "title":"BluetoothChat", "titleFriendly":"", "summary":"This application allows two Android devices to carry out two-way text chat over Bluetooth. It demonstrates all the fundamental Bluetooth API capabilites, such as: (1) Scanning for other Bluetooth devices (2) Querying the local Bluetooth adapter for paired…", "url":"samples/BluetoothChat/index.html", "group":"connectivity", "keywords": ["bluetoothchat"], "tags": ["bluetoothchat"], "image":"", "lang":"en", "type":"samples" }, { "title":"SlidingTabsBasic", "titleFriendly":"", "summary":"A basic sample which shows how to use SlidingTabLayout to display a custom ViewPager title strip which gives continuous feedback to the user when scrolling.…", "url":"samples/SlidingTabsBasic/index.html", "group":"ui", "keywords": ["slidingtabsbasic"], "tags": ["slidingtabsbasic"], "image":"", "lang":"en", "type":"samples" }, { "title":"Notifications", "titleFriendly":"", "summary":"This sample application provides a showcase of available notification styles and demonstrates various features of the Android Wear notifications API. Running the sample on your companion allows you to select between various notification styles and to …", "url":"samples/Notifications/index.html", "group":"wearable", "keywords": ["wearable notifications"], "tags": ["wearablenotifications"], "image":"", "lang":"en", "type":"samples" }, { "title":"ElizaChat", "titleFriendly":"", "summary":"This sample is a phone application that provides a chat experience in which users can respond to messages with a quick voice response. New messages create a notification with a "Reply" action. The notification is bridged from phone to wearable…", "url":"samples/ElizaChat/index.html", "group":"wearable", "keywords": ["elizachat"], "tags": ["elizachat"], "image":"", "lang":"en", "type":"samples" }, { "title":"BasicGestureDetect", "titleFriendly":"", "summary":"Welcome to Basic Gesture Detect! In order to try this sample out, try dragging or tapping this text to see what happens!…", "url":"samples/BasicGestureDetect/index.html", "group":"input", "keywords": ["basicgesturedetect"], "tags": ["basicgesturedetect"], "image":"", "lang":"en", "type":"samples" }, { "title":"SpeedTracker", "titleFriendly":"", "summary":"This sample uses the FusedLocation APIs of Google Play Services on those devices that have a hardware GPS built in. In those cases, this sample provides a simple screen that shows the current speed of the device on the watch. User can set a speed limit…", "url":"samples/SpeedTracker/index.html", "group":"wearable", "keywords": ["speed tracker"], "tags": ["speedtracker"], "image":"", "lang":"en", "type":"samples" }, { "title":"DrawableTinting", "titleFriendly":"", "summary":"Sample that shows applying tinting and color filters to Drawables both programmatically and as Drawable resources in XML. \n\nTinting is set on a nine-patch drawable through the "tint" and "tintMode" parameters. A color state list …", "url":"samples/DrawableTinting/index.html", "group":"ui", "keywords": ["drawabletinting"], "tags": ["drawabletinting"], "image":"", "lang":"en", "type":"samples" }, { "title":"TextSwitcher", "titleFriendly":"", "summary":"This sample illustrates the use of a TextSwitcher to display text. \n\nClick the button below to set new text in the TextSwitcher and observe the in and out fade animations.…", "url":"samples/TextSwitcher/index.html", "group":"ui", "keywords": ["textswitcher"], "tags": ["textswitcher"], "image":"", "lang":"en", "type":"samples" }, { "title":"ActionBarCompat-Basic", "titleFriendly":"", "summary":"This sample shows you how to use ActionBarCompat to create a basic Activity which displays action items. It covers inflating items from a menu resource, as well as adding an item in code. Items that are not shown as action items on the Action Bar are …", "url":"samples/ActionBarCompat-Basic/index.html", "group":"ui", "keywords": ["actionbarcompat-basic"], "tags": ["actionbarcompat-basic"], "image":"", "lang":"en", "type":"samples" }, { "title":"SwipeRefreshLayoutBasic", "titleFriendly":"", "summary":"A basic sample which shows how to use SwipeRefreshLayout to add the \'swipe-to-refresh\' gesture to a View, enabling the ability to trigger a refresh from swiping down on the view. In this sample the View which can be refreshed is a ListView.…", "url":"samples/SwipeRefreshLayoutBasic/index.html", "group":"ui", "keywords": ["swiperefreshlayoutbasic"], "tags": ["swiperefreshlayoutbasic"], "image":"", "lang":"en", "type":"samples" }, { "title":"BasicContactables", "titleFriendly":"", "summary":"This sample demonstrates how to use the Contactables table to search for contacts. \n\nQuery strings sent to the Contactables table will match both contact names and phone numbers, reducing the number of queries your application needs to use when searching…", "url":"samples/BasicContactables/index.html", "group":"content", "keywords": ["basiccontactables"], "tags": ["basiccontactables"], "image":"", "lang":"en", "type":"samples" }, { "title":"StorageClient", "titleFriendly":"", "summary":"Using the OPEN_DOCUMENT intent, a client app can access a list of Document Providers on the device, and choose a file from any of them. \n\nTo demonstrate this, click the button below to open up the Storage Access Framework interface, and choose an image…", "url":"samples/StorageClient/index.html", "group":"content", "keywords": ["storageclient"], "tags": ["storageclient"], "image":"", "lang":"en", "type":"samples" }, { "title":"CardView", "titleFriendly":"", "summary":"This sample demonstrates how to use CardView introduced in the support library for the Android L preview.…", "url":"samples/CardView/index.html", "group":"ui", "keywords": ["cardview sample"], "tags": ["cardviewsample"], "image":"", "lang":"en", "type":"samples" }, { "title":"BasicAccessibility", "titleFriendly":"", "summary":"This sample demonstrates how to create an accessible application, using a mix of different widgets demonstrating different ways of adding accessibility markup to a UI.…", "url":"samples/BasicAccessibility/index.html", "group":"ui", "keywords": ["basicaccessibility"], "tags": ["basicaccessibility"], "image":"", "lang":"en", "type":"samples" }, { "title":"AppRestrictions", "titleFriendly":"", "summary":"This sample demonstrates the use of the App Restriction feature, which is available on Android 4.3 and above tablet device with the multiuser feature. When launched under the primary User account, you can toggle between standard app restriction types …", "url":"samples/AppRestrictions/index.html", "group":"content", "keywords": ["apprestrictions"], "tags": ["apprestrictions"], "image":"", "lang":"en", "type":"samples" }, { "title":"MediaBrowserService", "titleFriendly":"", "summary":"This sample shows how to implement an audio media app that provides media library metadata and playback controls through a standard service. It exposes a simple music library through the new MediaBrowserService and provides MediaSession callbacks. This…", "url":"samples/MediaBrowserService/index.html", "group":"media", "keywords": ["mediabrowserservice"], "tags": ["mediabrowserservice"], "image":"", "lang":"en", "type":"samples" }, { "title":"Background", "titleFriendly":"", "summary":"", "url":"samples/background.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"samples" }, { "title":"Wearable", "titleFriendly":"", "summary":"", "url":"samples/wearable.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"samples" }, { "title":"Input", "titleFriendly":"", "summary":"", "url":"samples/input.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"samples" }, { "title":"Renderscript", "titleFriendly":"", "summary":"", "url":"samples/renderscript.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"samples" }, { "title":"Samples", "titleFriendly":"", "summary":"Welcome to code samples for Android developers. Here you can browse sample code and learn how to build different components for your applications. Use the categories on the left to browse the available samples. Each sample is a fully functioning Android…", "url":"samples/index.html", "group":"", "keywords": ["examples","code"], "tags": ["examples","code"], "image":"", "lang":"en", "type":"samples" }, { "title":"Media", "titleFriendly":"", "summary":"", "url":"samples/media.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"samples" }, { "title":"Sensors", "titleFriendly":"", "summary":"", "url":"samples/sensors.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"samples" }, { "title":"Notification", "titleFriendly":"", "summary":"", "url":"samples/notification.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"samples" }, { "title":"UI", "titleFriendly":"", "summary":"", "url":"samples/ui.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"samples" }, { "title":"Security", "titleFriendly":"", "summary":"", "url":"samples/security.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"samples" }, { "title":"Admin", "titleFriendly":"", "summary":"", "url":"samples/admin.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"samples" }, { "title":"Testing", "titleFriendly":"", "summary":"", "url":"samples/testing.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"samples" }, { "title":"Content", "titleFriendly":"", "summary":"", "url":"samples/content.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"samples" }, { "title":"Connectivity", "titleFriendly":"", "summary":"", "url":"samples/connectivity.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"samples" }, { "title":"Views", "titleFriendly":"", "summary":"", "url":"samples/views.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"samples" }, { "title":"What's New", "titleFriendly":"", "summary":"The following code samples were recently published. You can download them in the Android SDK Manager under the SDK Samples component for API 21. This sample is a simple audio media app that exposes its media library and provides metadata and playback …", "url":"samples/new/index.html", "group":"", "keywords": [], "tags": [], "image":"samples/images/JobSchedulerSample.png", "lang":"en", "type":"samples" } ]; var TOOLS_RESOURCES = [ { "title":"发布概述", "titleFriendly":"", "summary":"发布是将您的 Android 应用提供给用户的常规流程。您在发布 Android 应用时需要执行两大任务: 在准备阶段,您需要构建应用的发布版本,以供 Android 设备用户下载和安装。 在发布阶段,您向用户宣传、销售和分发应用的发布版本。 通常情况下,您可以通过 Google Play 等应用市场发布应用。不过,您也可以通过以下方式发布应用:将应用直接发送给用户;让用户从您的网站下载应用。 图 1 展示了发布流程在整个 Android 应用开发流程 中所处的位置。一般来说,您要先在调试环境中完成对应用的测试…", "url":"intl/zh-cn/tools/publishing/publishing_overview.html", "group":"", "keywords": [], "tags": [], "image":"images/publishing/publishing_overview.png", "lang":"zh-cn", "type":"tools" }, { "title":"准备发布", "titleFriendly":"", "summary":"在将您的 Android 应用分发给用户之前,您需要先完成准备工作。对于所有 Android 应用,准备流程都是一项必须完成的 开发任务 ,也是发布流程中的第一步(参见图 1)。 当准备应用以进行发布时,您需要配置、构建并测试应用的发布版本。配置任务相当简单,涉及完成代码清理和代码修改这两项基本任务,从而达到优化应用的目的。构建流程与调试构建流程相似,可以使用 JDK 和 Android SDK 工具完成。测试任务就是做最终检查,以确保您的应用能在实际环境下正常运行。准备好要发布的应用后,您将获得一个已签名的…", "url":"intl/zh-cn/tools/publishing/preparing.html", "group":"", "keywords": [], "tags": [], "image":"images/publishing/publishing_overview_prep.png", "lang":"zh-cn", "type":"tools" }, { "title":"ProGuard", "titleFriendly":"", "summary":"ProGuard 工具通过移除无用的代码以及使用语义隐晦的名称来重命名类、字段和方法,从而达到压缩、优化和混淆代码的目的。最终您将获得一个较小的 .apk 文件,此文件更难于进行反向工程。由于 ProGuard 会使应用更难于进行反向工程,因此当应用使用对安全性要求极高的功能时(例如,当您 向应用授予许可 时),您必须使用此工具。 ProGuard 已集成到 Android 构建系统,所以您无需手动调用此工具。只有当您在发布模式下构建应用时,ProGuard 才会运行,因此当您在调试模式下构建应用时…", "url":"intl/zh-cn/tools/help/proguard.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"zh-cn", "type":"tools" }, { "title":"", "titleFriendly":"", "summary":"You should have already been redirected by your browser. Please go to System Requirements .…", "url":"sdk/1.0_r1/requirements.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"", "titleFriendly":"", "summary":"You should have already been redirected by your browser. Please go to Installing the Android SDK .…", "url":"sdk/1.0_r1/installing.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"Google USB Driver", "titleFriendly":"", "summary":"I have read and agree with the above terms and conditions The Google USB Driver is required for Windows only in order to perform adb debugging with any of the Google Nexus devices . The one exception is the Galaxy Nexus: the driver for Galaxy Nexus is…", "url":"sdk/win-usb.html", "group":"", "keywords": [], "tags": [], "image":"images/developing/sdk-usb-driver.png", "lang":"en", "type":"tools" }, { "title":"", "titleFriendly":"", "summary":"You should have already been redirected by your browser. Please go to System Requirements .…", "url":"sdk/1.5_r2/requirements.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"", "titleFriendly":"", "summary":"You should have already been redirected by your browser. Please go to Installing the Android SDK .…", "url":"sdk/1.5_r2/installing.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"", "titleFriendly":"", "summary":"You should have already been redirected by your browser. Please go to System Requirements .…", "url":"sdk/1.5_r3/requirements.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"", "titleFriendly":"", "summary":"You should have already been redirected by your browser. Please go to Installing the Android SDK .…", "url":"sdk/1.5_r3/installing.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"", "titleFriendly":"", "summary":"You should have already been redirected by your browser. Please go to System Requirements .…", "url":"sdk/1.5_r1/requirements.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"", "titleFriendly":"", "summary":"You should have already been redirected by your browser. Please go to Installing the Android SDK .…", "url":"sdk/1.5_r1/installing.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"Download Android Studio and SDK Tools", "titleFriendly":"", "summary":"Download the official Android IDE and developer tools to build apps for Android phones, tablets, wearables, TVs, and more.", "url":"sdk/index.html", "group":"", "keywords": ["sdk","android studio"], "tags": ["sdk","androidstudio"], "image":"images/tools/studio-hero.png", "lang":"en", "type":"tools" }, { "title":"", "titleFriendly":"", "summary":"You should have already been redirected by your browser. Please go to System Requirements .…", "url":"sdk/1.0_r2/requirements.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"", "titleFriendly":"", "summary":"You should have already been redirected by your browser. Please go to Installing the Android SDK .…", "url":"sdk/1.0_r2/installing.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"", "titleFriendly":"", "summary":"You should have already been redirected by your browser. Please go to System Requirements .…", "url":"sdk/1.1_r1/requirements.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"", "titleFriendly":"", "summary":"You should have already been redirected by your browser. Please go to Installing the Android SDK .…", "url":"sdk/1.1_r1/installing.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"Terms and Conditions", "titleFriendly":"", "summary":"", "url":"sdk/terms.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"", "titleFriendly":"", "summary":"You should have already been redirected by your browser. Please go to System Requirements .…", "url":"sdk/1.6_r1/requirements.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"", "titleFriendly":"", "summary":"You should have already been redirected by your browser. Please go to Installing the Android SDK .…", "url":"sdk/1.6_r1/installing.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"Managing Projects from Android Studio", "titleFriendly":"", "summary":"Android Studio provides graphical tools for creating and managing Android projects, which contain everything that define your Android apps, from app source code to build configurations and test code. Each project contains one or more different types of…", "url":"sdk/installing/create-project.html", "group":"", "keywords": [], "tags": [], "image":"images/tools/wizard2.png", "lang":"en", "type":"tools" }, { "title":"Using the Android Project View", "titleFriendly":"", "summary":"The Android project view in Android Studio shows a flattened version of your project's structure that provides quick access to the key source files of Android projects and helps you work with the new Gradle-based build system . The Android project…", "url":"sdk/installing/studio-androidview.html", "group":"", "keywords": [], "tags": [], "image":"images/tools/projectview01.png", "lang":"en", "type":"tools" }, { "title":"Using the Layout Editor", "titleFriendly":"", "summary":"What's New in Android Developer Tools Android Studio offers an advanced layout editor that allows you to drag-and-drop widgets into your layout and preview your layout while editing the XML. Within the layout editor, you can switch between the Text…", "url":"sdk/installing/studio-layout.html", "group":"", "keywords": [], "tags": [], "image":"images/tools/as-preview-icon.png", "lang":"en", "type":"tools" }, { "title":"Android Studio Tips and Tricks", "titleFriendly":"", "summary":"If you're unfamiliar with using Android Studio and the IntelliJ IDEA interface, this page provides some tips to help you get started with some of the most common tasks and productivity enhancements. Android Studio includes a number of features to …", "url":"sdk/installing/studio-tips.html", "group":"", "keywords": [], "tags": [], "image":"images/tools/studio-bitmap-rendering.png", "lang":"en", "type":"tools" }, { "title":"Setting Up the ADT Bundle", "titleFriendly":"", "summary":"", "url":"sdk/installing/bundle.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"Installing the Eclipse Plugin", "titleFriendly":"", "summary":"Android offers a custom plugin for the Eclipse IDE, called Android Development Tools (ADT). This plugin provides a powerful, integrated environment in which to develop Android apps. It extends the capabilities of Eclipse to let you quickly set up new …", "url":"sdk/installing/installing-adt.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"Adding SDK Packages", "titleFriendly":"", "summary":"By default, the Android SDK does not include everything you need to start developing. The SDK separates tools, platforms, and other components into packages you can download as needed using the Android SDK Manager . So before you can start, there are …", "url":"sdk/installing/adding-packages.html", "group":"", "keywords": ["sdk manager"], "tags": ["sdkmanager"], "image":"images/tools/sdk-manager-studio.png", "lang":"en", "type":"tools" }, { "title":"Build System Overview", "titleFriendly":"", "summary":"The New Android SDK Build System The Android build system is the toolkit you use to build, test, run and package your apps. The build system can run as an integrated tool from the Android Studio menu and independently from the command line. You can use…", "url":"sdk/installing/studio-build.html", "group":"", "keywords": [], "tags": [], "image":"images/build.png", "lang":"en", "type":"tools" }, { "title":"Migrating to Android Studio", "titleFriendly":"", "summary":"If you have been using Eclipse with ADT , be aware that Android Studio is now the official IDE for Android, so you should migrate to Android Studio to receive all the latest IDE updates. To migrate existing Android projects, simply import them using Android…", "url":"sdk/installing/migrate.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"UI Testing", "titleFriendly":"", "summary":"In addition to unit testing the individual components that make up your Android application (such as activities, services, and content providers), it is also important that you test the behavior of your application’s user interface (UI) when it is running…", "url":"tools/testing/testing_ui.html", "group":"", "keywords": [], "tags": [], "image":"images/testing/UIAutomatorViewer.png", "lang":"en", "type":"tools" }, { "title":"Testing Fundamentals", "titleFriendly":"", "summary":"The Android testing framework, an integral part of the development environment, provides an architecture and powerful tools that help you test every aspect of your application at every level from unit to framework. The testing framework has these key …", "url":"tools/testing/testing_android.html", "group":"", "keywords": [], "tags": [], "image":"images/testing/test_framework.png", "lang":"en", "type":"tools" }, { "title":"Activity Testing", "titleFriendly":"", "summary":"Activity testing is particularly dependent on the Android instrumentation framework. Unlike other components, activities have a complex lifecycle based on callback methods; these can't be invoked directly except by instrumentation. Also, the only …", "url":"tools/testing/activity_testing.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"Testing from Eclipse with ADT", "titleFriendly":"", "summary":"This topic explains how create and run tests of Android applications in Eclipse with ADT. Before you read this topic, you should read about how to create an Android application with the basic processes for creating and running applications with ADT, as…", "url":"tools/testing/testing_eclipse.html", "group":"", "keywords": [], "tags": [], "image":"images/testing/eclipse_test_results.png", "lang":"en", "type":"tools" }, { "title":"Testing", "titleFriendly":"", "summary":"The Android framework includes an integrated testing framework that helps you test all aspects of your application and the SDK tools include tools for setting up and running test applications. Whether you are working in Eclipse with ADT or working from…", "url":"tools/testing/index.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"Accessibility Testing Checklist", "titleFriendly":"", "summary":"Testing is an important part of making your application accessible to users with varying abilities. Following design and development guidelines for accessibility are important steps toward that goal, but testing for accessibility can uncover problems …", "url":"tools/testing/testing_accessibility.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"Activity Testing Tutorial", "titleFriendly":"", "summary":"Android includes powerful tools for testing applications. The tools extend JUnit with additional features, provide convenience classes for mock Android system objects, and use instrumentation to give you control over your main application while you are…", "url":"tools/testing/activity_test.html", "group":"", "keywords": [], "tags": [], "image":"images/testing/eclipse_new_android_project_complete_callouts.png", "lang":"en", "type":"tools" }, { "title":"Service Testing", "titleFriendly":"", "summary":"Android provides a testing framework for Service objects that can run them in isolation and provides mock objects. The test case class for Service objects is ServiceTestCase. Since the Service class assumes that it is separate from its clients, you can…", "url":"tools/testing/service_testing.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"Testing from Other IDEs", "titleFriendly":"", "summary":"This document describes how to create and run tests directly from the command line. You can use the techniques described here if you are developing in an IDE other than Eclipse or if you prefer to work from the command line. This document assumes that…", "url":"tools/testing/testing_otheride.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"What To Test", "titleFriendly":"", "summary":"As you develop Android applications, knowing what to test is as important as knowing how to test. This document lists some most common Android-related situations that you should consider when you test, even at the unit test level. This is not an exhaustive…", "url":"tools/testing/what_to_test.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"Content Provider Testing", "titleFriendly":"", "summary":"Content providers, which store and retrieve data and make it accessible across applications, are a key part of the Android API. As an application developer you're allowed to provide your own public providers for use by other applications. If you do…", "url":"tools/testing/contentprovider_testing.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"Support Library", "titleFriendly":"", "summary":"The Android Support Library package is a set of code libraries that provide backward-compatible versions of Android framework APIs as well as features that are only available through the library APIs. Each Support Library is backward-compatible to a specific…", "url":"tools/support-library/index.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"Support Library Setup", "titleFriendly":"", "summary":"How you setup the Android Support Libraries in your development project depends on what features you want to use and what range of Android platform versions you want to support with your application. This document guides you through downloading the Support…", "url":"tools/support-library/setup.html", "group":"", "keywords": [], "tags": [], "image":"images/tools/sdk-manager-support-libs.png", "lang":"en", "type":"tools" }, { "title":"Support Library Features", "titleFriendly":"", "summary":"The Android Support Library package contains several libraries that can be included in your application. Each of these libraries supports a specific range of Android platform versions and set of features. This guide explains the important features and…", "url":"tools/support-library/features.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"Using the Dev Tools App", "titleFriendly":"", "summary":"The Dev Tools application is installed by default on all system images included with the SDK, so you can use it with the Android Emulator. With the Dev Tools application, you can enable a number of settings on your device that will make it easier to test…", "url":"tools/debugging/debugging-devtools.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"Investigating Your RAM Usage", "titleFriendly":"", "summary":"Because Android is designed for mobile devices, you should always be careful about how much random-access memory (RAM) your app uses. Although Android’s Dalvik virtual machine performs routine garbage collection, this doesn’t mean you can ignore when …", "url":"tools/debugging/debugging-memory.html", "group":"", "keywords": ["memory","outofmemoryerror"], "tags": ["memory","outofmemoryerror"], "image":"images/tools/monitor-vmheap@2x.png", "lang":"en", "type":"tools" }, { "title":"Debugging from Eclipse with ADT", "titleFriendly":"", "summary":"If you are developing in Eclipse with the ADT plugin, you can use the built-in Java Debugger, along with DDMS, to debug your applications. To access the debugger and DDMS, Eclipse displays the debugger and DDMS features as perspectives, which are customized…", "url":"tools/debugging/debugging-projects.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"Improving Your Code with lint", "titleFriendly":"", "summary":"In addition to testing that your Android application meets its functional requirements, it's important to ensure that your code has no structural problems. Poorly structured code can impact the reliability and efficiency of your Android apps and make…", "url":"tools/debugging/improving-w-lint.html", "group":"", "keywords": [], "tags": [], "image":"images/tools/lint.png", "lang":"en", "type":"tools" }, { "title":"Debugging", "titleFriendly":"", "summary":"The Android SDK provides most of the tools that you need to debug your applications. You need a JDWP-compliant debugger if you want to be able to do things such as step through code, view variable values, and pause execution of an application. If you …", "url":"tools/debugging/index.html", "group":"", "keywords": [], "tags": [], "image":"images/debugging.png", "lang":"en", "type":"tools" }, { "title":"Reading and Writing Logs", "titleFriendly":"", "summary":"The Android logging system provides a mechanism for collecting and viewing system debug output. Logcat dumps a log of system messages, which include things such as stack traces when the emulator throws an error and messages that you have written from …", "url":"tools/debugging/debugging-log.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"Analyzing Display and Performance", "titleFriendly":"", "summary":"After building features, eliminating bugs, and cleaning up your code, you should spend some time looking at the performance of your application. The speed and smoothness with which your application draws pixels and performs operations has an significant…", "url":"tools/debugging/systrace.html", "group":"", "keywords": ["systrace","speed"], "tags": ["systrace","speed"], "image":"images/systrace/report.png", "lang":"en", "type":"tools" }, { "title":"Using DDMS", "titleFriendly":"", "summary":"Android ships with a debugging tool called the Dalvik Debug Monitor Server (DDMS), which provides port-forwarding services, screen capture on the device, thread and heap information on the device, logcat, process, and radio state information, incoming…", "url":"tools/debugging/ddms.html", "group":"", "keywords": [], "tags": [], "image":"images/debug-ddms.png", "lang":"en", "type":"tools" }, { "title":"Profiling with Traceview and dmtracedump", "titleFriendly":"", "summary":"Traceview is a graphical viewer for execution logs that you create by using the Debug class to log tracing information in your code. Traceview can help you debug your application and profile its performance. When you have a trace log file (generated by…", "url":"tools/debugging/debugging-tracing.html", "group":"", "keywords": [], "tags": [], "image":"images/traceview_timeline.png", "lang":"en", "type":"tools" }, { "title":"Debugging with Android Studio", "titleFriendly":"", "summary":"Android Studio enables you to debug apps running on the emulator or on an Android device. With Android Studio, you can: To debug your app, Android Studio builds a debuggable version of your app, connects to a device or to the emulator, installs the app…", "url":"tools/debugging/debugging-studio.html", "group":"", "keywords": [], "tags": [], "image":"images/tools/as-debugdevices.png", "lang":"en", "type":"tools" }, { "title":"Optimizing Your UI", "titleFriendly":"", "summary":"Sometimes your application's layout can slow down your application. To help debug issues in your layout, the Android SDK provides the Hierarchy Viewer and lint tools. The Hierarchy Viewer application allows you to debug and optimize your user interface…", "url":"tools/debugging/debugging-ui.html", "group":"", "keywords": [], "tags": [], "image":"images/developing/hv_device_window.png", "lang":"en", "type":"tools" }, { "title":"Debugging from Other IDEs", "titleFriendly":"", "summary":"If you are not using Android Studio to develop, you can still take advantage of all the tools that the Android SDK provides for debugging. A basic debugging environment consists of: You need to obtain a JDWP-compliant Java debugger to properly debug your…", "url":"tools/debugging/debugging-projects-cmdline.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"SDK Build Tools Release Notes", "titleFriendly":"", "summary":"Build Tools is a component of the Android SDK required for building Android application code. The latest version of these tools is included in the SDK starter package and installed in the <sdk>/build-tools/ directory. You should always keep…", "url":"tools/revisions/build-tools.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"Revisions", "titleFriendly":"", "summary":"The Android SDK is composed of individual packages that may undergo an update at their own schedule, so some have their own set of release notes. You can find information about some of the packages in this section, including the core SDK Tools and the…", "url":"tools/revisions/index.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"SDK Platforms Release Notes", "titleFriendly":"", "summary":"This document provides release information about the SDK Platform packages required for app development. If you want details about the features and APIs added in each Android version, instead read the highlights in the About section. In order to compile…", "url":"tools/revisions/platforms.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"Android Studio Release Notes", "titleFriendly":"", "summary":"Android Studio is the official IDE for Android development, and with a single download includes everything you need to begin developing Android apps: For an introduction to Android Studio, read the Android Studio guide. Periodic updates are pushed to …", "url":"tools/revisions/studio.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"Building and Running from the Command Line", "titleFriendly":"", "summary":"By default, there are two build types to build your application using the gradle.build settings: one for debugging your application — debug — and one for building your final package for release — release mode . Regardless of which way you build type your…", "url":"tools/building/building-cmdline.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"Building and Running from the Command Line", "titleFriendly":"", "summary":"There are two ways to build your application using the Ant build script: one for testing/debugging your application — debug mode — and one for building your final package for release — release mode . Regardless of which way you build your application…", "url":"tools/building/building-cmdline-ant.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"Android Plug-in for Gradle", "titleFriendly":"", "summary":"The Android build system consists of an Android plugin for Gradle . Gradle is an advanced build toolkit that manages dependencies and allows you to define custom build logic. Android Studio uses a Gradle wrapper to fully integrate the Android plugin for…", "url":"tools/building/plugin-for-gradle.html", "group":"", "keywords": [], "tags": [], "image":"images/tools/studio-gradle-tab.png", "lang":"en", "type":"tools" }, { "title":"Building and Running Overview", "titleFriendly":"", "summary":"The Android build process provides project and module build settings so that your Android modules are compiled and packaged into .apk files, the containers for your application binaries, based on your build settings. The apk file for each app contains…", "url":"tools/building/index.html", "group":"", "keywords": [], "tags": [], "image":"images/build-simplified.png", "lang":"en", "type":"tools" }, { "title":"Building and Running from Eclipse with ADT", "titleFriendly":"", "summary":"Eclipse and ADT provide an environment where most of the details of the build process are hidden from you. By default, the build process constantly runs in the background as you make changes to your project. When Eclipse automatically builds your application…", "url":"tools/building/building-eclipse.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"Configuring Gradle Builds", "titleFriendly":"", "summary":"This section builds on the Build System Overview and Build and Running from Android Studio to show you how to use build variants based on product flavors and build types. Android Studio projects contain a top-level build file and a build file for each…", "url":"tools/building/configuring-gradle.html", "group":"", "keywords": [], "tags": [], "image":"images/tools/as-gradlesync.png", "lang":"en", "type":"tools" }, { "title":"Building Apps with Over 65K Methods", "titleFriendly":"", "summary":"As the Android platform has continued to grow, so has the size of Android apps. When your application and the libraries it references reach a certain size, you encounter build errors that indicate your app has reached a limit of the Android app build …", "url":"tools/building/multidex.html", "group":"", "keywords": ["65536","references","max","65k","dex","64k","multidex","multi-dex","methods

"], "tags": ["65536","references","max","65k","dex","64k","multidex","multi-dex","methods

"], "image":"images/tools/studio-build-variant.png", "lang":"en", "type":"tools" }, { "title":"Building and Running from Android Studio", "titleFriendly":"", "summary":"This document shows you how to use Android Studio to build an application .apk for testing or release and how to run your application on an emulator or a real device. To build the project on Android Studio, click Build and select Make Project . The status…", "url":"tools/building/building-studio.html", "group":"", "keywords": [], "tags": [], "image":"images/tools/as-gradlebutton.png", "lang":"en", "type":"tools" }, { "title":"Introduction", "titleFriendly":"", "summary":"Developing applications for Android devices is facilitated by a group of tools that are provided with the SDK. You can access these tools through an Eclipse plugin called ADT (Android Development Tools) or from the command line. Developing with Eclipse…", "url":"tools/workflow.html", "group":"", "keywords": [], "tags": [], "image":"images/developing/developing_overview.png", "lang":"en", "type":"tools" }, { "title":"Android NDK", "titleFriendly":"", "summary":"Before installing the Android NDK, you must agree to the following terms and conditions. I have read and agree with the above terms and conditions The NDK is a toolset that allows you to implement parts of your app using native-code languages such as …", "url":"tools/sdk/ndk/index.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"ADT Plugin Release Notes", "titleFriendly":"", "summary":"Android Development Tools (ADT) is a plugin for the Eclipse IDE that extends the capabilities of Eclipse to let you quickly set up new Android projects, create an application UI, add packages based on the Android Framework API, debug your applications…", "url":"tools/sdk/eclipse-adt.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"Using Code Templates", "titleFriendly":"", "summary":"The SDK tools provide templates for quickly creating Android application projects with the basic structure or for adding components to your existing application modules. The code templates provided by the Android SDK follow the Android design and development…", "url":"tools/projects/templates.html", "group":"", "keywords": [], "tags": [], "image":"images/code_templates/ba-no-navigation.png", "lang":"en", "type":"tools" }, { "title":"Managing Projects from the Command Line", "titleFriendly":"", "summary":"The android tool provides you with commands to create all three types of projects. An Android project contains all of the files and resources that are needed to build a project into an .apk file for installation. To create an Android project, you must…", "url":"tools/projects/projects-cmdline.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"Managing Projects Overview", "titleFriendly":"", "summary":"An Android project contains everything that defines your Android app, from app source code to build configurations and test code. The SDK tools require that your projects follow a specific structure so it can compile and package your application correctly…", "url":"tools/projects/index.html", "group":"", "keywords": [], "tags": [], "image":"images/tools/studio-androidtest-folder.png", "lang":"en", "type":"tools" }, { "title":"Managing Projects from Eclipse with ADT", "titleFriendly":"", "summary":"Eclipse and the ADT plugin provide GUIs and wizards to create all three types of projects (Android project, Library project, and Test project): The ADT plugin provides a New Project Wizard that you can use to quickly create a new Android project (or a…", "url":"tools/projects/projects-eclipse.html", "group":"", "keywords": [], "tags": [], "image":"images/tools/eclipse-new.png", "lang":"en", "type":"tools" }, { "title":"Android Studio Overview", "titleFriendly":"", "summary":"Android Studio is the official IDE for Android application development, based on IntelliJ IDEA . On top of the capabilities you expect from IntelliJ, Android Studio offers: Download Android Studio now . If you're new to Android Studio or the IntelliJ…", "url":"tools/studio/index.html", "group":"", "keywords": [], "tags": [], "image":"images/tools/projectview01.png", "lang":"en", "type":"tools" }, { "title":"Accessory Development Kit 2012 Guide", "titleFriendly":"", "summary":"The Android Accessory Development Kit (ADK) for 2012 is the latest reference implementation of an Android Open Accessory device, designed to help Android hardware accessory builders and software developers create accessories for Android. The ADK 2012 …", "url":"tools/adk/adk2.html", "group":"", "keywords": ["adk"], "tags": ["adk"], "image":"", "lang":"en", "type":"tools" }, { "title":"Accessory Development Kit", "titleFriendly":"", "summary":"The Accessory Development Kit (ADK) is a reference implementation for hardware manufacturers and hobbyists to use as a starting point for building accessories for Android. Each ADK release is provided with source code and hardware specifications to make…", "url":"tools/adk/index.html", "group":"", "keywords": ["adk"], "tags": ["adk"], "image":"", "lang":"en", "type":"tools" }, { "title":"Accessory Development Kit 2011 Guide", "titleFriendly":"", "summary":"The Android Open Accessory Development Kit (ADK) is a reference implementation of an Android Open Accessory, based on the Arduino open source electronics prototyping platform . The accessory's hardware design files, code that implements the accessory…", "url":"tools/adk/adk.html", "group":"", "keywords": ["adk"], "tags": ["adk"], "image":"", "lang":"en", "type":"tools" }, { "title":"Publishing Overview", "titleFriendly":"", "summary":"Publishing is the general process that makes your Android applications available to users. When you publish an Android application you perform two main tasks: During the preparation step you build a release version of your application, which users can…", "url":"tools/publishing/publishing_overview.html", "group":"", "keywords": [], "tags": [], "image":"images/publishing/publishing_overview.png", "lang":"en", "type":"tools" }, { "title":"Preparing for Release", "titleFriendly":"", "summary":"Before you distribute your Android application to users you need to prepare it for release. The preparation process is a required development task for all Android applications and is the first step in the publishing process (see figure 1). When you prepare…", "url":"tools/publishing/preparing.html", "group":"", "keywords": [], "tags": [], "image":"images/publishing/publishing_overview_prep.png", "lang":"en", "type":"tools" }, { "title":"Versioning Your Applications", "titleFriendly":"", "summary":"Versioning is a critical component of your application upgrade and maintenance strategy. Versioning is important because: The Android system does not use app version information to enforce restrictions on upgrades, downgrades, or compatibility of third-party…", "url":"tools/publishing/versioning.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"Signing Your Applications from Eclipse with ADT", "titleFriendly":"", "summary":"Android requires that all apps be digitally signed with a certificate before they can be installed. Android uses this certificate to identify the author of an app, and the certificate does not need to be signed by a certificate authority. This document…", "url":"tools/publishing/app-signing-eclipse.html", "group":"", "keywords": [], "tags": [], "image":"images/tools/signadt3.png", "lang":"en", "type":"tools" }, { "title":"Signing Your Applications", "titleFriendly":"", "summary":"Android requires that all apps be digitally signed with a certificate before they can be installed. Android uses this certificate to identify the author of an app, and the certificate does not need to be signed by a certificate authority. Android apps…", "url":"tools/publishing/app-signing.html", "group":"", "keywords": [], "tags": [], "image":"images/tools/signstudio2.png", "lang":"en", "type":"tools" }, { "title":"Using Hardware Devices", "titleFriendly":"", "summary":"When building a mobile application, it's important that you always test your application on a real device before releasing it to users. This page describes how to set up your development environment and Android-powered device for testing and debugging…", "url":"tools/device.html", "group":"", "keywords": [], "tags": [], "image":"images/tools/dev-options-inmilk.png", "lang":"en", "type":"tools" }, { "title":"Managing AVDs with AVD Manager", "titleFriendly":"", "summary":"The AVD Manager is a tool you can use to create and manage Android virtual devices (AVDs), which define device configurations for the Android Emulator . To launch the AVD Manager: The AVD Manager main screen shows your current virtual devices, as shown…", "url":"tools/devices/managing-avds.html", "group":"", "keywords": [], "tags": [], "image":"images/tools/avd-manager-studio.png", "lang":"en", "type":"tools" }, { "title":"Managing AVDs from the Command Line", "titleFriendly":"", "summary":"The android tool lets you manage AVDs on the command line. For a complete reference of the command line options that you can use, see the reference for the android tool. To generate a list of system image targets, use this command: The android tool scans…", "url":"tools/devices/managing-avds-cmdline.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"Managing Virtual Devices", "titleFriendly":"", "summary":"An Android Virtual Device (AVD) is an emulator configuration that lets you model an actual device by defining hardware and software options to be emulated by the Android Emulator. The easiest way to create an AVD is to use the graphical AVD Manager , …", "url":"tools/devices/index.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"Using the Emulator", "titleFriendly":"", "summary":"The Android SDK includes a virtual mobile device emulator that runs on your computer. The emulator lets you prototype, develop and test Android applications without using a physical device. The Android emulator mimics all of the hardware and software …", "url":"tools/devices/emulator.html", "group":"", "keywords": [], "tags": [], "image":"images/emulator@2x.png", "lang":"en", "type":"tools" }, { "title":"Extras", "titleFriendly":"", "summary":"SDK extras add functionality to your development environment. You can download all of the SDK extras into your development environment using the SDK Manager.…", "url":"tools/extras/index.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"OEM USB Drivers", "titleFriendly":"", "summary":"If you are developing on Windows and would like to connect an Android-powered device to test your applications, then you need to install the appropriate USB driver. This document provides links to the web sites for several original equipment manufacturers…", "url":"tools/extras/oem-usb.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"Developer Workflow", "titleFriendly":"", "summary":"To develop apps for Android, you use a set of tools that are included in Android Studio. In addition to using the tools from Android Studio, you can also access most of the SDK tools from the command line. Developing with Android Studio is the preferred…", "url":"tools/workflow/index.html", "group":"", "keywords": [], "tags": [], "image":"images/developing/developing_overview.png", "lang":"en", "type":"tools" }, { "title":"android", "titleFriendly":"", "summary":"android is an important development tool that lets you:…", "url":"tools/help/android.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"mksdcard", "titleFriendly":"", "summary":"The mksdcard tool lets you quickly create a FAT32 disk image that you can load in the emulator, to simulate the presence of an SD card in the device. Because you can specify an SD card while creating an AVD in the AVD Manager, you usually use that feature…", "url":"tools/help/mksdcard.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"MonkeyDevice", "titleFriendly":"", "summary":"A monkeyrunner class that represents a device or emulator accessible by the workstation running monkeyrunner . This class is used to control an Android device or emulator. The methods send UI events, retrieve information, install and remove applications…", "url":"tools/help/MonkeyDevice.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"zipalign", "titleFriendly":"", "summary":"zipalign is an archive alignment tool that provides important optimization to Android application (.apk) files. The purpose is to ensure that all uncompressed data starts with a particular alignment relative to the start of the file. Specifically, it …", "url":"tools/help/zipalign.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"Android Debug Bridge", "titleFriendly":"", "summary":"Android Debug Bridge (adb) is a versatile command line tool that lets you communicate with an emulator instance or connected Android-powered device. It is a client-server program that includes three components: You can find the adb tool in am) and package…", "url":"tools/help/adb.html", "group":"", "keywords": ["adb"], "tags": ["adb"], "image":"", "lang":"en", "type":"tools" }, { "title":"ProGuard", "titleFriendly":"", "summary":"The ProGuard tool shrinks, optimizes, and obfuscates your code by removing unused code and renaming classes, fields, and methods with semantically obscure names. The result is a smaller sized .apk file that is more difficult to reverse engineer. Because…", "url":"tools/help/proguard.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"AVD Manager", "titleFriendly":"", "summary":"The AVD Manager provides a graphical user interface in which you can create and manage Android Virtual Devices (AVDs), which are required by the Android Emulator . You can launch the AVD Manager in one of the following ways: For more information, see …", "url":"tools/help/avd-manager.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"JOBB", "titleFriendly":"", "summary":"The jobb tool allows you to build encrypted and unencrypted APK expansion files in Opaque Binary Blob (OBB) format. You can download and mount these expansion files in your application using StorageManager on devices with Android 2.3 (API Level 9) or …", "url":"tools/help/jobb.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"logcat", "titleFriendly":"", "summary":"The Android logging system provides a mechanism for collecting and viewing system debug output. Logs from various applications and portions of the system are collected in a series of circular buffers, which then can be viewed and filtered by the logcat…", "url":"tools/help/logcat.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"bmgr", "titleFriendly":"", "summary":"bmgr is a shell tool you can use to interact with the Backup Manager on Android devices supporting API Level 8 or greater. It provides commands to induce backup and restore operations so that you don't need to repeatedly wipe data or take similar …", "url":"tools/help/bmgr.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"dmtracedump", "titleFriendly":"", "summary":"dmtracedump is a tool that gives you an alternate way of generating graphical call-stack diagrams from trace log files (instead of using Traceview). This document is a reference to the available command line options. For more information on generating…", "url":"tools/help/dmtracedump.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"Tools Help", "titleFriendly":"", "summary":"The Android SDK includes a variety of tools that help you develop mobile applications for the Android platform. The tools are classified into two groups: SDK tools and platform tools. SDK tools are platform independent and are required no matter which…", "url":"tools/help/index.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"etc1tool", "titleFriendly":"", "summary":"etc1tool is a command line utility that lets you encode PNG images to the ETC1 compression standard and decode ETC1 compressed images back to PNG. The usage for etc1tool is:…", "url":"tools/help/etc1tool.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"layoutopt", "titleFriendly":"", "summary":"For more information about using lint, see Improving Your Code with lint and the lint reference documentation . layoutopt is a command-line tool that helps you optimize the layouts and layout hierarchies of your applications. This document is a reference…", "url":"tools/help/layoutopt.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"UiWatcher", "titleFriendly":"", "summary":"Represents a conditional watcher on the target device. To learn how to register a conditional watcher, see UiDevice.registerWatcher() . The testing framework calls this handler method automatically when the framework is unable to find a match using the…", "url":"tools/help/uiautomator/UiWatcher.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"UiDevice", "titleFriendly":"", "summary":"Provides access to state information about the device. You can also use this class to simulate user actions on the device, such as pressing the d-pad or pressing the Home and Menu buttons. Clears the text from the last UI traversal event. See getLastTraversedText…", "url":"tools/help/uiautomator/UiDevice.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"UiObject", "titleFriendly":"", "summary":"A UiObject is a representation of a view. It is not in any way directly bound to a view as an object reference. A UiObject contains information to help it locate a matching view at runtime based on the UiSelector properties specified in its constructor…", "url":"tools/help/uiautomator/UiObject.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"Configurator", "titleFriendly":"", "summary":"Allows you to set key parameters for running uiautomator tests. The new settings take effect immediately and can be changed any time during a test run. To modify parameters using Configurator , first obtain an instance by calling getInstance() . As a …", "url":"tools/help/uiautomator/Configurator.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"uiautomator", "titleFriendly":"", "summary":"The uiautomator testing framework lets you test your user interface (UI) efficiently by creating automated functional UI testcases that can be run against your app on one or more devices. For more information on testing with the uiautomator framework,…", "url":"tools/help/uiautomator/index.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"UiCollection", "titleFriendly":"", "summary":"Used to enumerate a container's user interface (UI) elements for the purpose of counting, or targeting a sub elements by a child's text or description. Searches for child UI element within the constraints of this UiSelector selector. It looks …", "url":"tools/help/uiautomator/UiCollection.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"UiSelector", "titleFriendly":"", "summary":"Specifies the elements in the layout hierarchy for tests to target, filtered by properties such as text value, content-description, class name, and state information. You can also target an element by its location in a layout hierarchy. Set the search…", "url":"tools/help/uiautomator/UiSelector.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"UiObjectNotFoundException", "titleFriendly":"", "summary":"Generated in test runs when a UiSelector selector could not be matched to any UI element displayed.…", "url":"tools/help/uiautomator/UiObjectNotFoundException.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"IAutomationSupport", "titleFriendly":"", "summary":"Provides auxiliary support for running test cases Allows the running test cases to send out interim status…", "url":"tools/help/uiautomator/IAutomationSupport.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"UiAutomatorTestCase", "titleFriendly":"", "summary":"UI automation tests should extend this class. This class provides access to the following: Provides support for running tests to report interim status Get command line parameters. On the command line when passing -e key value pairs, the Bundle will have…", "url":"tools/help/uiautomator/UiAutomatorTestCase.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"UiScrollable", "titleFriendly":"", "summary":"A UiCollection that supports searching for items in scrollable layout elements. This class can be used with horizontally or vertically scrollable controls. Constructor. Performs a backwards fling action with the default number of fling steps (5). If the…", "url":"tools/help/uiautomator/UiScrollable.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"lint", "titleFriendly":"", "summary":"The Android lint tool is a static code analysis tool that checks your Android project source files for potential bugs and optimization improvements for correctness, security, performance, usability, accessibility, and internationalization. For more information…", "url":"tools/help/lint.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"Systrace", "titleFriendly":"", "summary":"The Systrace tool helps analyze the performance of your application by capturing and displaying execution times of your applications processes and other Android system processes. The tool combines data from the Android kernel such as the CPU scheduler…", "url":"tools/help/systrace.html", "group":"", "keywords": [], "tags": [], "image":"images/systrace/systrace-button.png", "lang":"en", "type":"tools" }, { "title":"Hierarchy Viewer", "titleFriendly":"", "summary":"Hierarchy Viewer allows you to debug and optimize your user interface. It provides a visual representation of the layout's View hierarchy (the Layout View) and a magnified inspector of the display (the Pixel Perfect View). To start Hierarchy Viewer…", "url":"tools/help/hierarchy-viewer.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"Android Developer Tools", "titleFriendly":"", "summary":"ADT (Android Developer Tools) is a plugin for Eclipse that provides a suite of tools that are integrated with the Eclipse IDE. It offers you access to many features that help you develop Android applications. ADT provides GUI access to many of the command…", "url":"tools/help/adt.html", "group":"", "keywords": ["adt"], "tags": ["adt"], "image":"images/layout_editor.png", "lang":"en", "type":"tools" }, { "title":"Tracer for OpenGL ES", "titleFriendly":"", "summary":"Tracer is a tool for analyzing OpenGL for Embedded Systems (ES) code in your Android application. The tool allows you to capture OpenGL ES commands and frame by frame images to help you understand how your graphics commands are being executed. Tracer …", "url":"tools/help/gltracer.html", "group":"", "keywords": [], "tags": [], "image":"images/gltracer/dialog-trace.png", "lang":"en", "type":"tools" }, { "title":"Draw 9-patch", "titleFriendly":"", "summary":"The Draw 9-patch tool allows you to easily create a NinePatch graphic using a WYSIWYG editor. For an introduction to Nine-patch graphics and how they work, please read the section about Nine-patch in the 2D Graphics document. Here's a quick guide …", "url":"tools/help/draw9patch.html", "group":"", "keywords": ["ninepatch"], "tags": ["ninepatch"], "image":"images/draw9patch-norm.png", "lang":"en", "type":"tools" }, { "title":"Traceview", "titleFriendly":"", "summary":"Traceview is a graphical viewer for execution logs saved by your application. Traceview can help you debug your application and profile its performance. To start Traceview, enter the following command from the SDK tools/ directory: For more information…", "url":"tools/help/traceview.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"sqlite3", "titleFriendly":"", "summary":"From a remote shell to your device or from your host machine, you can use the sqlite3 command-line program to manage SQLite databases created by Android applications. The sqlite3 tool includes many useful commands, such as .dump to print out the contents…", "url":"tools/help/sqlite3.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"monkeyrunner", "titleFriendly":"", "summary":"The monkeyrunner tool provides an API for writing programs that control an Android device or emulator from outside of Android code. With monkeyrunner, you can write a Python program that installs an Android application or test package, runs it, sends …", "url":"tools/help/monkeyrunner_concepts.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"SDK Manager", "titleFriendly":"", "summary":"The Android SDK separates tools, platforms, and other components into packages you can download using the SDK Manager. For example, when the SDK Tools are updated or a new version of the Android platform is released, you can use the SDK Manager to quickly…", "url":"tools/help/sdk-manager.html", "group":"", "keywords": [], "tags": [], "image":"images/sdk_manager_packages.png", "lang":"en", "type":"tools" }, { "title":"Android Emulator", "titleFriendly":"", "summary":"The Android SDK includes a mobile device emulator — a virtual mobile device that runs on your computer. The emulator lets you develop and test Android applications without using a physical device. This document is a reference to the available command …", "url":"tools/help/emulator.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"MonkeyRunner", "titleFriendly":"", "summary":"A monkeyrunner class that contains static utility methods. Displays an alert dialog to the process running the current program. The dialog is modal, so the program pauses until the user clicks the dialog's button. Displays a dialog with a list of …", "url":"tools/help/MonkeyRunner.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"HPROF Converter", "titleFriendly":"", "summary":"The hprof-conv tool converts the HPROF file that is generated by the Android SDK tools to a standard format so you can view the file in a profiling tool of your choice. You can use "-" for <infile> or <outfile> to specify stdin or…", "url":"tools/help/hprof-conv.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"Device Monitor", "titleFriendly":"", "summary":"Android Device Monitor is a stand-alone tool that provides a graphical user interface for several Android application debugging and analysis tools. The Monitor tool does not require installation of an integrated development environment, such as Eclipse…", "url":"tools/help/monitor.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"MonkeyImage", "titleFriendly":"", "summary":"A monkeyrunner class to hold an image of the device or emulator's screen. The image is copied from the screen buffer during a screenshot. This object's methods allow you to convert the image into various storage formats, write the image to a file…", "url":"tools/help/MonkeyImage.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" }, { "title":"UI/Application Exerciser Monkey", "titleFriendly":"", "summary":"The Monkey is a program that runs on your emulator or device and generates pseudo-random streams of user events such as clicks, touches, or gestures, as well as a number of system-level events. You can use the Monkey to stress-test applications that you…", "url":"tools/help/monkey.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"tools" } ]; var TRAINING_RESOURCES = [ { "title":"Determining and Monitoring the Docking State and Type", "titleFriendly":"", "summary":"Устройства под управлением ОС Android можно подключать к нескольким типам док-станций: настольным, которые делятся на цифровые и аналоговые, и автомобильным. В большинстве случаев устройства заряжаются при подключении к док-станции, поэтому состояние …", "url":"intl/ru/training/monitoring-device-state/docking-monitoring.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"ru", "type":"training" }, { "title":"Optimizing Battery Life", "titleFriendly":"", "summary":"Качественное приложение должно оказывать минимальное влияние на время работы устройства от батареи. В этом уроке вы научитесь создавать приложения, способные изменять функционал и режим работы в зависимости от состояния устройства. Отключение обновления…", "url":"intl/ru/training/monitoring-device-state/index.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"ru", "type":"training" }, { "title":"Manipulating Broadcast Receivers On Demand", "titleFriendly":"", "summary":"Самый простой способ отслеживать изменения состояния устройства – создать приемники BroadcastReceiver для каждого отслеживаемого состояния и зарегистрировать их в манифесте приложения. Затем в каждом из этих приемников можно переопределять график повторяющихся…", "url":"intl/ru/training/monitoring-device-state/manifest-receivers.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"ru", "type":"training" }, { "title":"Determining and Monitoring the Connectivity Status", "titleFriendly":"", "summary":"Чаще всего повторяющиеся оповещения и фоновые службы используются для планового обновления приложения из Интернета, кэширования или загрузки больших объемов данных. Однако если подключение к Интернету не установлено или скорость соединения слишком низкая…", "url":"intl/ru/training/monitoring-device-state/connectivity-monitoring.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"ru", "type":"training" }, { "title":"Monitoring the Battery Level and Charging State", "titleFriendly":"", "summary":"Если вы хотите изменить частоту фоновых обновлений, чтобы продлить время работы устройства от батареи, сначала рекомендуется проверить текущий уровень заряда и состояние зарядки. Именно от этих двух факторов зависит, как обновления повлияют на время работы…", "url":"intl/ru/training/monitoring-device-state/battery-monitoring.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"ru", "type":"training" }, { "title":"Supporting Different Screen Sizes", "titleFriendly":"", "summary":"В этом уроке описаны следующие аспекты обеспечения совместимости интерфейса с разными экранами: Чтобы создать масштабируемый макет, способный адаптироваться к разным экранам, используйте в качестве значений ширины и высоты отдельных компонентов представления…", "url":"intl/ru/training/multiscreen/screensizes.html", "group":"", "keywords": [], "tags": [], "image":"images/training/layout-hvga.png", "lang":"ru", "type":"training" }, { "title":"Designing for Multiple Screens", "titleFriendly":"", "summary":"На платформе Android работают устройства с самыми разными размерами экрана: от телефонов до телевизоров. Чтобы с вашим приложением могли работать как можно больше пользователей, оно должно корректно отображаться на всех этих устройствах. Однако совместимость…", "url":"intl/ru/training/multiscreen/index.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"ru", "type":"training" }, { "title":"Supporting Different Densities", "titleFriendly":"", "summary":"В этом уроке рассказывается, как создать интерфейс, поддерживающий разные разрешения экрана, за счет использования разных ресурсов и не зависящих от разрешения единиц измерения. Разработчики часто допускают одну и ту же ошибку при создании макетов – указывают…", "url":"intl/ru/training/multiscreen/screendensities.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"ru", "type":"training" }, { "title":"Implementing Adaptative UI Flows", "titleFriendly":"", "summary":"Алгоритм пользовательского интерфейса зависит от макета, который в данный момент отображается. Например, если приложение работает в двухпанельном режиме, то при нажатии на элемент в левой панели содержание отобразится в правой. В однопанельном режиме …", "url":"intl/ru/training/multiscreen/adaptui.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"ru", "type":"training" }, { "title":"确定和监控基座对接状态和类型", "titleFriendly":"", "summary":"Android 设备支持几种不同类型的基座。这些类型包括车载或家用基座以及数字和模拟基座。许多基座可用于为插入的设备充电,因此基座状态通常与充电状态紧密相关。 您可以根据手机的基座状态调整更新频率,具体取决于相关应用。如果设备插入的是桌面基座,您就可以提高体育中心类应用的更新频率;如果设备插入的是车载基座,您就可以完全停用此类更新。相反,如果设备插入的是车载基座且后台服务正在更新路况,您就可以最大程度地提高更新频率。 系统是以持续 Intent 的形式广播基座状态的,这样您就可以查询设备是否插入了基座…", "url":"intl/zh-cn/training/monitoring-device-state/docking-monitoring.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"zh-cn", "type":"training" }, { "title":"优化电池使用时间", "titleFriendly":"", "summary":"为了打造一个优秀的应用,您应设法降低应用对电池使用时间的影响。阅读完本教程后,您就可以让自己构建的应用根据其所在设备的状态来监控和调整自身的功能和行为。 要确保在不影响用户体验的情况下最大程度地降低应用对电池使用时间的影响,您可以采取一些措施,例如在网络连接断开时停用后台服务更新,或在电池电量较低时降低此类更新的频率。…", "url":"intl/zh-cn/training/monitoring-device-state/index.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"zh-cn", "type":"training" }, { "title":"根据需要操作广播接收器", "titleFriendly":"", "summary":"监控设备状态变化的最简单方法就是,为您监控的每种状态创建 BroadcastReceiver 并在应用清单中逐一进行注册。然后,您只需根据当前设备状态在每个接收器中重新安排重复提醒即可。 此方法的负面影响在于,只要系统触发了这些接收器中的任何一个,相关应用就会唤醒设备,其频率可能会远远超过所需的水平。 更好的方法是在运行时停用或启用广播接收器。这样的话,您就可以将自己在清单中声明的接收器用作被动提醒,只有在需要时才会由系统事件触发。 您可以使用 PackageManager 切换清单中定义的任意组件的启用状态…", "url":"intl/zh-cn/training/monitoring-device-state/manifest-receivers.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"zh-cn", "type":"training" }, { "title":"确定和监控网络连接状态", "titleFriendly":"", "summary":"重复提醒和后台服务最常见的用途之一,就是为来自互联网资源的应用数据、缓存数据安排定期更新或执行长时间运行的下载任务。但是,如果您没有连接互联网,或因连接过慢而无法完成下载,那就根本没必要唤醒设备并安排更新了。 您可以使用 ConnectivityManager 查看是否确实已连接互联网,如果已连接,您还可以了解当前的连接类型。 如果设备未连接互联网,就没有必要根据互联网资源安排更新了。以下代码段说明如何使用 ConnectivityManager 查询有效网络并确定该网络是否已连接互联网。 您也可以确定当前可用的互联网连接的类型…", "url":"intl/zh-cn/training/monitoring-device-state/connectivity-monitoring.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"zh-cn", "type":"training" }, { "title":"监控电池电量和充电状态", "titleFriendly":"", "summary":"如果您要更改后台更新频率,从而减少更新对电池使用时间的影响,最好先查看当前的电池电量和充电状态。 对应用进行更新会影响电池使用时间,具体取决于设备的电池电量和充电状态。如果用户正在通过交流电源为设备充电,更新应用的影响就可以忽略不计。因此,在大多数情况下,只要设备连接了充电器,您就可以最大程度地提高刷新频率。相反,如果设备在消耗电池电量,那么降低更新频率就可以延长电池使用时间。 同样,您也可以查看电池电量,如果电量即将耗尽,您就可以降低更新频率,甚至停止更新。 请先确定当前的充电状态。BatteryManager…", "url":"intl/zh-cn/training/monitoring-device-state/battery-monitoring.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"zh-cn", "type":"training" }, { "title":"支持各种屏幕尺寸", "titleFriendly":"", "summary":"此教程将向您介绍如何通过以下方法支持各种尺寸的屏幕: 要确保布局的灵活性并适应各种尺寸的屏幕,您应使用 "wrap_content" 和 "match_parent" 控制某些视图组件的宽度和高度。如果您使用 "wrap_content" ,系统就会将视图的宽度或高度设置成所需的最小尺寸以适应视图中的内容,而 "match_parent" (在低于 API 级别 8 的级别中称为 "fill_parent"…", "url":"intl/zh-cn/training/multiscreen/screensizes.html", "group":"", "keywords": [], "tags": [], "image":"images/training/layout-hvga.png", "lang":"zh-cn", "type":"training" }, { "title":"针对多种屏幕进行设计", "titleFriendly":"", "summary":"Android 支持数百种屏幕尺寸不同的设备,包括小型手机和大型电视机。因此,请务必将您的应用设计为与所有的屏幕尺寸兼容,以便让尽可能多的用户使用该应用。 不过,与各种类型的设备兼容还远远不够。由于各种屏幕尺寸对用户互动产生的利弊有所不同,因此要真正满足用户需求并广获好评,您的应用不仅需要支持多种屏幕,还应针对各类屏幕配置的用户体验进行优化。 本教程将向您介绍如何针对多种屏幕配置优化和实施相应的用户界面。 各教程中都提及了一种来自一个示例应用的代码,该应用展示了关于针对多种分辨率进行优化的最佳实践…", "url":"intl/zh-cn/training/multiscreen/index.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"zh-cn", "type":"training" }, { "title":"支持各种屏幕密度", "titleFriendly":"", "summary":"本教程将向您介绍如何通过提供不同资源和使用独立于分辨率的测量单位来支持不同屏幕密度。 在设计布局时,大家经常会误使用绝对像素来定义距离或尺寸,您一定要避免犯这种错误。由于各种屏幕的像素密度都有所不同,因此相同数量的像素在不同设备上的实际大小也有所差异,这样使用像素定义布局尺寸就会产生问题。因此,请务必使用 dp 或 sp 单位指定尺寸。 dp 是一种非密度制约像素,其尺寸与 160 dpi 像素的实际尺寸相同。 sp 也是一种基本单位,但它可根据用户的偏好文字大小进行调整(即尺度独立性像素),因此您应将该测量单位用于定义文字大小…", "url":"intl/zh-cn/training/multiscreen/screendensities.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"zh-cn", "type":"training" }, { "title":"实施自适应用户界面流程", "titleFriendly":"", "summary":"根据您的应用当前显示的布局,用户界面流程可能会有所不同。例如,如果您的应用处于双面板模式下,点击左侧面板上的项即可直接在右侧面板上显示相关内容;如果该应用处于单面板模式下,相关内容就应以其他活动的形式在同一面板上显示。 由于每种布局的实施都会稍有不同,因此您可能需要先确定当前向用户显示的布局。例如,您可以了解用户所处的是“单面板”模式还是“双面板”模式。要做到这一点,您可以查询指定视图是否存在以及是否已显示出来。 请注意,这段代码用于查询“报道”面板是否可用,与针对具体布局的硬编码查询相比,这段代码的灵活性要大得多…", "url":"intl/zh-cn/training/multiscreen/adaptui.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"zh-cn", "type":"training" }, { "title":"构建灵活的界面", "titleFriendly":"", "summary":"在设计支持各种屏幕尺寸的应用时,你可以在不同的布局配置中重复使用 Fragment ,以便根据相应的屏幕空间提供更出色的用户体验。 例如,一次只显示一个 Fragment 可能就很适合手机这种单窗格界面,但在平板电脑上,你可能需要设置并列的 Fragment,因为平板电脑的屏幕尺寸较宽阔,可向用户显示更多信息。 利用 FragmentManager 类提供的方法,你可以在运行时添加、移除和替换 Activity 中的 Fragment,以便为用户提供一种动态体验。 你可以在 Activity 运行时向其添加…", "url":"intl/zh-cn/training/basics/fragments/fragment-ui.html", "group":"", "keywords": [], "tags": [], "image":"images/training/basics/fragments-screen-mock.png", "lang":"zh-cn", "type":"training" }, { "title":"Cómo determinar y controlar el tipo de conector y el estado de la conexión", "titleFriendly":"", "summary":"Los dispositivos Android se pueden conectar a distintos tipos de conectores. Por ejemplo, se puede utilizar conectores para coche o domésticos y tanto digitales como analógicos. Normalmente, el estado del conector está vinculado al estado de carga, ya…", "url":"intl/es/training/monitoring-device-state/docking-monitoring.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"es", "type":"training" }, { "title":"Cómo optimizar la duración de la batería", "titleFriendly":"", "summary":"Uno de los objetivos de tu aplicación debe ser limitar su impacto en la duración de la batería del dispositivo en el que esté instalada. Después de leer estas secciones, podrás desarrollar aplicaciones que optimizarán el uso de la batería en función del…", "url":"intl/es/training/monitoring-device-state/index.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"es", "type":"training" }, { "title":"Cómo manipular los receptores de emisión bajo demanda", "titleFriendly":"", "summary":"La forma más sencilla de controlar los cambios en el estado del dispositivo es crear un BroadcastReceiver para cada estado que vayas a controlar y registrar cada uno de ellos en el archivo de manifiesto de tu aplicación. A continuación, en cada uno de…", "url":"intl/es/training/monitoring-device-state/manifest-receivers.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"es", "type":"training" }, { "title":"Cómo determinar y controlar el estado de la conectividad", "titleFriendly":"", "summary":"Algunos de los usos más comunes para las alarmas con repetición y los servicios en segundo plano es programar actualizaciones regulares de los datos de aplicaciones a partir de recursos de Internet, almacenar datos en la memoria caché o ejecutar descargas…", "url":"intl/es/training/monitoring-device-state/connectivity-monitoring.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"es", "type":"training" }, { "title":"Cómo controlar el nivel de batería y el estado de carga", "titleFriendly":"", "summary":"Al modificar la frecuencia de las actualizaciones en segundo plano para reducir el efecto de las mismas en la duración de la batería, te recomendamos que comiences por comprobar el estado de carga y el nivel actual de la batería. El impacto derivado de…", "url":"intl/es/training/monitoring-device-state/battery-monitoring.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"es", "type":"training" }, { "title":"Cómo admitir varios tamaños de pantalla", "titleFriendly":"", "summary":"En esta sección se explica cómo admitir varios tamaños de pantalla. Para ello, sigue estos pasos: Para garantizar que el diseño es flexible y que se adapta a varios tamaños de pantalla, debes utilizar los valores "wrap_content" y "match_parent…", "url":"intl/es/training/multiscreen/screensizes.html", "group":"", "keywords": [], "tags": [], "image":"images/training/layout-hvga.png", "lang":"es", "type":"training" }, { "title":"Cómo diseñar aplicaciones para varias pantallas", "titleFriendly":"", "summary":"Android se utiliza en cientos de dispositivos con diferentes tamaños de pantalla, desde pequeños teléfonos hasta enormes televisores. Por ello, es importante que diseñes tu aplicación para que sea compatible con todos los tamaños de pantalla y esté disponible…", "url":"intl/es/training/multiscreen/index.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"es", "type":"training" }, { "title":"Cómo admitir varias densidades de pantalla", "titleFriendly":"", "summary":"En esta sección se explica cómo proporcionar diferentes recursos y utilizar unidades de medida de resolución independiente para admitir diferentes densidades de pantalla. Un error común que debes evitar al crear tus diseños es utilizar píxeles absolutos…", "url":"intl/es/training/multiscreen/screendensities.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"es", "type":"training" }, { "title":"Cómo implementar interfaces de usuario adaptables", "titleFriendly":"", "summary":"En función del diseño actual de tu aplicación, la interfaz puede variar. Por ejemplo, si tu aplicación está en modo de panel dual, haz clic en un elemento del panel izquierdo para que aparezca en el panel de la derecha. Asimismo, si está en modo de panel…", "url":"intl/es/training/multiscreen/adaptui.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"es", "type":"training" }, { "title":"カタログ ブラウザを作成する", "titleFriendly":"", "summary":"TV で使用するメディア アプリでは、ユーザーがコンテンツ内容をブラウズして選び、再生を開始できるようにする必要があります。このタイプのアプリのコンテンツ ブラウジングに関するユーザー エクスペリエンスは、シンプルで直感的、そして目を楽しませる魅力的なものである必要があります。 このレッスンでは、 v17 leanback サポート ライブラリ が提供するクラスを使用して、アプリのメディア カタログから音楽やビデオを閲覧するためのユーザー インターフェースを実装する方法を説明します。 leanback…", "url":"intl/ja/training/tv/playback/browse.html", "group":"", "keywords": ["tv","browsefragment","presenter","backgroundmanager"], "tags": ["tv","browsefragment","presenter","backgroundmanager"], "image":"", "lang":"ja", "type":"training" }, { "title":"再生中カードを表示する", "titleFriendly":"", "summary":"TV アプリでは、ユーザーが他のアプリを使用中にバックグラウンドで音楽やその他のメディアを再生できる場合があります。このタイプのアプリの場合、アプリに戻って音楽を一時停止したり、新しい曲に切り替えたりする方法をユーザーに提供する必要があります。Android のフレームワークでは、ホーム スクリーン上の推奨する行に [ 再生中 ] カードを表示することで、 TV アプリで上記の操作を行えるようになります。 [再生中] カードは、アクティブなメディア セッションのホーム スクリーンの推奨する行に表示…", "url":"intl/ja/training/tv/playback/now-playing.html", "group":"", "keywords": ["tv","mediasession"], "tags": ["tv","mediasession"], "image":"", "lang":"ja", "type":"training" }, { "title":"TV 再生アプリのビルド", "titleFriendly":"", "summary":"メディア ファイルのブラウジングと再生は、TV アプリが提供するユーザー エクスペリエンスによって左右される部分が多くあります。ゼロから開始して、高速でなめらかな魅力あるユーザー エクスペリエンスを確実にビルドすることは、非常に困難な場合があります。アプリの露出するメディア カタログが、小規模か大規模かにかかわらず、ユーザーが簡単にオプションをブラウジングでき、希望のコンテンツに辿りつけるようにすることが重要です。 Android のフレームワークでは、 v17 leanback サポート ライブラリ…", "url":"intl/ja/training/tv/playback/index.html", "group":"", "keywords": ["tv","leanback"], "tags": ["tv","leanback"], "image":"", "lang":"ja", "type":"training" }, { "title":"詳細ビューをビルドする", "titleFriendly":"", "summary":"v17 leanback サポート ライブラリ が提供するメディア ブラウジング インターフェース クラスには、説明やレビューなどのメディア アイテムに関する追加情報を表示したり、アイテムの購入やコンテンツの再生など、アイテムに対するアクションを取ったりするためのクラスが含まれます。 このレッスンでは、メディア アイテムの詳細に関するプレゼンター クラスを作成したり、DetailsFragment クラスを拡張して、ユーザーがメディア アイテムを選択した場合に表示する詳細ビューを実装したりする方法…", "url":"intl/ja/training/tv/playback/details.html", "group":"", "keywords": ["tv","detailsfragment"], "tags": ["tv","detailsfragment"], "image":"", "lang":"ja", "type":"training" }, { "title":"TV アプリのビルドを開始する", "titleFriendly":"", "summary":"TV アプリでは、携帯電話やタブレット向けのものと同じ構造を使用します。つまり、Android アプリのビルドに関する既知の技術を使用して新たな TV アプリを作成したり、既存のアプリを TV 端末でも使用できるように編集したりできます。 このレッスンでは、TV アプリのビルドの際の開発環境の準備方法と、TV 端末上でアプリを使用できるようにするために最低限必要な変更について説明します。 このセクションでは、TV 端末向けに既存のアプリを変更したり、新しく作成する方法について説明します。TV 端末向…", "url":"intl/ja/training/tv/start/start.html", "group":"", "keywords": ["tv","leanback","recyclerview"], "tags": ["tv","leanback","recyclerview"], "image":"", "lang":"ja", "type":"training" }, { "title":"TV アプリのビルド", "titleFriendly":"", "summary":"Android は、ハイビジョン TV などの大画面の端末で使用するアプリ向けに最適化された、表現力豊かなユーザー エクスペリエンスを実現します。TV で使用できるアプリによって、ユーザーは自宅のソファでくつろぎながらさまざまな操作を行えるようになります。 TV アプリでは、携帯電話やタブレット向けのものと同じ構造を使用します。つまり、Android アプリのビルドに関する既知の技術を使用して新たな TV アプリを作成したり、既存のアプリを TV 端末でも使用できるように拡張したりできます。ただし…", "url":"intl/ja/training/tv/start/index.html", "group":"", "keywords": ["tv","leanback"], "tags": ["tv","leanback"], "image":"", "lang":"ja", "type":"training" }, { "title":"TV 用のナビゲーションを作成する", "titleFriendly":"", "summary":"TV 端末では、アプリのナビゲーション コントロールが限定されています。TV アプリ向けの効率的なナビゲーション スキームを作成できるかどうかは、これらの限定されたナビゲーション コントロールと、アプリを使用するユーザー側の認識の限界についての理解にかかっています。TV 向け Android アプリをビルドする際には、ユーザーがタッチ スクリーンではなく TV のリモコン ボタンを使用して実際にどのようにアプリをナビゲートするかについて、よく考慮する必要があります。 このレッスンでは、効率的な TV…", "url":"intl/ja/training/tv/start/navigation.html", "group":"", "keywords": ["tv","d-pad","focus"], "tags": ["tv","d-pad","focus"], "image":"", "lang":"ja", "type":"training" }, { "title":"TV ハードウェアを処理する", "titleFriendly":"", "summary":"TV のハードウェアは、他の Android 端末とは大きく異なります。TV には、タッチスクリーン、カメラ、GPS 受信機など、他の Android 端末でよく使われるハードウェア機能がありません。そして TV は、2 次ハードウェア端末に完全に依存しています。つまり、ユーザーはリモコンやゲーム機のコントローラで TV アプリを操作する必要があります。TV アプリをビルドする際は、ハードウェア上の制限や TV 向けハードウェアの操作要件を慎重に考慮する必要があります。 このレッスンでは、TV で…", "url":"intl/ja/training/tv/start/hardware.html", "group":"", "keywords": ["tv"], "tags": ["tv"], "image":"", "lang":"ja", "type":"training" }, { "title":"TV 向けレイアウトをビルドする", "titleFriendly":"", "summary":"TV スクリーンは 10 フィートほど離れて見ることが通常であり、他の Android 端末のディスプレイよりもはるかに大きいことが多く、小型の端末と同レベルの精度と色を再現できません。便利で楽しいユーザー エクスペリエンスを作成する上で、これらの要素を配慮して TV 端末向けアプリのレイアウトを作成する必要があります。 このレッスンでは、TV アプリ用の効果的なレイアウトをビルドするための最低限の要件と実装の詳細を説明します。 Android の テーマ は、TV アプリのレイアウトの基礎を提供…", "url":"intl/ja/training/tv/start/layouts.html", "group":"", "keywords": ["tv"], "tags": ["tv"], "image":"", "lang":"ja", "type":"training" }, { "title":"ホルダーの装着状態とタイプの特定と監視", "titleFriendly":"", "summary":"Android 搭載端末を装着できるホルダーの種類には、さまざまなものがあります。たとえば、車載用や家庭用のホルダーがあり、デジタルかアナログかという区別もあります。ホルダー装着状態は一般的に、充電状態と密接にリンクしています。多くのホルダーは、装着されている端末に電力を供給しているからです。 端末のホルダー装着状態が更新の頻度にどのように影響するかは、アプリによって異なります。たとえば、スポーツ センター アプリなら、卓上ホルダー装着時には更新頻度を上げ、カー ホルダー装着時には更新を完全に停止…", "url":"intl/ja/training/monitoring-device-state/docking-monitoring.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"ja", "type":"training" }, { "title":"電池消費量の最適化", "titleFriendly":"", "summary":"アプリを開発するときは、ホスト端末の電池消費量への影響を抑えるよう心がける必要があります。このクラスを修了すると、開発するアプリの中でホスト端末の状態を監視し、それに基づいて機能や動作を変更することができるようになります。 接続が失われたときはバックグラウンド サービスの更新を停止する、電池残量が低下したときは更新の頻度を下げるといった対策を講じることにより、ユーザー エクスペリエンスを損なうことなく、アプリが電池消費量に及ぼす影響を最小限に抑えることができます。…", "url":"intl/ja/training/monitoring-device-state/index.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"ja", "type":"training" }, { "title":"オンデマンドでのブロードキャスト レシーバ操作", "titleFriendly":"", "summary":"端末の状態変化を監視する最も単純な方法は、監視対象とする状態ごとに BroadcastReceiver を作成し、それぞれをアプリのマニフェスト内で登録するというものです。これらの各レシーバ内で、端末の現在の状態に基づいて反復アラームのスケジュールを再設定します。 この方法のデメリットは、これらのレシーバのいずれかがトリガされるたびに端末がスリープから復帰することですが、このことは必要以上に頻繁に発生する可能性があります。 これよりも良い方法は、実行時にブロードキャスト レシーバをオンまたはオフにするというものです…", "url":"intl/ja/training/monitoring-device-state/manifest-receivers.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"ja", "type":"training" }, { "title":"接続状態の特定と監視", "titleFriendly":"", "summary":"反復アラームとバックグラウンド サービスの用途のうち代表的なものとしては、インターネット リソースからアプリのデータを定期的に更新するためのスケジュール設定や、データのキャッシュへの格納、長時間に及ぶダウンロードの実行などがあります。しかし、インターネットに接続されていないときや、速度が低すぎるためにダウンロードを完了できない場合にまで、更新をスケジューリングするために端末をスリープ状態から復帰させる必要があるでしょうか。 ConnectivityManager を使用すると、端末が実際にインターネット…", "url":"intl/ja/training/monitoring-device-state/connectivity-monitoring.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"ja", "type":"training" }, { "title":"電池残量と充電状態の監視", "titleFriendly":"", "summary":"バックグラウンド更新が電池消費量に及ぼす影響を抑えるために更新の頻度を変更するには、初めに現在の電池残量と充電状態を調べることをおすすめします。 アプリの更新が電池消費量に及ぼす影響の度合いは、端末の電池残量と充電状態によって異なります。AC 電源から端末を充電しているときは、更新の実行による影響はごくわずかなので、ほとんどの場合は、端末が AC 電源に接続されている限り、更新頻度を最大にして差し支えありません。逆に、端末が電池で駆動しているときは、更新頻度を下げると電池消費量を抑えることができます…", "url":"intl/ja/training/monitoring-device-state/battery-monitoring.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"ja", "type":"training" }, { "title":"さまざまな画面サイズのサポート", "titleFriendly":"", "summary":"このレッスンでは、異なる画面サイズを以下のような方法でサポートする方法について学習します: レイアウトをさまざまな画面サイズに柔軟に対応させるには、一部のビュー コンポーネントの幅と高さに "wrap_content" と "match_parent" を使用する必要があります。 "wrap_content" を使用すると、ビューの幅や高さがそのビュー内にコンテンツが収まるのに必要な最小サイズに設定されます。一方、 "match_parent…", "url":"intl/ja/training/multiscreen/screensizes.html", "group":"", "keywords": [], "tags": [], "image":"images/training/layout-hvga.png", "lang":"ja", "type":"training" }, { "title":"複数画面のデザイン", "titleFriendly":"", "summary":"Android は、小さな携帯電話から大きなテレビまで、画面サイズも種類もさまざまなデバイスに搭載できます。そのため、できる限り多くのユーザーが使用できるように、すべての画面サイズに対応できるようアプリを設計することが重要になります。 しかし、さまざまな種類のデバイスに対応できるだけでは十分ではありません。画面サイズによって、ユーザーが操作できることが決まってくるため、本当にユーザーを満足させてよい印象を持ってもらうためには、アプリが単に複数の画面をサポートするだけでは不十分です: 画面設定ごとに…", "url":"intl/ja/training/multiscreen/index.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"ja", "type":"training" }, { "title":"さまざまな画面密度のサポート", "titleFriendly":"", "summary":"このレッスンでは、異なるリソースを生成し、かつ解像度非依存単位を使用して、異なる画面密度をサポートする方法について学習します。 レイアウトを設計する際に回避すべきよくある落とし穴の 1 つとして、絶対ピクセルを使用して距離やサイズを定義することがあります。ピクセルを使用してレイアウトのサイズを定義すると、画面によってピクセル密度が異なるため、問題が起こります。したがって、同じピクセル数では、デバイスが異なる場合に物理サイズが異なる可能性があります。そのため、サイズを指定する場合は、常に dp 単位…", "url":"intl/ja/training/multiscreen/screendensities.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"ja", "type":"training" }, { "title":"順応性のある UI フローの実装", "titleFriendly":"", "summary":"アプリが現在表示しているレイアウトによって、UI フローが異なる可能性があります。たとえば、アプリがデュアルペイン モードであれば、左ペインのアイテムをクリックすると、単に右ペインにコンテンツが表示されるだけですが、シングルペイン モードであれば、コンテンツは(別のアクティビティ内の)コンテンツ専用のペインに表示される必要があります。 レイアウトによって実装が多少異なるので、まず、ユーザーが現在どのようなレイアウトを表示しているかを判別する必要があります。たとえば、ユーザーが表示しているレイアウト…", "url":"intl/ja/training/multiscreen/adaptui.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"ja", "type":"training" }, { "title":"", "titleFriendly":"", "summary":"Android 기기는 여러 종류의 도크로 도킹될 수 있습니다. 여기에는 카폰 또는 홈 도크와 디지털 및 아날로그 도크가 포함됩니다. 많은 도크가 도킹된 기기에 전기를 공급하므로 일반적으로 충전 상태와 도크 상태는 밀접한 관련이 있습니다. 전화의 도크 상태가 업데이트 빈도에 어떻게 영향을 미치는지는 앱에 따라 다릅니다. 스포츠 센터 앱이라면 데스크톱 도크에서 업데이트 빈도를 높이고 카폰 도크에 연결된 경우 업데이트를 완전히 사용 중지해도 좋습니다.…", "url":"intl/ko/training/monitoring-device-state/docking-monitoring.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"ko", "type":"training" }, { "title":"", "titleFriendly":"", "summary":"좋은 앱은 호스트 기기의 배터리 수명에 미치는 영향이 미미해야 합니다. 강의를 통해 호스트 기기의 상태에 따라 기능과 동작을 수정하는 것을 모니터링하는 앱을 구축할 수 있게 됩니다. 연결이 끊겼을 때 백그라운드 서비스 업데이트를 사용 중지하거나, 배터리 수준이 낮을 때 업데이트 빈도를 줄이는 조치를 취하여, 사용자 환경을 손상시키지 않고 배터리 수명에 미치는 영향을 최소화할 수 있습니다.…", "url":"intl/ko/training/monitoring-device-state/index.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"ko", "type":"training" }, { "title":"", "titleFriendly":"", "summary":"기기 상태 변경을 모니터링하는 가장 간단한 방법은 모니터링하는 각 상태에 대해 BroadcastReceiver를 만들어 각각을 애플리케이션 매니페스트에 등록하는 것입니다. 그러면 각 리시버 내에서 현재 기기 상태를 기반으로 반복 알람의 일정을 간단히 변경할 수 있습니다. 이 방법의 부작용은 리시버 중 하나라도 실행되면 매번 앱이 기기의 절전 모드를 해제시킨다는 것입니다. 더 나은 방법은 런타임 때 브로드캐스트 리시버를 사용 중지 또는 사용하도록 …", "url":"intl/ko/training/monitoring-device-state/manifest-receivers.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"ko", "type":"training" }, { "title":"", "titleFriendly":"", "summary":"반복 알람과 백그라운드 서비스는 일반적으로 인터넷 리소스 및 캐시 데이터로부터 애플리케이션의 업데이트를 예약하거나 긴 시간이 필요한 다운로드를 실행하는 데 사용됩니다. 하지만 인터넷에 연결되어 있지 않거나 연결이 매우 느려 다운로드를 완료하지 못한다면 업데이트 예약을 해도 소용이 없겠죠? 인터넷에 연결되었는지, 어떤 연결 방식인지를 확인하기 위하여 ConnectivityManager를 사용할 수 있습니다. 인터넷에 연결되어 있지 않는 경우 인터넷…", "url":"intl/ko/training/monitoring-device-state/connectivity-monitoring.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"ko", "type":"training" }, { "title":"", "titleFriendly":"", "summary":"백그라운드 업데이트가 배터리 수명에 미치는 영향을 줄이기 위하여 백그라운드 업데이트 빈도수를 변경하는 경우, 현재 배터리 수준과 충전 상태부터 확인하는 것이 좋습니다. 애플리케이션 업데이트 수행이 배터리 수명에 미치는 영향은 배터리 수준 및 기기의 충전 상태에 따라 다릅니다. 기기를 AC 충전기로 충전하는 동안 업데이트 수행이 미치는 영향은 무시해도 좋습니다. 따라서 기기가 범용 충전기에 연결되어 있을 때는 대부분 새로고침 빈도를 최대화할 수 있습니다…", "url":"intl/ko/training/monitoring-device-state/battery-monitoring.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"ko", "type":"training" }, { "title":"다양한 화면 크기 지원", "titleFriendly":"", "summary":"이 강의에서는 다양한 화면 크기를 지원하는 방법을 설명합니다. 레이아웃이 다양한 화면 크기에 따라 유연하게 조정되도록 하려면 일부 뷰 구성요소의 너비와 높이에 "wrap_content" 및 "match_parent" 를 사용해야 합니다. "wrap_content" 를 사용하면 뷰의 너비와 높이가 해당 뷰 내에 콘텐츠가 들어가는데 필요한 최소 크기로 설정되는 반면, "match_parent…", "url":"intl/ko/training/multiscreen/screensizes.html", "group":"", "keywords": [], "tags": [], "image":"images/training/layout-hvga.png", "lang":"ko", "type":"training" }, { "title":"", "titleFriendly":"", "summary":"Android는 소형 휴대전화에서부터 대형 TV에 이르기까지 다양한 화면 크기의 수많은 기기 유형을 지원합니다. 따라서 애플리케이션이 모든 화면 크기와 호환되어 최대한 많은 사용자가 사용할 수 있도록 디자인하는 것이 중요합니다. 하지만 다양한 기기 유형과 호환되는 것만으로는 충분하지 않습니다. 각 화면 크기에 따라 사용자 상호작용에 유리한 점과 불리한 점이 다릅니다. 따라서 사용자에게 만족을 주고 깊은 인상을 심어주려면 애플리케이션이 단지 여러 …", "url":"intl/ko/training/multiscreen/index.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"ko", "type":"training" }, { "title":"", "titleFriendly":"", "summary":"이 강의에서는 다양한 리소스를 제공하고 해상도 독립형(resolution-independent) 측정 단위를 사용함으로써 다양한 화면 밀도를 지원하는 방법을 설명합니다. 레이아웃을 디자인할 때 범하기 쉬운 실수 중 하나는 절대 픽셀(absolute pixel)을 사용하여 거리나 크기를 정의하는 것입니다. 각 화면은 픽셀 밀도가 서로 다른데 레이아웃 크기를 픽셀로 정의하면 동일한 픽셀 수치가 다른 기기에서 다른 물리적 크기와 대응할 수 있어 문제가…", "url":"intl/ko/training/multiscreen/screendensities.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"ko", "type":"training" }, { "title":"", "titleFriendly":"", "summary":"현재 애플리케이션이 표시하는 레이아웃에 따라 UI 플로가 달라질 수 있습니다. 예를 들어 애플리케이션이 이중 창 모드로 되어 있는 경우에는 왼쪽 창에 있는 항목을 클릭하면 오른쪽 창에 콘텐츠가 표시되고, 단일 창 모드로 되어 있는 경우에는 콘텐츠가 해당 창에 표시됩니다(다른 액티비티에서). 각 레이아웃을 구현하는 방식이 약간씩 다르므로 가장 먼저 해야 할 일은 현재 사용자에게 어떤 레이아웃이 표시되는지 확인하는 것입니다. 예를 들어, 사용자가 &…", "url":"intl/ko/training/multiscreen/adaptui.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"ko", "type":"training" }, { "title":"Setting Up File Sharing", "titleFriendly":"", "summary":"To securely offer a file from your app to another app, you need to configure your app to offer a secure handle to the file, in the form of a content URI. The Android FileProvider component generates content URIs for files, based on specifications you …", "url":"training/secure-file-sharing/setup-sharing.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Sharing Files", "titleFriendly":"", "summary":"Apps often have a need to offer one or more of their files to another app. For example, an image gallery may want to offer files to image editors, or a file management app may want to allow users to copy and paste files between areas in external storage…", "url":"training/secure-file-sharing/index.html", "group":"", "keywords": ["fileprovider","share","contentprovider"], "tags": ["fileprovider","share","contentprovider"], "image":"", "lang":"en", "type":"training" }, { "title":"Sharing a File", "titleFriendly":"", "summary":"Once you have set up your app to share files using content URIs, you can respond to other apps' requests for those files. One way to respond to these requests is to provide a file selection interface from the server app that other applications can…", "url":"training/secure-file-sharing/share-file.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Requesting a Shared File", "titleFriendly":"", "summary":"When an app wants to access a file shared by another app, the requesting app (the client) usually sends a request to the app sharing the files (the server). In most cases, the request starts an Activity in the server app that displays the files it can…", "url":"training/secure-file-sharing/request-file.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Retrieving File Information", "titleFriendly":"", "summary":"Before a client app tries to work with a file for which it has a content URI, the app can request information about the file from the server app, including the file's data type and file size. The data type helps the client app to determine if it can…", "url":"training/secure-file-sharing/retrieve-info.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Advanced Training", "titleFriendly":"", "summary":"Advanced Training contains a variety of classes that teach you best practices in Android development. These classes simplify the steps required to enhance your app with powerful platform features or effectively optimize your app performance. What you …", "url":"training/advanced.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Building Live TV Apps", "titleFriendly":"", "summary":"Watching live television shows and other continuous, channel-based content is a big part of the TV experience. Android supports receiving and playback of live video content through the TV Input Framework in Android 5.0 (API level 21). This framework provides…", "url":"training/tv/tif/index.html", "group":"", "keywords": ["tv","tif"], "tags": ["tv","tif"], "image":"images/tv/tv-tif-overview.png", "lang":"en", "type":"training" }, { "title":"Creating a Catalog Browser", "titleFriendly":"", "summary":"Media apps that run on TV need to allow users to browse its content offerings, make a selection, and start playing content. The content browsing experience for apps of this type should be simple and intuitive, as well as visually pleasing and engaging…", "url":"training/tv/playback/browse.html", "group":"", "keywords": ["tv","browsefragment","presenter","backgroundmanager"], "tags": ["tv","browsefragment","presenter","backgroundmanager"], "image":"", "lang":"en", "type":"training" }, { "title":"Displaying a Now Playing Card", "titleFriendly":"", "summary":"TV apps may allow users to play music or other media in the background while using other applications. If your app allows this type of use, it must must provide a means for the user to return to the app to pause the music or switch to a new song. The …", "url":"training/tv/playback/now-playing.html", "group":"", "keywords": ["tv","mediasession"], "tags": ["tv","mediasession"], "image":"", "lang":"en", "type":"training" }, { "title":"Building TV Playback Apps", "titleFriendly":"", "summary":"DevBytes: Android TV — Using the Leanback library Browsing and playing media files is frequently part of the user experience provided by a TV app. Building such an experience from scratch, while making sure that it is fast, fluid, and attractive can be…", "url":"training/tv/playback/index.html", "group":"", "keywords": ["tv","leanback"], "tags": ["tv","leanback"], "image":"", "lang":"en", "type":"training" }, { "title":"Building a Details View", "titleFriendly":"", "summary":"The media browsing interface classes provided by the v17 leanback support library include classes for displaying additional information about a media item, such as a description or reviews, and for taking action on that item, such as purchasing it or …", "url":"training/tv/playback/details.html", "group":"", "keywords": ["tv","detailsfragment"], "tags": ["tv","detailsfragment"], "image":"", "lang":"en", "type":"training" }, { "title":"Building Apps for TV", "titleFriendly":"", "summary":"Starting point for building apps and games for Android TV, with guidelines, information, and examples.", "url":"training/tv/index.html", "group":"", "keywords": [], "tags": [], "image":"design/tv/images/focus.png", "lang":"en", "type":"training" }, { "title":"Building TV Games", "titleFriendly":"", "summary":"How to bring your games to Android TV, including recommendations and examples.", "url":"training/tv/games/index.html", "group":"", "keywords": ["tv","games","controller"], "tags": ["tv","games","controller"], "image":"images/games/game-controller-buttons_2x_crop.png", "lang":"en", "type":"training" }, { "title":"TV Apps Checklist", "titleFriendly":"", "summary":"Users enjoy the TV app experience when it is consistent, logical, and predictable. They should be able to navigate within your app and throughout Android TV without getting lost or having to "reset" the UI and start over. Users appreciate clear…", "url":"training/tv/publishing/checklist.html", "group":"", "keywords": ["tv","checklist"], "tags": ["tv","checklist"], "image":"", "lang":"en", "type":"training" }, { "title":"Get Started with TV Apps", "titleFriendly":"", "summary":"TV apps use the same structure as those for phones and tablets. This similarity means you can modify your existing apps to also run on TV devices or create new apps based on what you already know about building apps for Android. This lesson describes …", "url":"training/tv/start/start.html", "group":"", "keywords": ["leanback","recyclerview","launcher"], "tags": ["leanback","recyclerview","launcher"], "image":"", "lang":"en", "type":"training" }, { "title":"Building TV Apps", "titleFriendly":"", "summary":"Android offers a rich user experience that's optimized for apps running on large screen devices, such as high-definition televisions. Apps on TV offer new opportunities to delight your users from the comfort of their couch. TV apps use the same structure…", "url":"training/tv/start/index.html", "group":"", "keywords": ["tv","leanback"], "tags": ["tv","leanback"], "image":"", "lang":"en", "type":"training" }, { "title":"Creating TV Navigation", "titleFriendly":"", "summary":"TV devices provide a limited set of navigation controls for apps. Creating an effective navigation scheme for your TV app depends on understanding these limited controls and the limits of users' perception while operating your app. As you build your…", "url":"training/tv/start/navigation.html", "group":"", "keywords": ["tv","d-pad","focus"], "tags": ["tv","d-pad","focus"], "image":"", "lang":"en", "type":"training" }, { "title":"Handling TV Hardware", "titleFriendly":"", "summary":"TV hardware is substantially different from other Android devices. TVs do not include some of the hardware features found on other Android devices, such as touch screens, cameras, and GPS receivers. TVs are also completely dependent on secondary hardware…", "url":"training/tv/start/hardware.html", "group":"", "keywords": ["unsupported"], "tags": ["unsupported"], "image":"", "lang":"en", "type":"training" }, { "title":"Building Layouts for TV", "titleFriendly":"", "summary":"A TV screen is typically viewed from about 10 feet away, and while it is much larger than most other Android device displays, this type of screen does not provide the same level of precise detail and color as a smaller device. These factors require you…", "url":"training/tv/start/layouts.html", "group":"", "keywords": ["tv"], "tags": ["tv"], "image":"", "lang":"en", "type":"training" }, { "title":"Recommending TV Content", "titleFriendly":"", "summary":"When interacting with TVs, users generally prefer to give minimal input before watching content. An ideal scenario for many TV users is: sit down, turn on, and watch. The fewest steps to get users to content they enjoy is generally the path they prefer…", "url":"training/tv/discovery/recommendations.html", "group":"", "keywords": ["tv","recommendations"], "tags": ["tv","recommendations"], "image":"images/tv/home-recommendations.png", "lang":"en", "type":"training" }, { "title":"Helping Users Find Your Content on TV", "titleFriendly":"", "summary":"TV devices offer many entertainment options for users. They have thousands of content options from apps and related content services. At the same time, most users prefer to use TVs with the least amount of input possible. With the amount of choice available…", "url":"training/tv/discovery/index.html", "group":"", "keywords": ["tv","leanback"], "tags": ["tv","leanback"], "image":"", "lang":"en", "type":"training" }, { "title":"Searching within TV Apps", "titleFriendly":"", "summary":"Users frequently have specific content in mind when using a media app on TV. If your app contains a large catalog of content, browsing for a specific title may not be the most efficient way for users to find what they are looking for. A search interface…", "url":"training/tv/discovery/in-app-search.html", "group":"", "keywords": ["tv","leanback"], "tags": ["tv","leanback"], "image":"", "lang":"en", "type":"training" }, { "title":"Making TV Apps Searchable", "titleFriendly":"", "summary":"Android TV uses the Android search interface to retrieve content data from installed apps and deliver search results to the user. Your app's content data can be included with these results, to give the user instant access to the content in your app…", "url":"training/tv/discovery/searchable.html", "group":"", "keywords": ["search","searchable"], "tags": ["search","searchable"], "image":"", "lang":"en", "type":"training" }, { "title":"Optimizing Layout Hierarchies", "titleFriendly":"", "summary":"It is a common misconception that using the basic layout structures leads to the most efficient layouts. However, each widget and layout you add to your application requires initialization, layout, and drawing. For example, using nested instances of LinearLayout…", "url":"training/improving-layouts/optimizing-layout.html", "group":"", "keywords": [], "tags": [], "image":"images/training/layout-listitem.png", "lang":"en", "type":"training" }, { "title":"Loading Views On Demand", "titleFriendly":"", "summary":"Sometimes your layout might require complex views that are rarely used. Whether they are item details, progress indicators, or undo messages, you can reduce memory usage and speed up rendering by loading the views only when they are needed. ViewStub is…", "url":"training/improving-layouts/loading-ondemand.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Re-using Layouts with <include/>", "titleFriendly":"", "summary":"Although Android offers a variety of widgets to provide small and re-usable interactive elements, you might also need to re-use larger components that require a special layout. To efficiently re-use complete layouts, you can use the View, you can do it…", "url":"training/improving-layouts/reusing-layouts.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Improving Layout Performance", "titleFriendly":"", "summary":"DevBytes: Optimising Layouts with Hierarchy Viewer Layouts are a key part of Android applications that directly affect the user experience. If implemented poorly, your layout can lead to a memory hungry application with slow UIs. The Android SDK includes…", "url":"training/improving-layouts/index.html", "group":"", "keywords": ["include","merge","viewstub","listview"], "tags": ["include","merge","viewstub","listview"], "image":"", "lang":"en", "type":"training" }, { "title":"Making ListView Scrolling Smooth", "titleFriendly":"", "summary":"The key to a smoothly scrolling ListView is to keep the application’s main thread (the UI thread) free from heavy processing. Ensure you do any disk access, network access, or SQL access in a separate thread. To test the status of your app, you can enable…", "url":"training/improving-layouts/smooth-scrolling.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Setting Up a RequestQueue", "titleFriendly":"", "summary":"Volley: Easy, Fast Networking for Android The previous lesson showed you how to use the convenience method Volley.newRequestQueue to set up a RequestQueue, taking advantage of Volley's default behaviors. This lesson walks you through the explicit …", "url":"training/volley/requestqueue.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Making a Standard Request", "titleFriendly":"", "summary":"Volley: Easy, Fast Networking for Android This lesson describes how to use the common request types that Volley supports: If your expected response is one of these types, you probably won't have to implement a custom request. This lesson describes…", "url":"training/volley/request.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Transmitting Network Data Using Volley", "titleFriendly":"", "summary":"Volley: Easy, Fast Networking for Android Volley is an HTTP library that makes networking for Android apps easier and most importantly, faster. Volley is available through the open AOSP repository. Volley offers the following benefits: Volley excels at…", "url":"training/volley/index.html", "group":"", "keywords": [""], "tags": [""], "image":"", "lang":"en", "type":"training" }, { "title":"Implementing a Custom Request", "titleFriendly":"", "summary":"Volley: Easy, Fast Networking for Android This lesson describes how to implement your own custom request types, for types that don't have out-of-the-box Volley support. For cases where you do need to implement a custom request, this is all you need…", "url":"training/volley/request-custom.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Sending a Simple Request", "titleFriendly":"", "summary":"Volley: Easy, Fast Networking for Android At a high level, you use Volley by creating a RequestQueue and passing it Request objects. The RequestQueue manages worker threads for running the network operations, reading from and writing to the cache, and…", "url":"training/volley/simple.html", "group":"", "keywords": [], "tags": [], "image":"images/training/volley-request.png", "lang":"en", "type":"training" }, { "title":"Running in a Background Service", "titleFriendly":"", "summary":"Unless you specify otherwise, most of the operations you do in an app run in the foreground on a special thread called the UI thread. This can cause problems, because long-running operations will interfere with the responsiveness of your user interface…", "url":"training/run-background-service/index.html", "group":"", "keywords": ["intentservice"], "tags": ["intentservice"], "image":"", "lang":"en", "type":"training" }, { "title":"Creating a Background Service", "titleFriendly":"", "summary":"The IntentService class provides a straightforward structure for running an operation on a single background thread. This allows it to handle long-running operations without affecting your user interface's responsiveness. Also, an IntentService isn…", "url":"training/run-background-service/create-service.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Sending Work Requests to the Background Service", "titleFriendly":"", "summary":"The previous lesson showed you how to create an IntentService class. This lesson shows you how to trigger the IntentService to run an operation by sending it an Intent. This Intent can optionally contain data for the IntentService to process. You can …", "url":"training/run-background-service/send-request.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Reporting Work Status", "titleFriendly":"", "summary":"This lesson shows you how to report the status of a work request run in a background service to the component that sent the request. This allows you, for example, to report the status of the request in an Activity object's UI. The recommended way …", "url":"training/run-background-service/report-status.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Adding Search Functionality", "titleFriendly":"", "summary":"Android's built-in search features offer apps an easy way to provide a consistent search experience for all users. There are two ways to implement search in your app depending on the version of Android that is running on the device. This class covers…", "url":"training/search/index.html", "group":"", "keywords": ["searchview","database"], "tags": ["searchview","database"], "image":"", "lang":"en", "type":"training" }, { "title":"Storing and Searching for Data", "titleFriendly":"", "summary":"There are many ways to store your data, such as in an online database, in a local SQLite database, or even in a text file. It is up to you to decide what is the best solution for your application. This lesson shows you how to create a SQLite virtual table…", "url":"training/search/search.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Setting Up the Search Interface", "titleFriendly":"", "summary":"Beginning in Android 3.0, using the SearchView widget as an item in the action bar is the preferred way to provide search in your app. Like with all items in the action bar, you can define the SearchView to show at all times, only when there is room, …", "url":"training/search/setup.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Remaining Backward Compatible", "titleFriendly":"", "summary":"The SearchView and action bar are only available on Android 3.0 and later. To support older platforms, you can fall back to the search dialog. The search dialog is a system provided UI that overlays on top of your application when invoked. To setup the…", "url":"training/search/backward-compat.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Authenticating to OAuth2 Services", "titleFriendly":"", "summary":"In order to securely access an online service, users need to authenticate to the service—they need to provide proof of their identity. For an application that accesses a third-party service, the security problem is even more complicated. Not only does…", "url":"training/id-auth/authenticate.html", "group":"", "keywords": [], "tags": [], "image":"images/training/oauth_dance.png", "lang":"en", "type":"training" }, { "title":"Remembering Your User", "titleFriendly":"", "summary":"Everyone likes it when you remember their name. One of the simplest, most effective things you can do to make your app more lovable is to remember who your user is—especially when the user upgrades to a new device or starts carrying a tablet as well as…", "url":"training/id-auth/identify.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Remembering Users", "titleFriendly":"", "summary":"Android users get attached to their devices and to applications that they love. One way to make your application lovable is to make it personal. Android devices know who your user is, what services they have access to, and where they store your data. …", "url":"training/id-auth/index.html", "group":"", "keywords": ["privacy","oauth","accounts"], "tags": ["privacy","oauth","accounts"], "image":"", "lang":"en", "type":"training" }, { "title":"Creating a Custom Account Type", "titleFriendly":"", "summary":"So far we've talked about accessing Google APIs, which use accounts and users defined by Google. If you have your own online service, though, it won't have Google accounts or users, so what do you do? It turns out to be relatively straightforward…", "url":"training/id-auth/custom_auth.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Managing Device Awake State", "titleFriendly":"", "summary":"When an Android device is left idle, it will first dim, then turn off the screen, and ultimately turn off the CPU. This prevents the device's battery from quickly getting drained. Yet there are times when your application might require a different…", "url":"training/scheduling/index.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Scheduling Repeating Alarms", "titleFriendly":"", "summary":"The App Clinic: Cricket DevBytes: Efficient Data Transfers Alarms (based on the AlarmManager class) give you a way to perform time-based operations outside the lifetime of your application. For example, you could use an alarm to initiate a long-running…", "url":"training/scheduling/alarms.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Keeping the Device Awake", "titleFriendly":"", "summary":"To avoid draining the battery, an Android device that is left idle quickly falls asleep. However, there are times when an application needs to wake up the screen or the CPU and keep it awake to complete some work. The approach you take depends on the …", "url":"training/scheduling/wakelock.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Enabling Deep Links for App Content", "titleFriendly":"", "summary":"To enable Google to crawl your app content and allow users to enter your app from search results, you must add intent filters for the relevant activities in your app manifest. These intent filters allow deep linking to the content in any of your activities…", "url":"training/app-indexing/deep-linking.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Making Your App Content Searchable by Google", "titleFriendly":"", "summary":"DevBytes: App Indexing As mobile apps become more pervasive, users are looking for relevant information not only from web sites but also from apps they have installed. You can enable Google to crawl through your app content and present your Android app…", "url":"training/app-indexing/index.html", "group":"", "keywords": ["app indexing"], "tags": ["appindexing"], "image":"", "lang":"en", "type":"training" }, { "title":"Specifying App Content for Indexing", "titleFriendly":"", "summary":"Google's web crawling bot ( Googlebot ), which crawls and indexes web sites for the Google search engine, can also index content in your Android app. By opting in, you can allow Googlebot to crawl the content in the APK through the Google Play Store…", "url":"training/app-indexing/enabling-app-indexing.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Best Practices for Performance", "titleFriendly":"", "summary":"These classes and articles help you build an app that's smooth, responsive, and uses as little battery as possible.…", "url":"training/best-performance.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Supporting Multiple Game Controllers", "titleFriendly":"", "summary":"While most games are designed to support a single user per Android device, it's also possible to support multiple users with game controllers that are connected simultaneously on the same Android device. This lesson covers some basic techniques for…", "url":"training/game-controllers/multiple-controllers.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Supporting Controllers Across Android Versions", "titleFriendly":"", "summary":"If you are supporting game controllers in your game, it's your responsibility to make sure that your game responds to controllers consistently across devices running on different versions of Android. This lets your game reach a wider audience, and…", "url":"training/game-controllers/compatibility.html", "group":"", "keywords": [], "tags": [], "image":"images/training/backward-compatible-inputmanager.png", "lang":"en", "type":"training" }, { "title":"Handling Controller Actions", "titleFriendly":"", "summary":"At the system level, Android reports input event codes from game controllers as Android key codes and axis values. In your game, you can receive these codes and values and convert them to specific in-game actions. When players physically connect or wirelessly…", "url":"training/game-controllers/controller-input.html", "group":"", "keywords": [], "tags": [], "image":"images/training/game-controller-profiles.png", "lang":"en", "type":"training" }, { "title":"Supporting Game Controllers", "titleFriendly":"", "summary":"You can greatly enhance the user experience in your game by letting players use their favorite game controllers. The Android framework provides APIs for detecting and processing user input from game controllers. This class shows how to make your game …", "url":"training/game-controllers/index.html", "group":"", "keywords": ["game controller"], "tags": ["gamecontroller"], "image":"", "lang":"en", "type":"training" }, { "title":"Building Apps for Wearables", "titleFriendly":"", "summary":"Learn how to build notifications, send and sync data, and use voice actions.", "url":"training/building-wearables.html", "group":"", "keywords": [], "tags": [], "image":"wear/images/notifications.png", "lang":"en", "type":"training" }, { "title":"Best Practices for User Input", "titleFriendly":"", "summary":"These classes cover various subjects of user input, such as touch screen gestures and text input through on-screen input methods and hardware keyboards.…", "url":"training/best-user-input.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Developing for Enterprise", "titleFriendly":"", "summary":"In this class, you'll learn APIs and techniques you can use when developing applications for the enterprise.…", "url":"training/enterprise/index.html", "group":"", "keywords": ["policy","privacy"], "tags": ["policy","privacy"], "image":"", "lang":"en", "type":"training" }, { "title":"Ensuring Compatibility with Managed Profiles", "titleFriendly":"", "summary":"The Android platform allows devices to have managed profiles . A managed profile is controlled by an administrator, and the functionality available to it is set separately from the functionality of the user's primary profile. This approach lets enterprises…", "url":"training/enterprise/app-compatibility.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Enhancing Security with Device Management Policies", "titleFriendly":"", "summary":"Since Android 2.2 (API level 8), the Android platform offers system-level device management capabilities through the Device Administration APIs. In this lesson, you will learn how to create a security-aware application that manages access to its content…", "url":"training/enterprise/device-management-policy.html", "group":"", "keywords": [], "tags": [], "image":"images/training/device-mgmt-activate-device-admin.png", "lang":"en", "type":"training" }, { "title":"Working with Drawables", "titleFriendly":"", "summary":"The following capabilities for drawables help you implement material design in your apps: This lesson shows you how to use these features in your app. With Android 5.0 (API level 21) and above, you can tint bitmaps and nine-patches defined as alpha masks…", "url":"training/material/drawables.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Creating Lists and Cards", "titleFriendly":"", "summary":"To create complex lists and cards with material design styles in your apps, you can use the RecyclerView and CardView widgets. The RecyclerView widget is a more advanced and flexible version of ListView. This widget is a container for displaying large…", "url":"training/material/lists-cards.html", "group":"", "keywords": [], "tags": [], "image":"training/material/images/RecyclerView.png", "lang":"en", "type":"training" }, { "title":"Maintaining Compatibility", "titleFriendly":"", "summary":"Some material design features like the material theme and custom activity transitions are only available on Android 5.0 (API level 21) and above. However, you can design your apps to make use of these features when running on devices that support material…", "url":"training/material/compatibility.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Creating Apps with Material Design", "titleFriendly":"", "summary":"Learn how to apply material design to your apps.", "url":"training/material/index.html", "group":"", "keywords": [], "tags": [], "image":"images/material.png", "lang":"en", "type":"training" }, { "title":"Defining Shadows and Clipping Views", "titleFriendly":"", "summary":"Material design introduces elevation for UI elements. Elevation helps users understand the relative importance of each element and focus their attention to the task at hand. The elevation of a view, represented by the Z property, determines the visual…", "url":"training/material/shadows-clipping.html", "group":"", "keywords": [], "tags": [], "image":"training/material/images/shadows-depth.png", "lang":"en", "type":"training" }, { "title":"Defining Custom Animations", "titleFriendly":"", "summary":"Animations in material design give users feedback on their actions and provide visual continuity as users interact with your app. The material theme provides some default animations for buttons and activity transitions, and Android 5.0 (API level 21) …", "url":"training/material/animations.html", "group":"", "keywords": [], "tags": [], "image":"training/material/images/SceneTransition.png", "lang":"en", "type":"training" }, { "title":"Using the Material Theme", "titleFriendly":"", "summary":"The new material theme provides: You can customize the look of the material theme according to your brand identity with a color palette you control. You can tint the action bar and the status bar using theme attributes, as shown in Figure 3 . The system…", "url":"training/material/theme.html", "group":"", "keywords": [], "tags": [], "image":"design/material/images/MaterialDark.png", "lang":"en", "type":"training" }, { "title":"Getting Started", "titleFriendly":"", "summary":"To create apps with material design: You can add many material design features to your app while maintaining compatibility with versions of Android earlier than 5.0. For more information, see Maintaining Compatibility . To update an existing app to incorporate…", "url":"training/material/get-started.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Sharing Simple Data", "titleFriendly":"", "summary":"One of the great things about Android applications is their ability to communicate and integrate with each other. Why reinvent functionality that isn't core to your application when it already exists in another application? This class covers some …", "url":"training/sharing/index.html", "group":"", "keywords": ["intents","share"], "tags": ["intents","share"], "image":"", "lang":"en", "type":"training" }, { "title":"Sending Simple Data to Other Apps", "titleFriendly":"", "summary":"When you construct an intent, you must specify the action you want the intent to "trigger." Android defines several actions, including ACTION_SEND which, as you can probably guess, indicates that the intent is sending data from one activity …", "url":"training/sharing/send.html", "group":"", "keywords": [], "tags": [], "image":"images/training/sharing/share-text-screenshot.png", "lang":"en", "type":"training" }, { "title":"Receiving Simple Data from Other Apps", "titleFriendly":"", "summary":"Just as your application can send data to other applications, so too can it easily receive data from applications. Think about how users interact with your application, and what data types you want to receive from other applications. For example, a social…", "url":"training/sharing/receive.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Adding an Easy Share Action", "titleFriendly":"", "summary":"Implementing an effective and user friendly share action in your ActionBar is made even easier with the introduction of ActionProvider in Android 4.0 (API Level 14). An ActionProvider, once attached to a menu item in the action bar, handles both the appearance…", "url":"training/sharing/shareaction.html", "group":"", "keywords": [], "tags": [], "image":"images/ui/actionbar-shareaction.png", "lang":"en", "type":"training" }, { "title":"Best Practices for Interaction and Engagement", "titleFriendly":"", "summary":"These classes teach you how to engage and retain your users by implementing the best interaction patterns for Android. For instance, to help users quickly discover content in your app, your app should match their expectations for user interaction on Android…", "url":"training/best-ux.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Implementing Effective Navigation", "titleFriendly":"", "summary":"This class demonstrates how to implement the key navigation design patterns detailed in the Designing Effective Navigation class. After reading the lessons in this class, you should have a strong understanding of how to implement navigation patterns with…", "url":"training/implementing-navigation/index.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Creating a Navigation Drawer", "titleFriendly":"", "summary":"The navigation drawer is a panel that displays the app’s main navigation options on the left edge of the screen. It is hidden most of the time, but is revealed when the user swipes a finger from the left edge of the screen or, while at the top level of…", "url":"training/implementing-navigation/nav-drawer.html", "group":"", "keywords": ["drawerlayout","navigation"], "tags": ["drawerlayout","navigation"], "image":"", "lang":"en", "type":"training" }, { "title":"Providing Proper Back Navigation", "titleFriendly":"", "summary":"Back navigation is how users move backward through the history of screens they previously visited. All Android devices provide a Back button for this type of navigation, so your app should not add a Back button to the UI . In almost all situations, the…", "url":"training/implementing-navigation/temporal.html", "group":"", "keywords": ["back navigation","navutils","taskstackbuilder"], "tags": ["backnavigation","navutils","taskstackbuilder"], "image":"", "lang":"en", "type":"training" }, { "title":"Implementing Descendant Navigation", "titleFriendly":"", "summary":"Descendant navigation is navigation down the application's information hierarchy. This is described in Designing Effective Navigation and also covered in Android Design: Application Structure . Descendant navigation is usually implemented using Intent…", "url":"training/implementing-navigation/descendant.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Creating Swipe Views with Tabs", "titleFriendly":"", "summary":"Swipe views provide lateral navigation between sibling screens such as tabs with a horizontal finger gesture (a pattern sometimes known as horizontal paging). This lesson teaches you how to create a tab layout with swipe views for switching between tabs…", "url":"training/implementing-navigation/lateral.html", "group":"", "keywords": ["viewpager","horizontal","paging","swipe view","tabs"], "tags": ["viewpager","horizontal","paging","swipeview","tabs"], "image":"", "lang":"en", "type":"training" }, { "title":"Providing Up Navigation", "titleFriendly":"", "summary":"All screens in your app that are not the main entrance to your app (the "home" screen) should offer the user a way to navigate to the logical parent screen in the app's hierarchy by pressing the Up button in the action bar . This lesson …", "url":"training/implementing-navigation/ancestral.html", "group":"", "keywords": ["up navigation","navutils","taskstackbuilder"], "tags": ["upnavigation","navutils","taskstackbuilder"], "image":"images/training/implementing-navigation-up.png", "lang":"en", "type":"training" }, { "title":"Updating Notifications", "titleFriendly":"", "summary":"When you need to issue a notification multiple times for the same type of event, you should avoid making a completely new notification. Instead, you should consider updating a previous notification, either by changing some of its values or by adding to…", "url":"training/notify-user/managing.html", "group":"", "keywords": ["notifications"], "tags": ["notifications"], "image":"", "lang":"en", "type":"training" }, { "title":"Notifying the User", "titleFriendly":"", "summary":"A notification is a user interface element that you display outside your app's normal UI to indicate that an event has occurred. Users can choose to view the notification while using other apps and respond to it when it's convenient for them. …", "url":"training/notify-user/index.html", "group":"", "keywords": ["notifications"], "tags": ["notifications"], "image":"", "lang":"en", "type":"training" }, { "title":"Using Big View Styles", "titleFriendly":"", "summary":"Notifications in the notification drawer appear in two main visual styles, normal view and big view. The big view of a notification only appears when the notification is expanded. This happens when the notification is at the top of the drawer, or the …", "url":"training/notify-user/expanded.html", "group":"", "keywords": ["notifications"], "tags": ["notifications"], "image":"images/training/notifications-normalview.png", "lang":"en", "type":"training" }, { "title":"Preserving Navigation when Starting an Activity", "titleFriendly":"", "summary":"Part of designing a notification is preserving the user's expected navigation experience. For a detailed discussion of this topic, see the Notifications API guide. There are two general situations: To set up a PendingIntent that starts a direct entry…", "url":"training/notify-user/navigation.html", "group":"", "keywords": ["notifications"], "tags": ["notifications"], "image":"", "lang":"en", "type":"training" }, { "title":"Building a Notification", "titleFriendly":"", "summary":"This lesson explains how to create and issue a notification. The examples in this class are based on the Builder class. Builder is in the Support Library . You should use NotificationCompat and its subclasses, particularly Builder, to provide the best…", "url":"training/notify-user/build-notification.html", "group":"", "keywords": ["notifications"], "tags": ["notifications"], "image":"", "lang":"en", "type":"training" }, { "title":"Displaying Progress in a Notification", "titleFriendly":"", "summary":"Notifications can include an animated progress indicator that shows users the status of an ongoing operation. If you can estimate how long the operation takes and how much of it is complete at any time, use the "determinate" form of the indicator…", "url":"training/notify-user/display-progress.html", "group":"", "keywords": ["notifications"], "tags": ["notifications"], "image":"images/ui/notifications/progress_bar_summary.png", "lang":"en", "type":"training" }, { "title":"Developing Accessible Applications", "titleFriendly":"", "summary":"Android has several accessibility-focused features baked into the platform, which make it easy to optimize your application for those with visual or physical disabilities. However, it's not always obvious what the correct optimizations are, or the…", "url":"training/accessibility/accessible-app.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Implementing Accessibility", "titleFriendly":"", "summary":"When it comes to reaching as wide a userbase as possible, it's important to pay attention to accessibility in your Android application. Cues in your user interface that may work for a majority of users, such as a visible change in state when a button…", "url":"training/accessibility/index.html", "group":"", "keywords": ["navigation","input"], "tags": ["navigation","input"], "image":"", "lang":"en", "type":"training" }, { "title":"Developing an Accessibility Service", "titleFriendly":"", "summary":"Accessibility services are a feature of the Android framework designed to provide alternative navigation feedback to the user on behalf of applications installed on Android devices. An accessibility service can communicate to the user on the application…", "url":"training/accessibility/service.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Receiving Files from Another Device", "titleFriendly":"", "summary":"Android Beam file transfer copies files to a special directory on the receiving device. It also scans the copied files using the Android Media Scanner and adds entries for media files to the MediaStore provider. This lesson shows you how to respond when…", "url":"training/beam-files/receive-files.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Sharing Files with NFC", "titleFriendly":"", "summary":"Android allows you to transfer large files between devices using the Android Beam file transfer feature. This feature has a simple API and allows users to start the transfer process by simply touching devices. In response, Android Beam file transfer automatically…", "url":"training/beam-files/index.html", "group":"", "keywords": ["nfcadapter","android beam","share","file transfer"], "tags": ["nfcadapter","androidbeam","share","filetransfer"], "image":"", "lang":"en", "type":"training" }, { "title":"Sending Files to Another Device", "titleFriendly":"", "summary":"This lesson shows you how to design your app to send large files to another device using Android Beam file transfer. To send files, you request permission to use NFC and external storage, test to ensure your device supports NFC, and provide URIs to Android…", "url":"training/beam-files/send-files.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Responding to UI Visibility Changes", "titleFriendly":"", "summary":"This lesson describes how to register a listener so that your app can get notified of system UI visibility changes. This is useful if you want to synchronize other parts of your UI with the hiding/showing of system bars. To get notified of system …", "url":"training/system-ui/visibility.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Hiding the Status Bar", "titleFriendly":"", "summary":"This lesson describes how to hide the status bar on different versions of Android. Hiding the status bar (and optionally, the navigation bar) lets the content use more of the display space, thereby providing a more immersive user experience. Figure 1 …", "url":"training/system-ui/status.html", "group":"", "keywords": [], "tags": [], "image":"images/training/status_bar_show.png", "lang":"en", "type":"training" }, { "title":"Managing the System UI", "titleFriendly":"", "summary":"System Bars DevBytes: Android 4.4 Immersive Mode The system bars are screen areas dedicated to the display of notifications, communication of device status, and device navigation. Typically the system bars (which consist of the status and navigation bars…", "url":"training/system-ui/index.html", "group":"", "keywords": [], "tags": [], "image":"images/training/system-ui.png", "lang":"en", "type":"training" }, { "title":"Hiding the Navigation Bar", "titleFriendly":"", "summary":"This lesson describes how to hide the navigation bar, which was introduced in Android 4.0 (API level 14). Even though this lesson focuses on hiding the navigation bar, you should design your app to hide the status bar at the same time, as described in…", "url":"training/system-ui/navigation.html", "group":"", "keywords": [], "tags": [], "image":"images/training/navigation-bar.png", "lang":"en", "type":"training" }, { "title":"Dimming the System Bars", "titleFriendly":"", "summary":"This lesson describes how to dim the system bars (that is, the status and the navigation bars) on Android 4.0 (API level 14) and higher. Android does not provide a built-in way to dim the system bars on earlier versions. When you use this approach, the…", "url":"training/system-ui/dim.html", "group":"", "keywords": [], "tags": [], "image":"images/training/low_profile_hide2x.png", "lang":"en", "type":"training" }, { "title":"Using Immersive Full-Screen Mode", "titleFriendly":"", "summary":"DevBytes: Android 4.4 Immersive Mode Android 4.4 (API Level 19) introduces a new SYSTEM_UI_FLAG_IMMERSIVE flag for setSystemUiVisibility() that lets your app go truly "full screen." This flag, when combined with the SYSTEM_UI_FLAG_HIDE_NAVIGATION…", "url":"training/system-ui/immersive.html", "group":"", "keywords": [], "tags": [], "image":"images/training/imm-states.png", "lang":"en", "type":"training" }, { "title":"Using Google Play to Distribute & Monetize", "titleFriendly":"", "summary":"These classes focus on the business aspects of your app strategy, including techniques for distributing your app on Google Play and techniques for building revenue.…", "url":"training/distribute.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Building Apps with Content Sharing", "titleFriendly":"", "summary":"These classes teach you how to create apps that share data between apps and devices.…", "url":"training/building-content-sharing.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Handling Input Method Visibility", "titleFriendly":"", "summary":"When input focus moves into or out of an editable text field, Android shows or hides the input method (such as the on-screen keyboard) as appropriate. The system also makes decisions about how your UI and the text field appear above the input method. …", "url":"training/keyboard-input/visibility.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Specifying the Input Method Type", "titleFriendly":"", "summary":"Every text field expects a certain type of text input, such as an email address, phone number, or just plain text. So it's important that you specify the input type for each text field in your app so the system displays the appropriate soft input …", "url":"training/keyboard-input/style.html", "group":"", "keywords": [], "tags": [], "image":"images/ui/edittext-phone.png", "lang":"en", "type":"training" }, { "title":"Handling Keyboard Input", "titleFriendly":"", "summary":"The Android system shows an on-screen keyboard—known as a soft input method —when a text field in your UI receives focus. To provide the best user experience, you can specify characteristics about the type of input you expect (such as whether it's…", "url":"training/keyboard-input/index.html", "group":"", "keywords": ["edittext","accessibility"], "tags": ["edittext","accessibility"], "image":"", "lang":"en", "type":"training" }, { "title":"Handling Keyboard Actions", "titleFriendly":"", "summary":"When the user gives focus to an editable text view such as an EditText element and the user has a hardware keyboard attached, all input is handled by the system. If, however, you'd like to intercept or directly handle the keyboard input yourself, …", "url":"training/keyboard-input/commands.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Supporting Keyboard Navigation", "titleFriendly":"", "summary":"In addition to soft input methods (such as on-screen keyboards), Android supports physical keyboards attached to the device. A keyboard offers not only a convenient mode for text input, but also offers a way for users to navigate and interact with your…", "url":"training/keyboard-input/navigation.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Retrieving Details for a Contact", "titleFriendly":"", "summary":"This lesson shows how to retrieve detail data for a contact, such as email addresses, phone numbers, and so forth. It's the details that users are looking for when they retrieve a contact. You can give them all the details for a contact, or only display…", "url":"training/contacts-provider/retrieve-details.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Retrieving a List of Contacts", "titleFriendly":"", "summary":"This lesson shows you how to retrieve a list of contacts whose data matches all or part of a search string, using the following techniques: To do any type of search of the Contacts Provider, your app must have READ_CONTACTS permission. To request this…", "url":"training/contacts-provider/retrieve-names.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Displaying the Quick Contact Badge", "titleFriendly":"", "summary":"This lesson shows you how to add a QuickContactBadge to your UI and how to bind data to it. A QuickContactBadge is a widget that initially appears as a thumbnail image. Although you can use any Bitmap for the thumbnail image, you usually use a Bitmap …", "url":"training/contacts-provider/display-contact-badge.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Accessing Contacts Data", "titleFriendly":"", "summary":"The Contacts Provider is the central repository of the user's contacts information, including data from contacts apps and social networking apps. In your apps, you can access Contacts Provider information directly by calling ContentResolver methods…", "url":"training/contacts-provider/index.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Modifying Contacts Using Intents", "titleFriendly":"", "summary":"This lesson shows you how to use an Intent to insert a new contact or modify a contact's data. Instead of accessing the Contacts Provider directly, an Intent starts the contacts app, which runs the appropriate Activity. For the modification actions…", "url":"training/contacts-provider/modify-data.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Printing Photos", "titleFriendly":"", "summary":"Taking and sharing photos is one of the most popular uses for mobile devices. If your application takes photos, displays them, or allows users to share images, you should consider enabling printing of those images in your application. The Android Support…", "url":"training/printing/photos.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Printing Content", "titleFriendly":"", "summary":"DevBytes: Android 4.4 Printing API Android users frequently view content solely on their devices, but there are times when showing someone a screen is not an adequate way to share information. Being able to print information from your Android application…", "url":"training/printing/index.html", "group":"", "keywords": ["print","navigation","gesturedetector","scroller"], "tags": ["print","navigation","gesturedetector","scroller"], "image":"", "lang":"en", "type":"training" }, { "title":"Printing Custom Documents", "titleFriendly":"", "summary":"For some applications, such as drawing apps, page layout apps and other apps that focus on graphic output, creating beautiful printed pages is a key feature. In this case, it is not enough to print an image or an HTML document. The print output for these…", "url":"training/printing/custom-docs.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Printing HTML Documents", "titleFriendly":"", "summary":"Printing out content beyond a simple photo on Android requires composing text and graphics in a print document. The Android framework provides a way to use HTML to compose a document and print it with a minimum of code. In Android 4.4 (API level 19), …", "url":"training/printing/html-docs.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Using Network Service Discovery", "titleFriendly":"", "summary":"Adding Network Service Discovery (NSD) to your app allows your users to identify other devices on the local network that support the services your app requests. This is useful for a variety of peer-to-peer applications such as file sharing or multi-player…", "url":"training/connect-devices-wirelessly/nsd.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Connecting Devices Wirelessly", "titleFriendly":"", "summary":"DevBytes: Network Service Discovery Besides enabling communication with the cloud, Android's wireless APIs also enable communication with other devices on the same local network, and even devices which are not on a network, but are physically nearby…", "url":"training/connect-devices-wirelessly/index.html", "group":"", "keywords": ["wifi","network","wireless"], "tags": ["wifi","network","wireless"], "image":"", "lang":"en", "type":"training" }, { "title":"Creating P2P Connections with Wi-Fi", "titleFriendly":"", "summary":"The Wi-Fi peer-to-peer (P2P) APIs allow applications to connect to nearby devices without needing to connect to a network or hotspot (Android's Wi-Fi P2P framework complies with the Wi-Fi Direct™ certification program). Wi-Fi P2P allows your application…", "url":"training/connect-devices-wirelessly/wifi-direct.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Using Wi-Fi P2P for Service Discovery", "titleFriendly":"", "summary":"The first lesson in this class, Using Network Service Discovery , showed you how to discover services that are connected to a local network. However, using Wi-Fi Peer-to-Peer (P2P) Service Discovery allows you to discover the services of nearby devices…", "url":"training/connect-devices-wirelessly/nsd-wifi-direct.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Providing Messaging for Auto", "titleFriendly":"", "summary":"DevBytes: Android Auto Messaging Staying connected through text messages is important to many drivers. Chat apps can let users know if a child need to be picked up, or if a dinner location has been changed. Apps that provide sports information might tell…", "url":"training/auto/messaging/index.html", "group":"", "keywords": ["auto","car","automotive","messaging"], "tags": ["auto","car","automotive","messaging"], "image":"", "lang":"en", "type":"training" }, { "title":"Building Apps for Auto", "titleFriendly":"", "summary":"Starting point for building apps for Auto, with guidelines, information, and examples.", "url":"training/auto/index.html", "group":"", "keywords": [], "tags": [], "image":"design/tv/images/focus.png", "lang":"en", "type":"training" }, { "title":"Getting Started with Auto", "titleFriendly":"", "summary":"Android Auto extends the Android platform into the car. When users connect their handheld devices running Android 5.0 or higher to a compatible vehicle, the Auto user interface provides a car-optimized Android experience on the vehicle's screen. Users…", "url":"training/auto/start/index.html", "group":"", "keywords": ["auto","car","automotive"], "tags": ["auto","car","automotive"], "image":"auto/images/assets/icons/auto_app_in_simulator.png", "lang":"en", "type":"training" }, { "title":"Providing Audio Playback for Auto", "titleFriendly":"", "summary":"Devbytes: Android Auto Audio Drivers want to access their music and other audio content on the road. Audio books, podcasts, sports commentary, and recorded talks can make a long trip educational, inspirational, and enjoyable. The Android framework allows…", "url":"training/auto/audio/index.html", "group":"", "keywords": ["auto","car","automotive","audio"], "tags": ["auto","car","automotive","audio"], "image":"", "lang":"en", "type":"training" }, { "title":"Dealing with Audio Output Hardware", "titleFriendly":"", "summary":"Users have a number of alternatives when it comes to enjoying the audio from their Android devices. Most devices have a built-in speaker, headphone jacks for wired headsets, and many also feature Bluetooth connectivity and support for A2DP audio. How …", "url":"training/managing-audio/audio-output.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Managing Audio Playback", "titleFriendly":"", "summary":"If your app plays audio, it’s important that your users can control the audio in a predictable manner. To ensure a great user experience, it’s also important that your app manages the audio focus to ensure multiple apps aren’t playing audio at the same…", "url":"training/managing-audio/index.html", "group":"", "keywords": ["audio","media"], "tags": ["audio","media"], "image":"", "lang":"en", "type":"training" }, { "title":"Controlling Your App’s Volume and Playback", "titleFriendly":"", "summary":"A good user experience is a predictable one. If your app plays media it’s important that your users can control the volume of your app using the hardware or software volume controls of their device, bluetooth headset, or headphones. Similarly, where appropriate…", "url":"training/managing-audio/volume-playback.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Managing Audio Focus", "titleFriendly":"", "summary":"With multiple apps potentially playing audio it's important to think about how they should interact. To avoid every music app playing at the same time, Android uses audio focus to moderate audio playback—only apps that hold the audio focus should …", "url":"training/managing-audio/audio-focus.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Getting Started", "titleFriendly":"", "summary":"Android Training provides a collection of classes that aim to help you build great apps for Android. Each class explains the steps required to solve a problem or implement a feature using code snippets and sample code for you to use in your apps.", "url":"training/index.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Zooming a View", "titleFriendly":"", "summary":"This lesson demonstrates how to do a touch-to-zoom animation, which is useful for apps such as photo galleries to animate a view from a thumbnail to a full-size image that fills the screen. Here's what a touch-to-zoom animation looks like that expands…", "url":"training/animation/zoom.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Animating Layout Changes", "titleFriendly":"", "summary":"A layout animation is a pre-loaded animation that the system runs each time you make a change to the layout configuration. All you need to do is set an attribute in the layout to tell the Android system to animate these layout changes, and system-default…", "url":"training/animation/layout.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Adding Animations", "titleFriendly":"", "summary":"Animations can add subtle visual cues that notify users about what's going on in your app and improve their mental model of your app's interface. Animations are especially useful when the screen changes state, such as when content loads or new…", "url":"training/animation/index.html", "group":"", "keywords": ["animator","views","layout","user interface"], "tags": ["animator","views","layout","userinterface"], "image":"", "lang":"en", "type":"training" }, { "title":"Displaying Card Flip Animations", "titleFriendly":"", "summary":"This lesson shows you how to do a card flip animation with custom fragment animations. Card flips animate between views of content by showing an animation that emulates a card flipping over. Here's what a card flip looks like: If you want to jump …", "url":"training/animation/cardflip.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Crossfading Two Views", "titleFriendly":"", "summary":"Crossfade animations (also know as dissolve) gradually fade out one UI component while simultaneously fading in another. This animation is useful for situations where you want to switch content or views in your app. Crossfades are very subtle and short…", "url":"training/animation/crossfade.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Using ViewPager for Screen Slides", "titleFriendly":"", "summary":"Screen slides are transitions between one entire screen to another and are common with UIs like setup wizards or slideshows. This lesson shows you how to do screen slides with a ViewPager provided by the support library . ViewPagers can animate screen…", "url":"training/animation/screen-slide.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Tracking Movement", "titleFriendly":"", "summary":"This lesson describes how to track movement in touch events. A new onTouchEvent() is triggered with an ACTION_MOVE event whenever the current touch contact position, pressure, or size changes. As described in Detecting Common Gestures , all of these events…", "url":"training/gestures/movement.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Using Touch Gestures", "titleFriendly":"", "summary":"This class describes how to write apps that allow users to interact with an app via touch gestures. Android provides a variety of APIs to help you create and detect gestures. Although your app should not depend on touch gestures for basic behaviors (since…", "url":"training/gestures/index.html", "group":"", "keywords": ["input","navigation","gesturedetector","scroller"], "tags": ["input","navigation","gesturedetector","scroller"], "image":"", "lang":"en", "type":"training" }, { "title":"Managing Touch Events in a ViewGroup", "titleFriendly":"", "summary":"Handling touch events in a ViewGroup takes special care, because it's common for a ViewGroup to have children that are targets for different touch events than the ViewGroup itself. To make sure that each view correctly receives the touch events intended…", "url":"training/gestures/viewgroup.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Animating a Scroll Gesture", "titleFriendly":"", "summary":"In Android, scrolling is typically achieved by using the ScrollView class. Any standard layout that might extend beyond the bounds of its container should be nested in a ScrollView to provide a scrollable view that's managed by the framework. Implementing…", "url":"training/gestures/scroll.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Dragging and Scaling", "titleFriendly":"", "summary":"This lesson describes how to use touch gestures to drag and scale on-screen objects, using onTouchEvent() to intercept touch events. A common operation for a touch gesture is to use it to drag an object across the screen. The following snippet lets the…", "url":"training/gestures/scale.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Detecting Common Gestures", "titleFriendly":"", "summary":"A "touch gesture" occurs when a user places one or more fingers on the touch screen, and your application interprets that pattern of touches as a particular gesture. There are correspondingly two phases to gesture detection: The examples in …", "url":"training/gestures/detector.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Handling Multi-Touch Gestures", "titleFriendly":"", "summary":"A multi-touch gesture is when multiple pointers (fingers) touch the screen at the same time. This lesson describes how to detect gestures that involve multiple pointers. When multiple pointers touch the screen at the same time, the system generates the…", "url":"training/gestures/multi.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Testing UI Components", "titleFriendly":"", "summary":"Typically, your Activity includes user interface components (such as buttons, editable text fields, checkboxes, and pickers) to allow users to interact with your Android application. This lesson shows how you can test an Activity with a simple push-button…", "url":"training/activity-testing/activity-ui-testing.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Setting Up Your Test Environment", "titleFriendly":"", "summary":"Before you start writing and running your tests, you should set up your test development environment. This lesson teaches you how to set up the Eclipse IDE to build and run tests, and how to build and run tests with the Gradle framework by using the command…", "url":"training/activity-testing/preparing-activity-testing.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Testing Your Android Activity", "titleFriendly":"", "summary":"You should be writing and running tests as part of your Android application development cycle. Well-written tests can help you to catch bugs early in development and give you confidence in your code. A test case defines a set of objects and methods to…", "url":"training/activity-testing/index.html", "group":"", "keywords": ["testing"], "tags": ["testing"], "image":"", "lang":"en", "type":"training" }, { "title":"Creating Unit Tests", "titleFriendly":"", "summary":"An Activity unit test is an excellent way to quickly verify the state of an Activity and its interactions with other components in isolation (that is, disconnected from the rest of the system). A unit test generally tests the smallest possible unit of…", "url":"training/activity-testing/activity-unit-testing.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Creating and Running a Test Case", "titleFriendly":"", "summary":"In order to verify that there are no regressions in the layout design and functional behavior in your application, it's important to create a test for each Activity in your application. For each test, you need to create the individual parts of a test…", "url":"training/activity-testing/activity-basic-testing.html", "group":"", "keywords": [], "tags": [], "image":"images/training/activity-testing_lesson2_MyFirstTestActivityTest_result.png", "lang":"en", "type":"training" }, { "title":"Creating Functional Tests", "titleFriendly":"", "summary":"Functional testing involves verifying that individual application components work together as expected by the user. For example, you can create a functional test to verify that an Activity correctly launches a target Activity when the user performs a …", "url":"training/activity-testing/activity-functional-testing.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Detecting Location on Android Wear", "titleFriendly":"", "summary":"Location awareness on wearable devices enables you to create apps that give users a better understanding of their geographic position, movement and what's around them. With the small form factor and glanceable nature of a wearable device, you can …", "url":"training/articles/wear-location-detection.html", "group":"", "keywords": ["gps"], "tags": ["gps"], "image":"", "lang":"en", "type":"training" }, { "title":"SMP Primer for Android", "titleFriendly":"", "summary":"Android 3.0 and later platform versions are optimized to support multiprocessor architectures. This document introduces issues that can arise when writing code for symmetric multiprocessor systems in C, C++, and the Java programming language (hereafter…", "url":"training/articles/smp.html", "group":"", "keywords": ["ndk","native"], "tags": ["ndk","native"], "image":"", "lang":"en", "type":"training" }, { "title":"Android Keystore System", "titleFriendly":"", "summary":"The Android Keystore system lets you store private keys in a container to make it more difficult to extract from the device. Once keys are in the keystore, they can be used for cryptographic operations with the private key material remaining non-exportable…", "url":"training/articles/keystore.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Performance Tips", "titleFriendly":"", "summary":"This document primarily covers micro-optimizations that can improve overall app performance when combined, but it's unlikely that these changes will result in dramatic performance effects. Choosing the right algorithms and data structures should always…", "url":"training/articles/perf-tips.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Updating Your Security Provider to Protect Against SSL Exploits", "titleFriendly":"", "summary":"Android relies on a security Provider to provide secure network communications. However, from time to time, vulnerabilities are found in the default security provider. To protect against these vulnerabilities, Google Play services provides a way to automatically…", "url":"training/articles/security-gms-provider.html", "group":"", "keywords": ["network","certificates"], "tags": ["network","certificates"], "image":"", "lang":"en", "type":"training" }, { "title":"Managing Your App's Memory", "titleFriendly":"", "summary":"Random-access memory (RAM) is a valuable resource in any software development environment, but it's even more valuable on a mobile operating system where physical memory is often constrained. Although Android's Dalvik virtual machine performs …", "url":"training/articles/memory.html", "group":"", "keywords": ["ram","low memory","outofmemoryerror","ontrimmemory"], "tags": ["ram","lowmemory","outofmemoryerror","ontrimmemory"], "image":"", "lang":"en", "type":"training" }, { "title":"Security Tips", "titleFriendly":"", "summary":"Android has security features built into the operating system that significantly reduce the frequency and impact of application security issues. The system is designed so you can typically build your apps with default system and file permissions and avoid…", "url":"training/articles/security-tips.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Security with HTTPS and SSL", "titleFriendly":"", "summary":"The Secure Sockets Layer (SSL)—now technically known as Transport Layer Security (TLS) —is a common building block for encrypted communications between clients and servers. It's possible that an application might use SSL incorrectly such that malicious…", "url":"training/articles/security-ssl.html", "group":"", "keywords": ["network","certificates"], "tags": ["network","certificates"], "image":"", "lang":"en", "type":"training" }, { "title":"Keeping Your App Responsive", "titleFriendly":"", "summary":"It's possible to write code that wins every performance test in the world, but still feels sluggish, hang or freeze for significant periods, or take too long to process input. The worst thing that can happen to your app's responsiveness is an …", "url":"training/articles/perf-anr.html", "group":"", "keywords": ["threads","asynctask"], "tags": ["threads","asynctask"], "image":"images/anr.png", "lang":"en", "type":"training" }, { "title":"JNI Tips", "titleFriendly":"", "summary":"JNI is the Java Native Interface. It defines a way for managed code (written in the Java programming language) to interact with native code (written in C/C++). It's vendor-neutral, has support for loading code from dynamic shared libraries, and…", "url":"training/articles/perf-jni.html", "group":"", "keywords": ["ndk","native"], "tags": ["ndk","native"], "image":"", "lang":"en", "type":"training" }, { "title":"Sending and Syncing Data", "titleFriendly":"", "summary":"The Wearable Data Layer API, which is part of Google Play services, provides a communication channel for your handheld and wearable apps. The API consists of a set of data objects that the system can send and synchronize over the wire and listeners that…", "url":"training/wearables/data-layer/index.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Accessing the Wearable Data Layer", "titleFriendly":"", "summary":"To call the Data Layer API, create an instance of GoogleApiClient , the main entry point for any of the Google Play services APIs. GoogleApiClient provides a builder that makes it easy to create an instance of the client. A minimal GoogleApiClient looks…", "url":"training/wearables/data-layer/accessing.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Sending and Receiving Messages", "titleFriendly":"", "summary":"You send messages using the MessageApi and attach the following items to the message: Unlike with data items, there is no syncing between the handheld and wearable apps. Messages are a one-way communication mechanism that's good for remote procedure…", "url":"training/wearables/data-layer/messages.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Syncing Data Items", "titleFriendly":"", "summary":"A DataItem defines the data interface that the system uses to synchronize data between handhelds and wearables. A DataItem generally consists of the following items: You normally don't implement DataItem directly. Instead, you: However, instead of…", "url":"training/wearables/data-layer/data-items.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Handling Data Layer Events", "titleFriendly":"", "summary":"When you make calls to the Data Layer API, you can receive the status of the call when it completes as well as listen for any changes that the call ends up making with listeners. You'll notice that calls to the Data Layer API sometimes return a PendingResult…", "url":"training/wearables/data-layer/events.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Transferring Assets", "titleFriendly":"", "summary":"To send large blobs of binary data over the Bluetooth transport, such as images, attach an Asset to a data item and the put the data item into the replicated data store. Assets automatically handle caching of data to prevent retransmission and conserve…", "url":"training/wearables/data-layer/assets.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Adding Voice Capabilities", "titleFriendly":"", "summary":"Voice actions are an important part of the wearable experience. They let users carry out actions hands-free and quickly. Wear provides two types of voice actions: The Android Wear platform provides several voice intents that are based on user actions …", "url":"training/wearables/apps/voice.html", "group":"", "keywords": ["wear"], "tags": ["wear"], "image":"", "lang":"en", "type":"training" }, { "title":"Creating and Running a Wearable App", "titleFriendly":"", "summary":"Wearable apps run directly on the wearable device, giving you access to low-level hardware such as sensors, activities, services, and more, right on the wearable. A companion handheld app that contains the wearable app is also required when you want to…", "url":"training/wearables/apps/creating.html", "group":"", "keywords": ["wear"], "tags": ["wear"], "image":"", "lang":"en", "type":"training" }, { "title":"Creating Wearable Apps", "titleFriendly":"", "summary":"Wearable apps run directly on the device, giving you access to hardware such as sensors and the GPU. They are fundamentally the same as apps built for other devices using the Android SDK, but differ greatly in design and usability and the amount of functionality…", "url":"training/wearables/apps/index.html", "group":"", "keywords": ["wear"], "tags": ["wear"], "image":"wear/images/01_create.png", "lang":"en", "type":"training" }, { "title":"Packaging Wearable Apps", "titleFriendly":"", "summary":"When publishing to users, you must package a wearable app inside of a handheld app, because users cannot browse and install apps directly on the wearable. If packaged properly, when users download the handheld app, the system automatically pushes the …", "url":"training/wearables/apps/packaging.html", "group":"", "keywords": ["wear"], "tags": ["wear"], "image":"", "lang":"en", "type":"training" }, { "title":"Creating Custom Layouts", "titleFriendly":"", "summary":"Creating layouts for wearables is the same as handheld devices, except you have to design for the screen size and for glanceability. Do not port functionality and the UI from a handheld app and expect a good experience. You should create custom layouts…", "url":"training/wearables/apps/layouts.html", "group":"", "keywords": ["wear"], "tags": ["wear"], "image":"", "lang":"en", "type":"training" }, { "title":"Debugging over Bluetooth", "titleFriendly":"", "summary":"You can debug your wearable over Bluetooth by routing its debug output to the handheld device that's connected to your development machine. In the Android Wear companion app, you should see the status change to: If there are no other devices connected…", "url":"training/wearables/apps/bt-debugging.html", "group":"", "keywords": ["wear"], "tags": ["wear"], "image":"", "lang":"en", "type":"training" }, { "title":"Addressing Common Issues", "titleFriendly":"", "summary":"Creating a custom watch face for Android Wear is substantially different from creating notifications and wearable-specific activities. This class shows you how to resolve some issues that you may encounter as you implement your first few watch faces. …", "url":"training/wearables/watch-faces/issues.html", "group":"", "keywords": [], "tags": [], "image":"training/wearables/watch-faces/images/AnalogNoCard.png", "lang":"en", "type":"training" }, { "title":"Creating Watch Faces", "titleFriendly":"", "summary":"Watch Faces Watch faces in Android Wear leverage a dynamic digital canvas to tell time using colors, animations, and relevant contextual information. The Android Wear companion app provides watch faces with different styles and shapes. When users select…", "url":"training/wearables/watch-faces/index.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Building a Watch Face Service", "titleFriendly":"", "summary":"Watch faces in Android Wear are implemented as services and packaged inside a wearable app . When users install a handheld app that contains a wearable app with watch faces, these watch faces become available in the Android Wear companion app on the handheld…", "url":"training/wearables/watch-faces/service.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Providing Configuration Activities", "titleFriendly":"", "summary":"When users install a handheld app that contains a wearable app with watch faces, these watch faces become available in the Android Wear companion app on the companion device and in the watch face picker on the wearable. Users can choose the active watch…", "url":"training/wearables/watch-faces/configuration.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Drawing Watch Faces", "titleFriendly":"", "summary":"After you have configured your project and added a class that implements the watch face service, you can start writing code to initialize and draw your custom watch face. This lesson explains how the system invokes the methods in the watch face service…", "url":"training/wearables/watch-faces/drawing.html", "group":"", "keywords": [], "tags": [], "image":"training/wearables/watch-faces/images/preview_analog.png", "lang":"en", "type":"training" }, { "title":"Optimizing Performance and Battery Life", "titleFriendly":"", "summary":"In addition to accommodating notification cards and system indicators, you need to ensure that the animations in your watch face run smoothly and that your service does not perform unnecessary computations. Watch faces in Android Wear run continuously…", "url":"training/wearables/watch-faces/performance.html", "group":"", "keywords": [], "tags": [], "image":"training/wearables/watch-faces/images/ClockHandFull.png", "lang":"en", "type":"training" }, { "title":"Showing Information in Watch Faces", "titleFriendly":"", "summary":"In addition to telling time, Android Wear devices provide users with contextually relevant information in the form of cards, notifications, and other wearable apps. Creating a custom watch face not only gives you the opportunity to tell time in visually…", "url":"training/wearables/watch-faces/information.html", "group":"", "keywords": [], "tags": [], "image":"training/wearables/watch-faces/images/Render_Saturn.png", "lang":"en", "type":"training" }, { "title":"Designing Watch Faces", "titleFriendly":"", "summary":"Watch Faces Similar to the process of designing a traditional watch face, creating one for Android Wear is an exercise in visualizing time clearly. Android Wear devices provide advanced capabilities for watch faces that you can leverage in your designs…", "url":"training/wearables/watch-faces/designing.html", "group":"", "keywords": [], "tags": [], "image":"training/wearables/watch-faces/images/Render_Next.png", "lang":"en", "type":"training" }, { "title":"Creating Cards", "titleFriendly":"", "summary":"Cards present information to users with a consistent look and feel across different apps. This lesson shows you how to create cards in your Android Wear apps. The Wearable UI Library provides implementations of cards specifically designed for wearable…", "url":"training/wearables/ui/cards.html", "group":"", "keywords": [], "tags": [], "image":"wear/images/05_uilib.png", "lang":"en", "type":"training" }, { "title":"Creating a 2D Picker", "titleFriendly":"", "summary":"The 2D Picker pattern in Android Wear allows users to navigate and choose from a set of items shown as pages. The Wearable UI Library lets you easily implement this pattern using a page grid, which is a layout manager that allows users to scroll vertically…", "url":"training/wearables/ui/2d-picker.html", "group":"", "keywords": [], "tags": [], "image":"wear/images/07_uilib.png", "lang":"en", "type":"training" }, { "title":"Exiting Full-Screen Activities", "titleFriendly":"", "summary":"By default, users exit Android Wear activities by swiping from left to right. If the app contains horizontally scrollable content, users first have to navigate to the edge of the content and then swipe again from left to right to exit the app. For more…", "url":"training/wearables/ui/exit.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Creating Custom UIs for Wear Devices", "titleFriendly":"", "summary":"User interfaces for wearable apps differ significantly from those built for handheld devices. Apps for wearables should follow the Android Wear design principles and implement the recommended UI patterns , which ensure a consistent user experience across…", "url":"training/wearables/ui/index.html", "group":"", "keywords": [], "tags": [], "image":"wear/images/10_uilib.png", "lang":"en", "type":"training" }, { "title":"Showing Confirmations", "titleFriendly":"", "summary":"Confirmations in Android Wear apps use the whole screen or a larger portion of it than those in handheld apps. This ensures that users can see these confirmations by just glancing at the screen and that they have large enough touch targets to cancel an…", "url":"training/wearables/ui/confirm.html", "group":"", "keywords": [], "tags": [], "image":"wear/images/09_uilib.png", "lang":"en", "type":"training" }, { "title":"Defining Layouts", "titleFriendly":"", "summary":"Wearables use the same layout techniques as handheld Android devices, but need to be designed with specific constraints. Do not port functionality and the UI from a handheld app and expect a good experience. For more information on how to design great…", "url":"training/wearables/ui/layouts.html", "group":"", "keywords": [], "tags": [], "image":"wear/images/01_uilib.png", "lang":"en", "type":"training" }, { "title":"Creating Lists", "titleFriendly":"", "summary":"Lists let users select an item from a set of choices easily on wearable devices. This lesson shows you how to create lists in your Android Wear apps. The Wearable UI Library includes the WearableListView class, which is a list implementation optimized…", "url":"training/wearables/ui/lists.html", "group":"", "keywords": [], "tags": [], "image":"wear/images/06_uilib.png", "lang":"en", "type":"training" }, { "title":"Receiving Voice Input in a Notification", "titleFriendly":"", "summary":"If you have handheld notifications that include an action to input text, such as reply to an email, it should normally launch an activity on the handheld device to input the text. However, when your notification appears on a wearable, there is no keyboard…", "url":"training/wearables/notifications/voice-input.html", "group":"", "keywords": ["notifications"], "tags": ["notifications"], "image":"wear/images/13_voicereply.png", "lang":"en", "type":"training" }, { "title":"Adding Pages to a Notification", "titleFriendly":"", "summary":"When you'd like to provide more information without requiring users to open your app on their handheld device, you can add one or more pages to the notification on the wearable. The additional pages appear immediately to the right of the main notification…", "url":"training/wearables/notifications/pages.html", "group":"", "keywords": ["notifications"], "tags": ["notifications"], "image":"wear/images/09_pages.png", "lang":"en", "type":"training" }, { "title":"Creating a Notification for Wearables", "titleFriendly":"", "summary":"To build handheld notifications that are also sent to wearables, use Builder. When you build notifications with this class, the system takes care of displaying notifications properly, whether they appear on a handheld or wearable. To import the necessary…", "url":"training/wearables/notifications/creating.html", "group":"", "keywords": ["notifications"], "tags": ["notifications"], "image":"wear/images/circle_email_action.png", "lang":"en", "type":"training" }, { "title":"Adding Wearable Features to Notifications", "titleFriendly":"", "summary":"When an Android handheld (phone or tablet) and Android wearable are connected, the handheld automatically shares notifications with the wearable. On the wearable, each notification appears as a new card in the context stream . However, to give users the…", "url":"training/wearables/notifications/index.html", "group":"", "keywords": ["notifications","wear"], "tags": ["notifications","wear"], "image":"wear/images/01_notifications.png", "lang":"en", "type":"training" }, { "title":"Stacking Notifications", "titleFriendly":"", "summary":"When creating notifications for a handheld device, you should always aggregate similar notifications into a single summary notification. For example, if your app creates notifications for received messages, you should not show more than one notification…", "url":"training/wearables/notifications/stacks.html", "group":"", "keywords": ["notifications"], "tags": ["notifications"], "image":"wear/images/11_bundles_B.png", "lang":"en", "type":"training" }, { "title":"Determining and Monitoring the Docking State and Type", "titleFriendly":"", "summary":"Android devices can be docked into several different kinds of docks. These include car or home docks and digital versus analog docks. The dock-state is typically closely linked to the charging state as many docks provide power to docked devices. How the…", "url":"training/monitoring-device-state/docking-monitoring.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Optimizing Battery Life", "titleFriendly":"", "summary":"For your app to be a good citizen, it should seek to limit its impact on the battery life of its host device. After this class you will be able to build apps that monitor modify their functionality and behavior based on the state of the host device. By…", "url":"training/monitoring-device-state/index.html", "group":"", "keywords": ["network","internet"], "tags": ["network","internet"], "image":"", "lang":"en", "type":"training" }, { "title":"Manipulating Broadcast Receivers On Demand", "titleFriendly":"", "summary":"The simplest way to monitor device state changes is to create a BroadcastReceiver for each state you're monitoring and register each of them in your application manifest. Then within each of these receivers you simply reschedule your recurring alarms…", "url":"training/monitoring-device-state/manifest-receivers.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Determining and Monitoring the Connectivity Status", "titleFriendly":"", "summary":"Some of the most common uses for repeating alarms and background services is to schedule regular updates of application data from Internet resources, cache data, or execute long running downloads. But if you aren't connected to the Internet, or the…", "url":"training/monitoring-device-state/connectivity-monitoring.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Monitoring the Battery Level and Charging State", "titleFriendly":"", "summary":"When you're altering the frequency of your background updates to reduce the effect of those updates on battery life, checking the current battery level and charging state is a good place to start. The battery-life impact of performing application …", "url":"training/monitoring-device-state/battery-monitoring.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Best Practices for Security & Privacy", "titleFriendly":"", "summary":"These classes and articles provide information about how to keep your app's data secure.…", "url":"training/best-security.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Redundant Downloads are Redundant", "titleFriendly":"", "summary":"The most fundamental way to reduce your downloads is to download only what you need. In terms of data, that means implementing REST APIs that allow you to specify query criteria that limit the returned data by using parameters such as the time of your…", "url":"training/efficient-downloads/redundant_redundant.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Transferring Data Without Draining the Battery", "titleFriendly":"", "summary":"In this class you will learn to minimize the battery life impact of downloads and network connections, particularly in relation to the wireless radio.This class demonstrates the best practices for scheduling and executing downloads using techniques such…", "url":"training/efficient-downloads/index.html", "group":"", "keywords": ["battery","network","wireless"], "tags": ["battery","network","wireless"], "image":"", "lang":"en", "type":"training" }, { "title":"Modifying your Download Patterns Based on the Connectivity Type", "titleFriendly":"", "summary":"When it comes to impact on battery life, not all connection types are created equal. Not only does the Wi-Fi radio use significantly less battery than its wireless radio counterparts, but the radios used in different wireless radio technologies have different…", "url":"training/efficient-downloads/connectivity_patterns.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Minimizing the Effect of Regular Updates", "titleFriendly":"", "summary":"The optimal frequency of regular updates will vary based on device state, network connectivity, user behavior, and explicit user preferences. Optimizing Battery Life discusses how to build battery-efficient apps that modify their refresh frequency based…", "url":"training/efficient-downloads/regular_updates.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Optimizing Downloads for Efficient Network Access", "titleFriendly":"", "summary":"Using the wireless radio to transfer data is potentially one of your app's most significant sources of battery drain. To minimize the battery drain associated with network activity, it's critical that you understand how your connectivity model…", "url":"training/efficient-downloads/efficient-network-access.html", "group":"", "keywords": [], "tags": [], "image":"images/efficient-downloads/mobile_radio_state_machine.png", "lang":"en", "type":"training" }, { "title":"Creating a Sync Adapter", "titleFriendly":"", "summary":"The sync adapter component in your app encapsulates the code for the tasks that transfer data between the device and a server. Based on the scheduling and triggers you provide in your app, the sync adapter framework runs the code in the sync adapter component…", "url":"training/sync-adapters/creating-sync-adapter.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Creating a Stub Authenticator", "titleFriendly":"", "summary":"The sync adapter framework assumes that your sync adapter transfers data between device storage associated with an account and server storage that requires login access. For this reason, the framework expects you to provide a component called an authenticator…", "url":"training/sync-adapters/creating-authenticator.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Transferring Data Using Sync Adapters", "titleFriendly":"", "summary":"Synchronizing data between an Android device and web servers can make your application significantly more useful and compelling for your users. For example, transferring data to a web server makes a useful backup, and transferring data from a server makes…", "url":"training/sync-adapters/index.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Creating a Stub Content Provider", "titleFriendly":"", "summary":"The sync adapter framework is designed to work with device data managed by the flexible and highly secure content provider framework. For this reason, the sync adapter framework expects that an app that uses the framework has already defined a content…", "url":"training/sync-adapters/creating-stub-provider.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Running a Sync Adapter", "titleFriendly":"", "summary":"In the previous lessons in this class, you learned how to create a sync adapter component that encapsulates data transfer code, and how to add the additional components that allow you to plug the sync adapter into the system. You now have everything you…", "url":"training/sync-adapters/running-sync-adapter.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Making the View Interactive", "titleFriendly":"", "summary":"Drawing a UI is only one part of creating a custom view. You also need to make your view respond to user input in a way that closely resembles the real-world action you're mimicking. Objects should always act in the same way that real objects do. …", "url":"training/custom-views/making-interactive.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Creating a View Class", "titleFriendly":"", "summary":"A well-designed custom view is much like any other well-designed class. It encapsulates a specific set of functionality with an easy to use interface, it uses CPU and memory efficiently, and so forth. In addition to being a well-designed class, though…", "url":"training/custom-views/create-view.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Creating Custom Views", "titleFriendly":"", "summary":"The Android framework has a large set of View classes for interacting with the user and displaying various types of data. But sometimes your app has unique needs that aren’t covered by the built-in views. This class shows you how to create your own views…", "url":"training/custom-views/index.html", "group":"", "keywords": ["widgets","ui","layout"], "tags": ["widgets","ui","layout"], "image":"", "lang":"en", "type":"training" }, { "title":"Optimizing the View", "titleFriendly":"", "summary":"Now that you have a well-designed view that responds to gestures and transitions between states, you need to ensure that the view runs fast. To avoid a UI that feels sluggish or stutters during playback, you must ensure that your animations consistently…", "url":"training/custom-views/optimizing-view.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Custom Drawing", "titleFriendly":"", "summary":"The most important part of a custom view is its appearance. Custom drawing can be easy or complex according to your application's needs. This lesson covers some of the most common operations. The most important step in drawing a custom view is to …", "url":"training/custom-views/custom-drawing.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Applying Projection and Camera Views", "titleFriendly":"", "summary":"In the OpenGL ES environment, projection and camera views allow you to display drawn objects in a way that more closely resembles how you see physical objects with your eyes. This simulation of physical viewing is done with mathematical transformations…", "url":"training/graphics/opengl/projection.html", "group":"", "keywords": [], "tags": [], "image":"images/opengl/ogl-triangle-projected.png", "lang":"en", "type":"training" }, { "title":"Adding Motion", "titleFriendly":"", "summary":"Drawing objects on screen is a pretty basic feature of OpenGL, but you can do this with other Android graphics framwork classes, including Canvas and Drawable objects. OpenGL ES provides additional capabilities for moving and transforming drawn objects…", "url":"training/graphics/opengl/motion.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Displaying Graphics with OpenGL ES", "titleFriendly":"", "summary":"The Android framework provides plenty of standard tools for creating attractive, functional graphical user interfaces. However, if you want more control of what your application draws on screen, or are venturing into three dimensional graphics, you need…", "url":"training/graphics/opengl/index.html", "group":"", "keywords": ["open gl","graphics"], "tags": ["opengl","graphics"], "image":"", "lang":"en", "type":"training" }, { "title":"Responding to Touch Events", "titleFriendly":"", "summary":"Making objects move according to a preset program like the rotating triangle is useful for getting some attention, but what if you want to have users interact with your OpenGL ES graphics? The key to making your OpenGL ES application touch interactive…", "url":"training/graphics/opengl/touch.html", "group":"", "keywords": [], "tags": [], "image":"images/opengl/ogl-triangle-touch.png", "lang":"en", "type":"training" }, { "title":"Defining Shapes", "titleFriendly":"", "summary":"Being able to define shapes to be drawn in the context of an OpenGL ES view is the first step in creating your high-end graphics masterpiece. Drawing with OpenGL ES can be a little tricky without knowing a few basic things about how OpenGL ES expects …", "url":"training/graphics/opengl/shapes.html", "group":"", "keywords": [], "tags": [], "image":"images/opengl/ccw-square.png", "lang":"en", "type":"training" }, { "title":"Drawing Shapes", "titleFriendly":"", "summary":"After you define shapes to be drawn with OpenGL, you probably want to draw them. Drawing shapes with the OpenGL ES 2.0 takes a bit more code than you might imagine, because the API provides a great deal of control over the graphics rendering pipeline.…", "url":"training/graphics/opengl/draw.html", "group":"", "keywords": [], "tags": [], "image":"images/opengl/ogl-triangle.png", "lang":"en", "type":"training" }, { "title":"Building an OpenGL ES Environment", "titleFriendly":"", "summary":"In order to draw graphics with OpenGL ES in your Android application, you must create a view container for them. One of the more straight-forward ways to do this is to implement both a GLSurfaceView and a Renderer. A GLSurfaceView is a view container …", "url":"training/graphics/opengl/environment.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Resolving Cloud Save Conflicts", "titleFriendly":"", "summary":"This article describes how to design a robust conflict resolution strategy for apps that save data to the cloud using the Cloud Save service . The Cloud Save service allows you to store application data for each user of an application on Google's …", "url":"training/cloudsave/conflict-res.html", "group":"", "keywords": ["cloud"], "tags": ["cloud"], "image":"", "lang":"en", "type":"training" }, { "title":"Creating Backward-Compatible UIs", "titleFriendly":"", "summary":"This class demonstrates how to use UI components and APIs available in newer versions of Android in a backward-compatible way, ensuring that your application still runs on previous versions of the platform. Throughout this class, the new Action Bar Tabs…", "url":"training/backward-compatible-ui/index.html", "group":"", "keywords": ["widgets","support"], "tags": ["widgets","support"], "image":"", "lang":"en", "type":"training" }, { "title":"Using the Version-Aware Component", "titleFriendly":"", "summary":"Now that you have two implementations of TabHelper and CompatTab —one for Android 3.0 and later and one for earlier versions of the platform—it's time to do something with these implementations. This lesson discusses creating the logic for switching…", "url":"training/backward-compatible-ui/using-component.html", "group":"", "keywords": [], "tags": [], "image":"images/training/backward-compatible-ui-gb.png", "lang":"en", "type":"training" }, { "title":"Abstracting the New APIs", "titleFriendly":"", "summary":"Suppose you want to use action bar tabs as the primary form of top-level navigation in your application. Unfortunately, the ActionBar APIs are only available in Android 3.0 or later (API level 11+). Thus, if you want to distribute your application to …", "url":"training/backward-compatible-ui/abstracting.html", "group":"", "keywords": [], "tags": [], "image":"images/training/backward-compatible-ui-classes.png", "lang":"en", "type":"training" }, { "title":"Creating an Implementation with Older APIs", "titleFriendly":"", "summary":"This lesson discusses how to create an implementation that mirrors newer APIs yet supports older devices. The most challenging task in using newer UI features in a backward-compatible way is deciding on and implementing an older (fallback) solution for…", "url":"training/backward-compatible-ui/older-implementation.html", "group":"", "keywords": [], "tags": [], "image":"images/training/backward-compatible-ui-classes-eclair.png", "lang":"en", "type":"training" }, { "title":"Proxying to the New APIs", "titleFriendly":"", "summary":"This lesson shows you how to subclass the CompatTab and TabHelper abstract classes and use new APIs. Your application can use this implementation on devices running a platform version that supports them. The concrete classes for CompatTab and TabHelper…", "url":"training/backward-compatible-ui/new-implementation.html", "group":"", "keywords": [], "tags": [], "image":"images/training/backward-compatible-ui-classes-honeycomb.png", "lang":"en", "type":"training" }, { "title":"Best Practices for User Interface", "titleFriendly":"", "summary":"These classes teach you how to build a user interface using Android layouts for all types of devices. Android provides a flexible framework for UI design that allows your app to display different layouts for different devices, create custom UI widgets…", "url":"training/best-ui.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Best Practices for Testing", "titleFriendly":"", "summary":"These classes and articles provide information about how to test your Android application.…", "url":"training/testing.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Specifying the Code to Run on a Thread", "titleFriendly":"", "summary":"This lesson shows you how to implement a Runnable class, which runs the code in its run() method on a separate thread. You can also pass a Runnable to another object that can then attach it to a thread and run it. One or more Runnable objects that perform…", "url":"training/multiple-threads/define-runnable.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Creating a Manager for Multiple Threads", "titleFriendly":"", "summary":"The previous lesson showed how to define a task that executes on a separate thread. If you only want to run the task once, this may be all you need. If you want to run a task repeatedly on different sets of data, but you only need one execution running…", "url":"training/multiple-threads/create-threadpool.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Sending Operations to Multiple Threads", "titleFriendly":"", "summary":"The speed and efficiency of a long-running, data-intensive operation often improves when you split it into smaller operations running on multiple threads. On a device that has a CPU with multiple processors (cores), the system can run the threads in parallel…", "url":"training/multiple-threads/index.html", "group":"", "keywords": ["threadpool","runnable"], "tags": ["threadpool","runnable"], "image":"", "lang":"en", "type":"training" }, { "title":"Running Code on a Thread Pool Thread", "titleFriendly":"", "summary":"The previous lesson showed you how to define a class that manages thread pools and the tasks that run on them. This lesson shows you how to run a task on a thread pool. To do this, you add the task to the pool's work queue. When a thread becomes available…", "url":"training/multiple-threads/run-code.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Communicating with the UI Thread", "titleFriendly":"", "summary":"In the previous lesson you learned how to start a task on a thread managed by ThreadPoolExecutor. This final lesson shows you how to send data from the task to objects running on the user interface (UI) thread. This feature allows your tasks to do background…", "url":"training/multiple-threads/communicate-ui.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Building Apps with Connectivity & the Cloud", "titleFriendly":"", "summary":"These classes teach you how to connect your app to the world beyond the user's device. You'll learn how to connect to other devices in the area, connect to the Internet, backup and sync your app's data, and more.…", "url":"training/building-connectivity.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Building Apps with User Info & Location", "titleFriendly":"", "summary":"These classes teach you how to add user personalization to your app. Some of the ways you can do this is by identifying users, providing information that's relevant to them, and providing information about the world around them.…", "url":"training/building-userinfo.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Preparing Your In-app Billing Application", "titleFriendly":"", "summary":"Before you can start using the In-app Billing service, you'll need to add the library that contains the In-app Billing Version 3 API to your Android project. You also need to set the permissions for your application to communicate with Google Play…", "url":"training/in-app-billing/preparing-iab-app.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Purchasing In-app Billing Products", "titleFriendly":"", "summary":"Once your application is connected to Google Play, you can initiate purchase requests for in-app products. Google Play provides a checkout interface for users to enter their payment method, so your application does not need to handle payment transactions…", "url":"training/in-app-billing/purchase-iab-products.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Selling In-app Products", "titleFriendly":"", "summary":"In this class, you'll learn how to perform common In-app Billing operations from Android applications. In-app billing is a service hosted on Google Play that lets you charge for digital content or for upgrades in your app. The In-app Billing API makes…", "url":"training/in-app-billing/index.html", "group":"", "keywords": ["billing"], "tags": ["billing"], "image":"", "lang":"en", "type":"training" }, { "title":"Testing Your In-app Billing Application", "titleFriendly":"", "summary":"To ensure that In-app Billing is functioning correctly in your application, you should test the test the application before you publish it on Google Play. Early testing also helps to ensure that the user flow for purchasing in-app items is not confusing…", "url":"training/in-app-billing/test-iab-app.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Establishing In-app Billing Products for Sale", "titleFriendly":"", "summary":"Before publishing your In-app Billing application, you'll need to define the product list of digital goods available for purchase in the Google Play Developer Console . From the Developer Console, you can define product information for in-app products…", "url":"training/in-app-billing/list-iab-products.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Caching Bitmaps", "titleFriendly":"", "summary":"Loading a single bitmap into your user interface (UI) is straightforward, however things get more complicated if you need to load a larger set of images at once. In many cases (such as with components like ListView, GridView or LruCache class (also available…", "url":"training/displaying-bitmaps/cache-bitmap.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Processing Bitmaps Off the UI Thread", "titleFriendly":"", "summary":"The AsyncTask and shows you how to handle concurrency issues. The AsyncTask class provides an easy way to execute some work in a background thread and publish the results back on the UI thread. To use it, create a subclass and override the provided methods…", "url":"training/displaying-bitmaps/process-bitmap.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Displaying Bitmaps in Your UI", "titleFriendly":"", "summary":"This lesson brings together everything from previous lessons, showing you how to load multiple bitmaps into ViewPager and GridView components using a background thread and bitmap cache, while dealing with concurrency and configuration changes. The swipe…", "url":"training/displaying-bitmaps/display-bitmap.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Displaying Bitmaps Efficiently", "titleFriendly":"", "summary":"DevBytes: Bitmap Allocation DevBytes: Making Apps Beautiful - Part 4 - Performance Tuning Learn how to use common techniques to process and load Bitmap objects in a way that keeps your user interface (UI) components responsive and avoids exceeding your…", "url":"training/displaying-bitmaps/index.html", "group":"", "keywords": ["bitmaps","images","graphics"], "tags": ["bitmaps","images","graphics"], "image":"", "lang":"en", "type":"training" }, { "title":"Managing Bitmap Memory", "titleFriendly":"", "summary":"In addition to the steps described in Caching Bitmaps , there are specific things you can do to facilitate garbage collection and bitmap reuse. The recommended strategy depends on which version(s) of Android you are targeting. The BitmapFun sample app…", "url":"training/displaying-bitmaps/manage-memory.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Loading Large Bitmaps Efficiently", "titleFriendly":"", "summary":"Images come in all shapes and sizes. In many cases they are larger than required for a typical application user interface (UI). For example, the system Gallery application displays photos taken using your Android devices's camera which are typically…", "url":"training/displaying-bitmaps/load-bitmap.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Building Apps with Graphics & Animation", "titleFriendly":"", "summary":"These classes teach you how to accomplish tasks with graphics that can give your app an edge on the competition. If you want to go beyond the basic user interface to create a beautiful visual experience, these classes will help you get there.…", "url":"training/building-graphics.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Creating and Monitoring Geofences", "titleFriendly":"", "summary":"Geofencing combines awareness of the user's current location with awareness of nearby features, defined as the user's proximity to locations that may be of interest. To mark a location of interest, you specify its latitude and longitude. To adjust…", "url":"training/location/geofencing.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Making Your App Location-Aware", "titleFriendly":"", "summary":"One of the unique features of mobile applications is location awareness. Mobile users take their devices with them everywhere, and adding location awareness to your app offers users a more contextual experience. The location APIs available in Google Play…", "url":"training/location/index.html", "group":"", "keywords": ["location","geofence","geofencing","activity recognition","activity detection","gps"], "tags": ["location","geofence","geofencing","activityrecognition","activitydetection","gps"], "image":"", "lang":"en", "type":"training" }, { "title":"Recognizing the User's Current Activity", "titleFriendly":"", "summary":"Activity recognition tries to detect the user's current physical activity, such as walking, driving, or standing still. Requests for updates go through an activity recognition client, which, while different from the location client used by location…", "url":"training/location/activity-recognition.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Displaying a Location Address", "titleFriendly":"", "summary":"The lessons Retrieving the Current Location and Receiving Location Updates describe how to get the user's current location in the form of a Location object that contains latitude and longitude coordinates. Although latitude and longitude are useful…", "url":"training/location/display-address.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Receiving Location Updates", "titleFriendly":"", "summary":"If your app can continuously track location, it can deliver more relevant information to the user. For example, if your app helps the user find their way while walking or driving, or if your app tracks the location of assets, it needs to get the location…", "url":"training/location/receive-location-updates.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Getting the Last Known Location", "titleFriendly":"", "summary":"Using the Google Play services location APIs, your app can request the last known location of the user's device. In most cases, you are interested in the user's current location, which is usually equivalent to the last known location of the device…", "url":"training/location/retrieve-current.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Testing Using Mock Locations", "titleFriendly":"", "summary":"To test a location-aware app that uses Location Services, you don't need to move your device from place to place to generate location data. Instead, you can put Location Services into mock mode. In this mode, you can send mock Location objects to …", "url":"training/location/location-testing.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Best Practices for Background Jobs", "titleFriendly":"", "summary":"These classes show you how to run jobs in the background to boost your application's performance and minimize its drain on the battery.…", "url":"training/best-background.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Supporting Different Screen Sizes", "titleFriendly":"", "summary":"This lesson shows you how to support different screen sizes by: To ensure that your layout is flexible and adapts to different screen sizes, you should use "wrap_content" and "match_parent" for the width and height of some view components…", "url":"training/multiscreen/screensizes.html", "group":"", "keywords": [], "tags": [], "image":"images/training/layout-hvga.png", "lang":"en", "type":"training" }, { "title":"Designing for Multiple Screens", "titleFriendly":"", "summary":"Training on how to add intuitive, effective navigation for tablets and other devices.", "url":"training/multiscreen/index.html", "group":"", "keywords": ["tablet","tv","fragments","support"], "tags": ["tablet","tv","fragments","support"], "image":"", "lang":"en", "type":"training" }, { "title":"Supporting Different Densities", "titleFriendly":"", "summary":"Providing sets of layouts and drawable resources for specific ranges of device screens.", "url":"training/multiscreen/screendensities.html", "group":"", "keywords": [], "tags": ["multiplescreens"], "image":"", "lang":"en", "type":"training" }, { "title":"Implementing Adaptative UI Flows", "titleFriendly":"", "summary":"Depending on the layout that your application is currently showing, the UI flow may be different. For example, if your application is in the dual-pane mode, clicking on an item on the left pane will simply display the content on the right pane; if it …", "url":"training/multiscreen/adaptui.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Creating Multiple APKs for Different GL Textures", "titleFriendly":"", "summary":"When developing your Android application to take advantage of multiple APKs on Google Play, it’s important to adopt some good practices from the get-go, and prevent unnecessary headaches further into the development process. This lesson shows you how …", "url":"training/multiple-apks/texture.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Creating Multiple APKs for Different API Levels", "titleFriendly":"", "summary":"When developing your Android application to take advantage of multiple APKs on Google Play, it’s important to adopt some good practices from the get-go, and prevent unnecessary headaches further into the development process. This lesson shows you how …", "url":"training/multiple-apks/api.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Maintaining Multiple APKs", "titleFriendly":"", "summary":"Multiple APK support is a feature of Google Play that allows you to publish multiple APKs under the same application listing. Each APK is a complete instance of your application, optimized to target specific device configurations. Each APK can target …", "url":"training/multiple-apks/index.html", "group":"", "keywords": ["support"], "tags": ["support"], "image":"", "lang":"en", "type":"training" }, { "title":"Creating Multiple APKs with 2+ Dimensions", "titleFriendly":"", "summary":"When developing your Android application to take advantage of multiple APKs on Google Play, it’s important to adopt some good practices from the get-go, and prevent unnecessary headaches further into the development process. This lesson shows you how …", "url":"training/multiple-apks/multiple.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Creating Multiple APKs for Different Screen Sizes", "titleFriendly":"", "summary":"When developing your Android application to take advantage of multiple APKs on Google Play, it’s important to adopt some good practices from the get-go, and prevent unnecessary headaches further into the development process. This lesson shows you how …", "url":"training/multiple-apks/screensize.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Loading Data in the Background", "titleFriendly":"", "summary":"Querying a ContentProvider for data you want to display takes time. If you run the query directly from an Activity, it may get blocked and cause the system to issue an "Application Not Responding" message. Even if it doesn't, users will …", "url":"training/load-data-background/index.html", "group":"", "keywords": ["cursorloader"], "tags": ["cursorloader"], "image":"", "lang":"en", "type":"training" }, { "title":"Running a Query with a CursorLoader", "titleFriendly":"", "summary":"A CursorLoader runs an asynchronous query in the background against a ContentProvider, and returns the results to the Activity or FragmentActivity from which it was called. This allows the Activity or FragmentActivity to continue to interact with the …", "url":"training/load-data-background/setup-loader.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Handling the Results", "titleFriendly":"", "summary":"As shown in the previous lesson, you should begin loading your data with a CursorLoader in your implementation of onCreateLoader(). The loader then provides the query results to your Activity or FragmentActivity in your implementation of onLoadFinished…", "url":"training/load-data-background/handle-results.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Taking Photos Simply", "titleFriendly":"", "summary":"This lesson explains how to capture photos using an existing camera application. Suppose you are implementing a crowd-sourced weather service that makes a global weather map by blending together pictures of the sky taken by devices running your client…", "url":"training/camera/photobasics.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Capturing Photos", "titleFriendly":"", "summary":"The world was a dismal and featureless place before rich media became prevalent. Remember Gopher? We don't, either. For your app to become part of your users' lives, give them a way to put their lives into it. Using the on-board cameras, your …", "url":"training/camera/index.html", "group":"", "keywords": ["camera","video","picture"], "tags": ["camera","video","picture"], "image":"", "lang":"en", "type":"training" }, { "title":"Controlling the Camera", "titleFriendly":"", "summary":"In this lesson, we discuss how to control the camera hardware directly using the framework APIs. Directly controlling a device camera requires a lot more code than requesting pictures or videos from existing camera applications. However, if you want to…", "url":"training/camera/cameradirect.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Recording Videos Simply", "titleFriendly":"", "summary":"This lesson explains how to capture video using existing camera applications. Your application has a job to do, and integrating videos is only a small part of it. You want to take videos with minimal fuss, and not reinvent the camcorder. Happily, most…", "url":"training/camera/videobasics.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Putting it All Together: Wireframing the Example App", "titleFriendly":"", "summary":"Now that we have a solid understanding of navigation patterns and screen grouping techniques, it's time to apply them to our screens. Let's take another look at our exhaustive screen map for the example news application from the first lesson ,…", "url":"training/design-navigation/wireframing.html", "group":"", "keywords": [], "tags": [], "image":"images/training/app-navigation-screen-planning-exhaustive-map.png", "lang":"en", "type":"training" }, { "title":"Designing Effective Navigation", "titleFriendly":"", "summary":"This class is not specific to any particular version of the Android platform. It is also primarily design-focused and does not require knowledge of the Android SDK. That said, you should have experience using an Android device for a better understanding…", "url":"training/design-navigation/index.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Providing Descendant and Lateral Navigation", "titleFriendly":"", "summary":"One way of providing access to the full range of an application's screens is to expose hierarchical navigation. In this lesson we discuss descendant navigation , allowing users to descend 'down' a screen hierarchy into a child screen, and …", "url":"training/design-navigation/descendant-lateral.html", "group":"", "keywords": [], "tags": [], "image":"images/training/app-navigation-descendant-lateral-desc.png", "lang":"en", "type":"training" }, { "title":"Planning for Multiple Touchscreen Sizes", "titleFriendly":"", "summary":"Designing an intuitive, effective navigation for tablets and other devices.", "url":"training/design-navigation/multiple-sizes.html", "group":"", "keywords": [], "tags": ["multiplescreens"], "image":"images/training/app-navigation-multiple-sizes-strategy-stack.png", "lang":"en", "type":"training" }, { "title":"Providing Ancestral and Temporal Navigation", "titleFriendly":"", "summary":"Now that users can navigate deep into the application's screen hierarchy, we need to provide a method for navigating up the hierarchy, to parent and ancestor screens. Additionally, we should ensure that temporal navigation via the Back button is respected…", "url":"training/design-navigation/ancestral-temporal.html", "group":"", "keywords": [], "tags": [], "image":"images/training/app-navigation-ancestral-navigate-back.png", "lang":"en", "type":"training" }, { "title":"Planning Screens and Their Relationships", "titleFriendly":"", "summary":"Most apps have an inherent information model that can be expressed as a tree or graph of object types. In more obvious terms, you can draw a diagram of different kinds of information that represents the types of things users interact with in your app.…", "url":"training/design-navigation/screen-planning.html", "group":"", "keywords": [], "tags": [], "image":"images/training/app-navigation-screen-planning-erd.png", "lang":"en", "type":"training" }, { "title":"Interacting with Other Apps", "titleFriendly":"", "summary":"An Android app typically has several activities . Each activity displays a user interface that allows the user to perform a specific task (such as view a map or take a photo). To take the user from one activity to another, your app must use an Intent …", "url":"training/basics/intents/index.html", "group":"", "keywords": ["intents","activity"], "tags": ["intents","activity"], "image":"", "lang":"en", "type":"training" }, { "title":"Getting a Result from an Activity", "titleFriendly":"", "summary":"Starting another activity doesn't have to be one-way. You can also start another activity and receive a result back. To receive a result, call startActivityForResult() (instead of startActivity()). For example, your app can start a camera app and …", "url":"training/basics/intents/result.html", "group":"", "keywords": ["intents"], "tags": ["intents"], "image":"", "lang":"en", "type":"training" }, { "title":"Sending the User to Another App", "titleFriendly":"", "summary":"One of Android's most important features is an app's ability to send the user to another app based on an "action" it would like to perform. For example, if your app has the address of a business that you'd like to show on a map, …", "url":"training/basics/intents/sending.html", "group":"", "keywords": ["intents"], "tags": ["intents"], "image":"images/training/basics/intents-choice.png", "lang":"en", "type":"training" }, { "title":"Allowing Other Apps to Start Your Activity", "titleFriendly":"", "summary":"The previous two lessons focused on one side of the story: starting another app's activity from your app. But if your app can perform an action that might be useful to another app, your app should be prepared to respond to action requests from other…", "url":"training/basics/intents/filters.html", "group":"", "keywords": ["intents"], "tags": ["intents"], "image":"", "lang":"en", "type":"training" }, { "title":"Building a Flexible UI", "titleFriendly":"", "summary":"When designing your application to support a wide range of screen sizes, you can reuse your fragments in different layout configurations to optimize the user experience based on the available screen space. For example, on a handset device it might be …", "url":"training/basics/fragments/fragment-ui.html", "group":"", "keywords": ["fragments"], "tags": ["fragments"], "image":"images/training/basics/fragments-screen-mock.png", "lang":"en", "type":"training" }, { "title":"Communicating with Other Fragments", "titleFriendly":"", "summary":"In order to reuse the Fragment UI components, you should build each as a completely self-contained, modular component that defines its own layout and behavior. Once you have defined these reusable Fragments, you can associate them with an Activity and…", "url":"training/basics/fragments/communicating.html", "group":"", "keywords": ["fragments"], "tags": ["fragments"], "image":"", "lang":"en", "type":"training" }, { "title":"Creating a Fragment", "titleFriendly":"", "summary":"You can think of a fragment as a modular section of an activity, which has its own lifecycle, receives its own input events, and which you can add or remove while the activity is running (sort of like a "sub activity" that you can reuse in different…", "url":"training/basics/fragments/creating.html", "group":"", "keywords": ["fragments"], "tags": ["fragments"], "image":"", "lang":"en", "type":"training" }, { "title":"Building a Dynamic UI with Fragments", "titleFriendly":"", "summary":"To create a dynamic and multi-pane user interface on Android, you need to encapsulate UI components and activity behaviors into modules that you can swap into and out of your activities. You can create these modules with the Fragment class, which behaves…", "url":"training/basics/fragments/index.html", "group":"", "keywords": ["fragments","user interface","support library"], "tags": ["fragments","userinterface","supportlibrary"], "image":"", "lang":"en", "type":"training" }, { "title":"Using the Support Library", "titleFriendly":"", "summary":"The Android Support Library provides a JAR file with an API library that allows you to use some of the more recent Android APIs in your app while running on earlier versions of Android. For instance, the Support Library provides a version of the Fragment…", "url":"training/basics/fragments/support-lib.html", "group":"", "keywords": ["support library"], "tags": ["supportlibrary"], "image":"images/training/basics/sdk-manager.png", "lang":"en", "type":"training" }, { "title":"Starting Another Activity", "titleFriendly":"", "summary":"After completing the previous lesson , you have an app that shows an activity (a single screen) with a text field and a button. In this lesson, you’ll add some code to MyActivity that starts a new activity when the user clicks the Send button. The Intent…", "url":"training/basics/firstapp/starting-activity.html", "group":"", "keywords": ["intents"], "tags": ["intents"], "image":"images/training/firstapp/studio-new-activity.png", "lang":"en", "type":"training" }, { "title":"Creating an Android Project", "titleFriendly":"", "summary":"An Android project contains all the files that comprise the source code for your Android app. This lesson shows how to create a new project either using Android Studio or using the SDK tools from a command line. It will probably be easier to follow these…", "url":"training/basics/firstapp/creating-project.html", "group":"", "keywords": ["project setup"], "tags": ["projectsetup"], "image":"images/training/firstapp/studio-setup-1.png", "lang":"en", "type":"training" }, { "title":"Running Your App", "titleFriendly":"", "summary":"If you followed the previous lesson to create an Android project, it includes a default set of "Hello World" source files that allow you to immediately run the app. How you run your app depends on two things: whether you have a real device running…", "url":"training/basics/firstapp/running-app.html", "group":"", "keywords": ["emulator"], "tags": ["emulator"], "image":"images/tools/as-run.png", "lang":"en", "type":"training" }, { "title":"Building Your First App", "titleFriendly":"", "summary":"If you're new to Android app development, this where you should begin. This series of lessons shows you how to create a new project, build a simple app, and run it on a device or emulator.", "url":"training/basics/firstapp/index.html", "group":"", "keywords": ["sdk tools"], "tags": ["sdktools"], "image":"", "lang":"en", "type":"training" }, { "title":"Building a Simple User Interface", "titleFriendly":"", "summary":"In this lesson, you create a layout in XML that includes a text field and a button. In the next lesson, your app responds when the button is pressed by sending the content of the text field to another activity. The graphical user interface for an Android…", "url":"training/basics/firstapp/building-ui.html", "group":"", "keywords": ["ui"], "tags": ["ui"], "image":"images/viewgroup.png", "lang":"en", "type":"training" }, { "title":"Managing Network Usage", "titleFriendly":"", "summary":"This lesson describes how to write applications that have fine-grained control over their usage of network resources. If your application performs a lot of network operations, you should provide user settings that allow users to control your app’s data…", "url":"training/basics/network-ops/managing.html", "group":"", "keywords": [], "tags": [], "image":"images/training/basics/network-settings1.png", "lang":"en", "type":"training" }, { "title":"Performing Network Operations", "titleFriendly":"", "summary":"This class explains the basic tasks involved in connecting to the network, monitoring the network connection (including connection changes), and giving users control over an app's network usage. It also describes how to parse and consume XML data.…", "url":"training/basics/network-ops/index.html", "group":"", "keywords": ["network","wireless"], "tags": ["network","wireless"], "image":"", "lang":"en", "type":"training" }, { "title":"Connecting to the Network", "titleFriendly":"", "summary":"This lesson shows you how to implement a simple application that connects to the network. It explains some of the best practices you should follow in creating even the simplest network-connected app. Note that to perform the network operations described…", "url":"training/basics/network-ops/connecting.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Parsing XML Data", "titleFriendly":"", "summary":"Extensible Markup Language (XML) is a set of rules for encoding documents in machine-readable form. XML is a popular format for sharing data on the internet. Websites that frequently update their content, such as news sites or blogs, often provide an …", "url":"training/basics/network-ops/xml.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Saving Data", "titleFriendly":"", "summary":"Most Android apps need to save data, even if only to save information about the app state during onPause() so the user's progress is not lost. Most non-trivial apps also need to save user settings, and some apps must manage large amounts of information…", "url":"training/basics/data-storage/index.html", "group":"", "keywords": ["data storage","files","sql","database","preferences"], "tags": ["datastorage","files","sql","database","preferences"], "image":"", "lang":"en", "type":"training" }, { "title":"Saving Data in SQL Databases", "titleFriendly":"", "summary":"Saving data to a database is ideal for repeating or structured data, such as contact information. This class assumes that you are familiar with SQL databases in general and helps you get started with SQLite databases on Android. The APIs you'll need…", "url":"training/basics/data-storage/databases.html", "group":"", "keywords": ["data storage"], "tags": ["datastorage"], "image":"", "lang":"en", "type":"training" }, { "title":"Saving Files", "titleFriendly":"", "summary":"Android uses a file system that's similar to disk-based file systems on other platforms. This lesson describes how to work with the Android file system to read and write files with the File APIs. A File object is suited to reading or writing large…", "url":"training/basics/data-storage/files.html", "group":"", "keywords": ["data storage"], "tags": ["datastorage"], "image":"", "lang":"en", "type":"training" }, { "title":"Saving Key-Value Sets", "titleFriendly":"", "summary":"If you have a relatively small collection of key-values that you'd like to save, you should use the SharedPreferences APIs. A SharedPreferences object points to a file containing key-value pairs and provides simple methods to read and write them. …", "url":"training/basics/data-storage/shared-preferences.html", "group":"", "keywords": ["data storage"], "tags": ["datastorage"], "image":"", "lang":"en", "type":"training" }, { "title":"Pausing and Resuming an Activity", "titleFriendly":"", "summary":"During normal app use, the foreground activity is sometimes obstructed by other visual components that cause the activity to pause . For example, when a semi-transparent activity opens (such as one in the style of a dialog), the previous activity pauses…", "url":"training/basics/activity-lifecycle/pausing.html", "group":"", "keywords": ["activity lifecycle"], "tags": ["activitylifecycle"], "image":"images/training/basics/basic-lifecycle-paused.png", "lang":"en", "type":"training" }, { "title":"Managing the Activity Lifecycle", "titleFriendly":"", "summary":"As a user navigates through, out of, and back to your app, the Activity instances in your app transition between different states in their lifecycle. For instance, when your activity starts for the first time, it comes to the foreground of the system …", "url":"training/basics/activity-lifecycle/index.html", "group":"", "keywords": ["activity lifecycle"], "tags": ["activitylifecycle"], "image":"", "lang":"en", "type":"training" }, { "title":"Starting an Activity", "titleFriendly":"", "summary":"Unlike other programming paradigms in which apps are launched with a main() method, the Android system initiates code in an Activity instance by invoking specific callback methods that correspond to specific stages of its lifecycle. There is a sequence…", "url":"training/basics/activity-lifecycle/starting.html", "group":"", "keywords": ["activity lifecycle"], "tags": ["activitylifecycle"], "image":"images/training/basics/basic-lifecycle.png", "lang":"en", "type":"training" }, { "title":"Recreating an Activity", "titleFriendly":"", "summary":"There are a few scenarios in which your activity is destroyed due to normal app behavior, such as when the user presses the Back button or your activity signals its own destruction by calling finish(). The system may also destroy your activity if it'…", "url":"training/basics/activity-lifecycle/recreating.html", "group":"", "keywords": ["activity lifecycle"], "tags": ["activitylifecycle"], "image":"images/training/basics/basic-lifecycle-savestate.png", "lang":"en", "type":"training" }, { "title":"Stopping and Restarting an Activity", "titleFriendly":"", "summary":"Properly stopping and restarting your activity is an important process in the activity lifecycle that ensures your users perceive that your app is always alive and doesn't lose their progress. There are a few of key scenarios in which your activity…", "url":"training/basics/activity-lifecycle/stopping.html", "group":"", "keywords": ["activity lifecycle"], "tags": ["activitylifecycle"], "image":"images/training/basics/basic-lifecycle-stopped.png", "lang":"en", "type":"training" }, { "title":"Setting Up the Action Bar", "titleFriendly":"", "summary":"In its most basic form, the action bar displays the title for the activity and the app icon on the left. Even in this simple form, the action bar is useful for all activities to inform users about where they are and to maintain a consistent identity for…", "url":"training/basics/actionbar/setting-up.html", "group":"", "keywords": ["actionbar"], "tags": ["actionbar"], "image":"images/training/basics/actionbar-basic.png", "lang":"en", "type":"training" }, { "title":"Styling the Action Bar", "titleFriendly":"", "summary":"The action bar provides your users a familiar and predictable way to perform actions and navigate your app, but that doesn't mean it needs to look exactly the same as it does in other apps. If you want to style the action bar to better fit your product…", "url":"training/basics/actionbar/styling.html", "group":"", "keywords": ["actionbar"], "tags": ["actionbar"], "image":"images/training/basics/actionbar-theme-dark@2x.png", "lang":"en", "type":"training" }, { "title":"Adding Action Buttons", "titleFriendly":"", "summary":"The action bar allows you to add buttons for the most important action items relating to the app's current context. Those that appear directly in the action bar with an icon and/or text are known as action buttons . Actions that can't fit …", "url":"training/basics/actionbar/adding-buttons.html", "group":"", "keywords": ["actionbar"], "tags": ["actionbar"], "image":"images/training/basics/actionbar-actions.png", "lang":"en", "type":"training" }, { "title":"Adding the Action Bar", "titleFriendly":"", "summary":"Action Bar The action bar is one of the most important design elements you can implement for your app's activities. It provides several user interface features that make your app immediately familiar to users by offering consistency between other …", "url":"training/basics/actionbar/index.html", "group":"", "keywords": ["actionbar"], "tags": ["actionbar"], "image":"images/training/basics/actionbar-actions.png", "lang":"en", "type":"training" }, { "title":"Overlaying the Action Bar", "titleFriendly":"", "summary":"By default, the action bar appears at the top of your activity window, slightly reducing the amount of space available for the rest of your activity's layout. If, during the course of user interaction, you want to hide and show the action bar, you…", "url":"training/basics/actionbar/overlaying.html", "group":"", "keywords": ["actionbar"], "tags": ["actionbar"], "image":"images/training/basics/actionbar-overlay@2x.png", "lang":"en", "type":"training" }, { "title":"Supporting Different Screens", "titleFriendly":"", "summary":"Android categorizes device screens using two general properties: size and density. You should expect that your app will be installed on devices with screens that range in both size and density. As such, you should include some alternative resources that…", "url":"training/basics/supporting-devices/screens.html", "group":"", "keywords": ["layouts"], "tags": ["layouts"], "image":"", "lang":"en", "type":"training" }, { "title":"Supporting Different Devices", "titleFriendly":"", "summary":"Android devices come in many shapes and sizes all around the world. With a wide range of device types, you have an opportunity to reach a huge audience with your app. In order to be as successful as possible on Android, your app needs to adapt to various…", "url":"training/basics/supporting-devices/index.html", "group":"", "keywords": ["layouts","resources","screens","localization"], "tags": ["layouts","resources","screens","localization"], "image":"", "lang":"en", "type":"training" }, { "title":"Supporting Different Languages", "titleFriendly":"", "summary":"It’s always a good practice to extract UI strings from your app code and keep them in an external file. Android makes this easy with a resources directory in each Android project. If you created your project using the Android SDK Tools (read Creating …", "url":"training/basics/supporting-devices/languages.html", "group":"", "keywords": ["strings","localizing","localization","resources","formats","l10n"], "tags": ["strings","localizing","localization","resources","formats","l10n"], "image":"", "lang":"en", "type":"training" }, { "title":"Supporting Different Platform Versions", "titleFriendly":"", "summary":"Training on how to declare support for minimum and target API levels.", "url":"training/basics/supporting-devices/platforms.html", "group":"", "keywords": ["styles"], "tags": ["styles"], "image":"", "lang":"en", "type":"training" }, { "title":"Building Apps with Multimedia", "titleFriendly":"", "summary":"These classes teach you how to create rich multimedia apps that behave the way users expect.…", "url":"training/building-multimedia.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Using the Backup API", "titleFriendly":"", "summary":"When a user purchases a new device or resets their existing one, they might expect that when Google Play restores your app back to their device during the initial setup, the previous data associated with the app restores as well. By default, that doesn…", "url":"training/cloudsync/backupapi.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Syncing to the Cloud", "titleFriendly":"", "summary":"By providing powerful APIs for internet connectivity, the Android framework helps you build rich cloud-enabled apps that sync their data to a remote web service, making sure all your devices always stay in sync, and your valuable data is always backed…", "url":"training/cloudsync/index.html", "group":"", "keywords": ["cloud","sync","backup"], "tags": ["cloud","sync","backup"], "image":"", "lang":"en", "type":"training" }, { "title":"Making the Most of Google Cloud Messaging", "titleFriendly":"", "summary":"Google Cloud Messaging (GCM) is a free service for sending messages to Android devices. GCM messaging can greatly enhance the user experience. Your application can stay up to date without wasting battery power on waking up the radio and polling the server…", "url":"training/cloudsync/gcm.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Monetizing Your App", "titleFriendly":"", "summary":"Apart from offering paid apps, there are a number of other ways to monetize your mobile applications. In this class, we are going to examine a number of typical methods (more lessons are to come) and their associated technical best practices. Obviously…", "url":"training/monetization/index.html", "group":"", "keywords": [], "tags": [], "image":"", "lang":"en", "type":"training" }, { "title":"Advertising without Compromising User Experience", "titleFriendly":"", "summary":"Advertising is one of the means to monetize (make money with) mobile applications. In this lesson, you are going to learn how to incorporate banner ads in your Android application. While this lesson and the sample application use AdMob to serve ads, the…", "url":"training/monetization/ads-and-ux.html", "group":"", "keywords": [], "tags": [], "image":"images/training/ads-eclipse-build-path.png", "lang":"en", "type":"training" } ]; var _BY_TAG = { "emote":[0], "e-mote":[0], "adt":[0] }; var ABOUT_BY_TAG = { "tv":[1], "leanback":[1], "ecosystem":[12], "versions":[12], "whatsnew":[12] }; var DESIGN_BY_TAG = { "tv":[2], "leanback":[2,49], "designguidelines":[2], "material":[5], "design":[5,15,16,46], "icons":[6,25], "stencils":[6], "colorswatches":[6], "beautifulapps":[16], "branding":[18,25], "logo":[18], "dialog":[19,30,55], "toast":[19,30,55], "notification":[19,55], "input":[21,34,38,61,62], "button":[21,27,34], "multiplescreens":[22], "layout":[22,37,39,44,54], "tablets":[22], "textview":[24], "font":[24], "switch":[27], "checkbox":[27], "radiobutton":[27], "scrollview":[28], "listview":[28,37,39], "spinner":[29], "dropdown":[29], "progressbar":[31,35], "download":[31], "network":[31], "tabs":[33,53], "actionbar":[33,45], "navigation":[33,44,45,53,54,58,61,63], "viewpager":[33,53], "seekbar":[35], "datepicker":[36], "timepicker":[36], "gridview":[37], "text":[38], "edittext":[38], "notifications":[46], "preferences":[47,60], "sharedpreferences":[47], "fullscreen":[49], "immersive":[49], "drawerlayout":[50], "slidingpanelayout":[50], "support":[52], "tablet":[54], "buttons":[57], "kitkat":[59], "android4.4":[59], "settings":[60], "accessibility":[61], "gesture":[62], "actionmode":[63], "appwidget":[64], "home":[64] }; var DISTRIBUTE_BY_TAG = { "landing":[0,19], "quality":[0,19,23,30,35,37], "analytics":[11,12,13,15,16,17,47,49], "userbehavior":[11,12,13,15,16,17,47], "wear":[23,35], "wearables":[23], "education":[28,30], "gpfe":[29], "googleplay":[29,54,57,64,65,73,74,75], "distribution":[29], "edu":[29], "distribute":[31], "bestpractices":[31], "visibility":[32], "growth":[32,50,52,53,54,55], "distributing":[32], "publishing":[33,68,71], "tv":[37], "publish":[37], "":[38,48], "appindexing":[39], "google+signin":[39], "gcm":[41], "games":[42,73], "updates":[43], "google+":[44], "engagement":[45], "users":[49,50,52,53,54,55], "ads":[49,56], "listing":[54], "monetizing":[56,59,60,61,62], "free":[56,61], "freemium":[56], "in-app":[61,62], "iap":[61,62], "brand":[63], "bugdroid":[63], "assets":[63], "disttools":[64,66,68,71], "promoting":[64,66,67], "deviceart":[64,66], "marketing":[64,66], "badge":[65], "localizing":[68,71] }; var GOOGLE_BY_TAG = { "gcs":[6], "apksize":[8], "apkmax":[8], "largeassets":[8], "billing":[12,13,16,18], "inapp":[12,16,18], "iap":[12,16,18], "in-appbilling":[13], "googleplay":[13], "inappbilling":[13,13,15,21], "monetizing":[15], "monetization":[21,42], "licensing":[24], "drm":[24], "cloud":[28,35,38,49], "push":[28,35,38], "messaging":[28,35,38], "gcm":[32], "accountmanager":[40], "oauth2":[40], "location":[41,44], "geofence":[41], "geofencing":[41], "gps":[41], "ads":[42,50], "authentication":[43], "signin":[43], "social":[43], "mapview":[44], "chromecast":[46], "miracast":[46], "games":[47], "storage":[49], "files":[49], "wallet":[51], "payments":[51], "instantbuy":[51], "oauth2.0":[53,54], "googleauthutil":[53,54] }; var GUIDE_BY_TAG = { "intentfilter":[6,15], "lifecycle":[7,64], "background":[7], "activity":[9,64], "intent":[9], "recents":[14], "overview":[14], "sdcard":[22,23], "external":[22], "database":[23], "sharedpreferences":[23], "searchrecentsuggestions":[25], "searchrecentsuggestionsprovider":[25,28], "searchview":[26], "devicepolicymanager":[30], "policy":[30], "security":[30], "ime":[31], "keyboard":[31], "inputmethodservice":[31], "clipboardmanager":[33], "clipdata":[33,122], "input":[33,34], "mediaplayer":[37], "soundpool":[37], "audiomanager":[37], "mediarouter":[38], "cast":[38], "chromecast":[38], "wirelessdisplay":[38], "miracast":[38], "mediarouteprovider":[39], "mediacontrolintent":[39], "audio":[41,159], "video":[41,42,159], "adaptive":[41], "streaming":[41], "dash":[41], "smoothstreaming":[41], "photo":[42], "mediarecorder":[43], "localizing":[60], "localization":[60], "resources":[60], "formats":[60], "l10n":[60], "games":[70], "valueanimator":[71], "objectanimator":[71], "layouttransition":[71], "viewpropertyanimator":[71], "sipmanager":[78], "sipprofile":[78], "sipaudiocall":[78], "telephony":[78], "wireless":[80,81,82], "wifip2pmanager":[80], "wi-fidirect":[80], "wifidirect":[80], "p2p":[80], "wi-fip2p":[80], "wifip2p":[80], "hostcardemulation":[83], "hce":[83], "hostapduservice":[83], "offhostapduservice":[83], "tapandpay":[83], "actionbar":[92], "menu":[92], "tabs":[92], "preference":[94], "preferenceactivity":[94], "preferencefragment":[94], "accessibility":[98], "alertdialog":[101], "dialogfragment":[101], "edittext":[102], "autocompletetextview":[102], "button":[103], "imagebutton":[103], "radiobutton":[104], "radiogroup":[104], "datepicker":[106], "timepicker":[106], "switch":[107], "togglebutton":[107], "adapterview":[108], "spinneradapter":[108], "gridview":[109], "relativelayout":[110], "listview":[112], "linearlayout":[113], "view":[115,116], "viewgroup":[115], "filtering":[131], "features":[131], "googleplayfilters":[131], "permissions":[131], "apilevels":[143], "sdkversion":[143], "minsdkversion":[143], "targetsdkversion":[143], "maxsdkversion":[143], "sensorevent":[152,155], "accelerometer":[152], "gyroscope":[152], "gravity":[152], "rotation":[152], "stepcounter":[152], "location":[153], "sensors":[153], "home":[156], "appwidgetprovider":[156], "appwidgethost":[157], "homescreen":[157], "launcher":[157], "multiplescreens":[167] }; var SAMPLES_BY_TAG = { "navigationdrawer":[0], "findmyphone":[1], "gridviewpager":[2], "actionbarcompat-listpopupmenu":[3], "immersivemode":[4], "swiperefreshlistfragment":[5], "mediarecorder":[6], "recipeassistant":[7], "horizontalpaging":[8], "donebar":[9], "camera2video":[10], "batchstepsensor":[11], "actionbarcompat-styled":[12], "bluetoothlegatt":[13], "revealeffectbasic":[14], "networkconnect":[15], "documentcentricrecents":[16], "geofencing":[17], "embeddedapp":[18], "jobscheduler":[19], "textlinkify":[20], "watchviewstub":[21], "activityinstrumentation":[22], "mycloud":[23], "mediaeffects":[24], "advancedimmersivemode":[25], "interpolator":[26], "watchface":[27], "lnotificationssample":[28], "mediarouter":[29], "basicrenderscript":[30], "basicandroidkeystore":[31], "basicsyncadapter":[32], "basicmanagedprofile":[33], "adaptertransition":[34], "basicimmersivemode":[35], "skeletonwearableapp":[36], "synchronizednotifications":[37], "basicmediadecoder":[38], "cardemulation":[39], "basicmultitouch":[40], "activityscenetransitionbasic":[41], "customtransition":[42], "recyclerview":[43], "floatingactionbuttonbasic":[44], "swiperefreshmultipleviews":[45], "repeatingalarm":[46], "fragmenttransition":[47], "datalayer":[48], "customnotifications":[49], "slidingtabscolors":[50], "basicnotifications":[51], "basicmediarouter":[52], "apprestrictionenforcer":[53], "messagingservice":[54], "basictransition":[55], "pdfrendererbasic":[56], "camera2basic":[57], "apprestrictionschema":[58], "agendadata":[59], "borderlessbuttons":[60], "basicnetworking":[61], "actionbarcompat-shareactionprovider":[62], "documentcentricrelinquishidentity":[63], "quiz":[64], "timer":[65], "renderscriptintrinsic":[66], "jumpingjack":[67], "cardreader":[68], "elevationdrag":[69], "clippingbasic":[70], "delayedconfirmation":[71], "elevationbasic":[72], "flashlight":[73], "customchoicelist":[74], "hdrviewfinder":[75], "displayingbitmaps":[76], "bluetoothchat":[77], "slidingtabsbasic":[78], "wearablenotifications":[79], "elizachat":[80], "basicgesturedetect":[81], "speedtracker":[82], "drawabletinting":[83], "textswitcher":[84], "actionbarcompat-basic":[85], "swiperefreshlayoutbasic":[86], "basiccontactables":[87], "storageclient":[88], "cardviewsample":[89], "basicaccessibility":[90], "apprestrictions":[91], "mediabrowserservice":[92], "examples":[97], "code":[97] }; var TOOLS_BY_TAG = { "sdk":[12], "androidstudio":[12], "sdkmanager":[26], "memory":[44], "outofmemoryerror":[44], "systrace":[49], "speed":[49], "65536":[65], "references":[65], "max":[65], "65k":[65], "dex":[65], "64k":[65], "multidex":[65], "multi-dex":[65], "methods

":[65], "adk":[75,76,77], "adb":[95], "adt":[119], "ninepatch":[121] }; var TRAINING_BY_TAG = { "tv":[28,29,30,31,32,33,34,35,36,61,62,63,64,65,67,68,70,71,73,74,75,76,307], "browsefragment":[28,62], "presenter":[28,62], "backgroundmanager":[28,62], "fileprovider":[56], "share":[56,124,145], "contentprovider":[56], "leanback":[69,70,75,76], "recyclerview":[69], "launcher":[69], "unsupported":[72], "search":[77], "searchable":[77], "include":[81], "merge":[81], "viewstub":[81], "listview":[81], "":[85], "intentservice":[88], "searchview":[92], "database":[92,346], "privacy":[98,113], "oauth":[98], "accounts":[98], "appindexing":[104], "gamecontroller":[110], "policy":[113], "intents":[124,328,329,330,331,337], "drawerlayout":[130], "navigation":[130,142,166,189], "backnavigation":[131], "navutils":[131,134], "taskstackbuilder":[131,134], "viewpager":[133], "horizontal":[133], "paging":[133], "swipeview":[133], "tabs":[133], "upnavigation":[134], "notifications":[135,136,137,138,139,140,238,239,240,241,242], "nfcadapter":[145], "androidbeam":[145], "edittext":[157], "accessibility":[157], "print":[166], "wifi":[170], "network":[170,205,208,244,250,343], "wireless":[170,250,343], "auto":[173,175,176], "car":[173,175,176], "automotive":[173,175,176], "messaging":[173], "audio":[178], "media":[178], "animator":[184], "views":[184], "layout":[184,261], "userinterface":[184,335], "input":[189], "testing":[197], "gps":[201,299], "ndk":[202,210], "native":[202,210], "ram":[206], "lowmemory":[206], "outofmemoryerror":[206], "ontrimmemory":[206], "threads":[209], "asynctask":[209], "wear":[217,218,219,220,221,222,241], "battery":[250], "widgets":[261,272], "ui":[261,341], "opengl":[266], "graphics":[266,294], "cloud":[271,366], "threadpool":[281], "runnable":[281], "billing":[288], "bitmaps":[294], "images":[294], "location":[299], "geofence":[299], "geofencing":[299], "activityrecognition":[299], "activitydetection":[299], "tablet":[307], "multiplescreens":[308,325], "support":[312], "cursorloader":[315], "camera":[319], "video":[319], "picture":[319], "fragments":[332,333,334,335], "supportlibrary":[336], "projectsetup":[338], "emulator":[339], "sdktools":[340], "datastorage":[346,347,348,349], "files":[346], "sql":[346], "activitylifecycle":[350,351,352,353,354], "actionbar":[355,356,357,358,359], "layouts":[360,361], "strings":[362], "localizing":[362], "localization":[362], "resources":[362], "formats":[362], "l10n":[362], "styles":[363] };