blob: 3acb35885af867f7426a3d71d7551719b4454ab6 [file] [log] [blame]
Scott Main1f694392011-02-21 22:19:27 -08001page.title=Android 3.0 Platform
Scott Mainea723292011-02-09 16:01:04 -08002sdk.platform.version=3.0
3sdk.platform.apiLevel=11
Scott Main7fb538c2011-01-19 21:11:50 -08004@jd:body
5
6<div id="qv-wrapper">
7<div id="qv">
8
9<h2>In this document</h2>
10<ol>
Scott Mainea723292011-02-09 16:01:04 -080011 <li><a href="#relnotes">Revisions</a></li>
Scott Main7fb538c2011-01-19 21:11:50 -080012 <li><a href="#api">API Overview</a></li>
13 <li><a href="#api-level">API Level</a></li>
14 <li><a href="#apps">Built-in Applications</a></li>
15 <li><a href="#locs">Locales</a></li>
16 <li><a href="#skins">Emulator Skins</a></li>
17</ol>
18
19<h2>Reference</h2>
20<ol>
21<li><a
Scott Mainea723292011-02-09 16:01:04 -080022href="{@docRoot}sdk/api_diff/11/changes.html">API
Scott Main7fb538c2011-01-19 21:11:50 -080023Differences Report &raquo;</a> </li>
24</ol>
25
26<h2>See Also</h2>
27<ol>
Scott Maina7b1b8c2012-03-14 17:16:11 -070028 <li><a href="{@docRoot}guide/practices/tablets-and-handsets.html">Supporting Tablets and
29Handsets</a></li>
Scott Main7fb538c2011-01-19 21:11:50 -080030</ol>
31
32</div>
33</div>
34
Scott Main7fb538c2011-01-19 21:11:50 -080035
Scott Mainea723292011-02-09 16:01:04 -080036<p><em>API Level:</em>&nbsp;<strong>{@sdkPlatformApiLevel}</strong></p>
Scott Maind41ff8e2011-01-21 14:51:33 -080037
Scott Mainea723292011-02-09 16:01:04 -080038<p>For developers, the Android {@sdkPlatformVersion} platform is available as a downloadable
39component for the Android SDK. The downloadable platform includes an Android library and system
40image, as well as a set of emulator skins and more. The downloadable platform includes no external
41libraries.</p>
42
43<p>To get started developing or testing against Android {@sdkPlatformVersion}, use the Android SDK
44Manager to download the platform into your SDK. For more information, see <a
Scott Maina7b1b8c2012-03-14 17:16:11 -070045href="{@docRoot}sdk/adding-components.html">Adding SDK Packages</a>. If you are new to Android, <a
Scott Mainea723292011-02-09 16:01:04 -080046href="{@docRoot}sdk/index.html">download the SDK Starter Package</a> first.</p>
47
48<p>For a high-level introduction to Android {@sdkPlatformVersion}, see the <a
49href="{@docRoot}sdk/android-{@sdkPlatformVersion}-highlights.html">Platform
50Highlights</a>.</p>
Scott Maind41ff8e2011-01-21 14:51:33 -080051
Scott Main1f694392011-02-21 22:19:27 -080052<p class="note"><strong>Note:</strong>
53If you've already published an Android application, please test and optimize your application on
54Android 3.0 as soon as possible. You should do so to be sure your application provides the best
55experience possible on the latest Android-powered devices. For information about what you can do,
Scott Maina7b1b8c2012-03-14 17:16:11 -070056read <a href="{@docRoot}guide/practices/tablets-and-handsets.html">Supporting Tablets and
57Handsets</a>.</p>
Scott Maind41ff8e2011-01-21 14:51:33 -080058
59
Scott Mainea723292011-02-09 16:01:04 -080060<h2 id="relnotes">Revisions</h2>
Scott Main7fb538c2011-01-19 21:11:50 -080061
Scott Mainea723292011-02-09 16:01:04 -080062<p>To determine what revision of the Android {@sdkPlatformVersion} platform you have installed,
63refer to the "Installed Packages" listing in the Android SDK and AVD Manager.</p>
64
65
Scott Main5465e052011-07-26 18:29:44 -070066
Scott Mainea723292011-02-09 16:01:04 -080067<div class="toggle-content opened" style="padding-left:1em;">
68
Scott Main5465e052011-07-26 18:29:44 -070069<p><a href="#" onclick="return toggleContent(this)">
70 <img src="{@docRoot}assets/images/triangle-opened.png"
71class="toggle-content-img" alt="" />
72 Android {@sdkPlatformVersion}, Revision 2</a> <em>(July 2011)</em>
73</a></p>
Scott Mainea723292011-02-09 16:01:04 -080074
Scott Main5465e052011-07-26 18:29:44 -070075<div class="toggle-content-toggleme" style="padding-left:2em;">
76
77<dl>
78<dt>Dependencies:</dt>
79<dd>
80<p>Requires <a href="{@docRoot}sdk/tools-notes.html">SDK Tools r12</a> or
81higher.</p>
82</dd>
83<dt>Notes:</dt>
84<dd>
85<p>Improvements to the platform's rendering library to support the visual layout editor in the ADT
86Eclipse plugin. This revision allows for more drawing features in ADT and fixes several
87bugs in the previous rendering library. It also unlocks several editor features that were added in
88ADT 12.</p>
89</dd>
90</dl>
91
92</div>
93</div>
94
95<div class="toggle-content closed" style="padding-left:1em;">
96
97<p><a href="#" onclick="return toggleContent(this)">
98 <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img" alt="" />
99 Android {@sdkPlatformVersion}, Revision 1</a> <em>(February 2011)</em>
100</a></p>
101
102<div class="toggle-content-toggleme" style="padding-left:2em;">
Scott Mainea723292011-02-09 16:01:04 -0800103
104<dl>
Scott Mainea723292011-02-09 16:01:04 -0800105<dt>Dependencies:</dt>
106<dd>
107<p>Requires <a href="{@docRoot}sdk/tools-notes.html">SDK Tools r10</a> or higher.</p>
108</dd>
Scott Mainea723292011-02-09 16:01:04 -0800109</dl>
110
Scott Main5465e052011-07-26 18:29:44 -0700111</div>
Scott Mainea723292011-02-09 16:01:04 -0800112</div>
Scott Main7fb538c2011-01-19 21:11:50 -0800113
114
115
116<h2 id="#api">API Overview</h2>
117
118<p>The sections below provide a technical overview of what's new for developers in Android 3.0,
119including new features and changes in the framework API since the previous version.</p>
120
121
Scott Mainea723292011-02-09 16:01:04 -0800122
123
124
Scott Main7fb538c2011-01-19 21:11:50 -0800125<h3>Fragments</h3>
126
127<p>A fragment is a new framework component that allows you to separate distinct elements of an
128activity into self-contained modules that define their own UI and lifecycle. To create a
129fragment, you must extend the {@link android.app.Fragment} class and implement several lifecycle
130callback methods, similar to an {@link android.app.Activity}. You can then combine multiple
131fragments in a single activity to build a multi-pane UI in which each
132pane manages its own lifecycle and user inputs.</p>
133
134<p>You can also use a fragment without providing a UI and instead use the fragment as a worker
135for the activity, such as to manage the progress of a download that occurs only while the
136activity is running.</p>
137
138<p>Additionally:</p>
139
140<ul>
Scott Mainea723292011-02-09 16:01:04 -0800141 <li>Fragments are self-contained and you can reuse them in multiple activities</li>
142 <li>You can add, remove, replace and animate fragments inside the activity</li>
143 <li>You can add fragments to a back stack managed by the activity, preserving the state of
Scott Main7fb538c2011-01-19 21:11:50 -0800144fragments as they are changed and allowing the user to navigate backward through the different
145states</li>
146 <li>By <a
147href="{@docRoot}guide/topics/resources/providing-resources.html#AlternativeResources">providing
Scott Main7afdaf02011-01-25 13:03:30 -0800148alternative layouts</a>, you can mix and match fragments, based
Scott Main7fb538c2011-01-19 21:11:50 -0800149on the screen size and orientation</li>
150 <li>Fragments have direct access to their container activity and can contribute items to the
151activity's Action Bar (discussed next)</li>
152</ul>
153
154<p>To manage the fragments in your activity, you must use the {@link
155android.app.FragmentManager}, which provides several APIs for interacting with fragments, such
Scott Mainea723292011-02-09 16:01:04 -0800156as finding fragments in the activity and popping fragments off the back stack to restore their
157previous state.</p>
Scott Main7fb538c2011-01-19 21:11:50 -0800158
Scott Main7afdaf02011-01-25 13:03:30 -0800159<p>To perform a transaction, such as add or remove a fragment, you must create a {@link
Scott Main7fb538c2011-01-19 21:11:50 -0800160android.app.FragmentTransaction}. You can then call methods such as {@link
161android.app.FragmentTransaction#add add()} {@link android.app.FragmentTransaction#remove
Scott Main7afdaf02011-01-25 13:03:30 -0800162remove()}, or {@link android.app.FragmentTransaction#replace replace()}. Once you've applied all
Scott Main7fb538c2011-01-19 21:11:50 -0800163the changes you want to perform for the transaction, you must call {@link
Scott Main7afdaf02011-01-25 13:03:30 -0800164android.app.FragmentTransaction#commit commit()} and the system applies the fragment transaction to
Scott Main7fb538c2011-01-19 21:11:50 -0800165the activity.</p>
166
Scott Main7afdaf02011-01-25 13:03:30 -0800167<p>For more information about using fragments, read the <a
Scott Main64b12ea2011-02-14 13:41:03 -0800168href="{@docRoot}guide/topics/fundamentals/fragments.html">Fragments</a> documentation. Several
169samples are also available in the <a
170href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/index.html#Fragment">
171API Demos</a> application.</p>
Scott Main7fb538c2011-01-19 21:11:50 -0800172
173
174
175
176<h3>Action Bar</h3>
177
Scott Main7afdaf02011-01-25 13:03:30 -0800178<p>The Action Bar is a replacement for the traditional title bar at the top of the activity window.
179It includes the application logo in the left corner and provides a new interface for items in the
Scott Mainea723292011-02-09 16:01:04 -0800180<a href="{@docRoot}guide/topics/ui/menus.html#options-menu">Options Menu</a>. Additionally, the
181Action Bar allows you to:</p>
Scott Main7fb538c2011-01-19 21:11:50 -0800182
183<ul>
Scott Mainea723292011-02-09 16:01:04 -0800184 <li>Add menu items directly in the Action Bar&mdash;as "action items."
185 <p>In your XML declaration for the menu item, include the {@code
186android:showAsAction} attribute with a value of {@code "ifRoom"}. When there's enough room, the menu
187item appears directly in the Action Bar. Otherwise, the item is placed in the
188overflow menu, revealed by the menu icon on the right side of the Action Bar.</p></li>
Scott Main7afdaf02011-01-25 13:03:30 -0800189
Scott Mainea723292011-02-09 16:01:04 -0800190 <li>Replace an action item with a widget (such as a search box)&mdash;creating an
191"action view."
192 <p>In the XML declaration for the menu item, add the {@code android:actionViewLayout} attribute
193with a layout resource or the {@code android:actionViewClass} attribute with the class name of a
194widget. (You must also declare the {@code android:showAsAction} attribute so that the item appears
195in the Action Bar.) If there's not enough room in the Action Bar and the item appears in the
196overflow menu, it behaves like a regular menu item and does not show the widget.</p></li>
Scott Main7afdaf02011-01-25 13:03:30 -0800197
Scott Mainea723292011-02-09 16:01:04 -0800198 <li>Add an action to the application logo and replace it with a custom logo
Scott Main7fb538c2011-01-19 21:11:50 -0800199 <p>The application logo is automatically assigned the {@code android.R.id.home} ID,
Scott Mainea723292011-02-09 16:01:04 -0800200which the system delivers to your activity's {@link android.app.Activity#onOptionsItemSelected
201onOptionsItemSelected()} callback when touched. Simply respond to this ID in your callback
Scott Main7fb538c2011-01-19 21:11:50 -0800202method to perform an action such as go to your application's "home" activity.</p>
Scott Mainea723292011-02-09 16:01:04 -0800203 <p>To replace the icon with a logo, specify your application logo in the manifest file with the
204<a href="{@docRoot}guide/topics/manifest/application-element.html#logo">{@code android:logo}</a>
205attribute, then call {@link android.app.ActionBar#setDisplayUseLogoEnabled
206setDisplayUseLogoEnabled(true)} in your activity.</p></li>
Scott Main7afdaf02011-01-25 13:03:30 -0800207
Scott Mainea723292011-02-09 16:01:04 -0800208 <li>Add breadcrumbs to navigate backward through the back stack of fragments</li>
209 <li>Add tabs or a drop-down list to navigate through fragments</li>
210 <li>Customize the Action Bar with themes and backgrounds</li>
Scott Main7fb538c2011-01-19 21:11:50 -0800211</ul>
212
Scott Mainea723292011-02-09 16:01:04 -0800213<p>The Action Bar is standard for all applications that use the new holographic theme, which is
214also standard when you set either the <a
Scott Main7fb538c2011-01-19 21:11:50 -0800215href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code
216android:minSdkVersion}</a> or <a
217href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code
Scott Mainea723292011-02-09 16:01:04 -0800218android:targetSdkVersion}</a> to {@code "11"}.</p>
Scott Main7fb538c2011-01-19 21:11:50 -0800219
Scott Main7afdaf02011-01-25 13:03:30 -0800220<p>For more information about the Action Bar, read the <a
Scott Main64b12ea2011-02-14 13:41:03 -0800221href="{@docRoot}guide/topics/ui/actionbar.html">Action Bar</a> documentation. Several
222samples are also available in the <a
223href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/index.html#ActionBar">
224API Demos</a> application.</p>
Scott Main7fb538c2011-01-19 21:11:50 -0800225
226
227
228
229<h3>System clipboard</h3>
230
231<p>Applications can now copy and paste data (beyond mere text) to and from the system-wide
232clipboard. Clipped data can be plain text, a URI, or an intent.</p>
233
Scott Mainea723292011-02-09 16:01:04 -0800234<p>By providing the system access to the data you want the user to copy, through a content provider,
235the user can copy complex content (such as an image or data structure) from your application and
236paste it into another application that supports that type of content.</p>
Scott Main7fb538c2011-01-19 21:11:50 -0800237
238<p>To start using the clipboard, get the global {@link android.content.ClipboardManager} object
239by calling {@link android.content.Context#getSystemService getSystemService(CLIPBOARD_SERVICE)}.</p>
240
Scott Mainea723292011-02-09 16:01:04 -0800241<p>To copy an item to the clipboard, you need to create a new {@link
Scott Main7fb538c2011-01-19 21:11:50 -0800242android.content.ClipData} object, which holds one or more {@link android.content.ClipData.Item}
Scott Mainea723292011-02-09 16:01:04 -0800243objects, each describing a single entity. To create a {@link android.content.ClipData} object
244containing just one {@link android.content.ClipData.Item}, you can use one of the helper methods,
245such as {@link android.content.ClipData#newPlainText newPlainText()}, {@link
Scott Main7fb538c2011-01-19 21:11:50 -0800246android.content.ClipData#newUri newUri()}, and {@link android.content.ClipData#newIntent
247newIntent()}, which each return a {@link android.content.ClipData} object pre-loaded with the
Scott Mainea723292011-02-09 16:01:04 -0800248{@link android.content.ClipData.Item} you provide.</p>
Scott Main7fb538c2011-01-19 21:11:50 -0800249
250<p>To add the {@link android.content.ClipData} to the clipboard, pass it to {@link
251android.content.ClipboardManager#setPrimaryClip setPrimaryClip()} for your instance of {@link
252android.content.ClipboardManager}.</p>
253
Scott Mainea723292011-02-09 16:01:04 -0800254<p>You can then read a file from the clipboard (in order to paste it) by calling {@link
Scott Main7fb538c2011-01-19 21:11:50 -0800255android.content.ClipboardManager#getPrimaryClip()} on the {@link
256android.content.ClipboardManager}. Handling the {@link android.content.ClipData} you receive can
Scott Mainea723292011-02-09 16:01:04 -0800257be complicated and you need to be sure you can actually handle the data type in the clipboard
258before attempting to paste it.</p>
259
260<p>The clipboard holds only one piece of clipped data (a {@link android.content.ClipData}
261object) at a time, but one {@link android.content.ClipData} can contain multiple {@link
262android.content.ClipData.Item}s.</p>
Scott Main7fb538c2011-01-19 21:11:50 -0800263
Scott Main64b12ea2011-02-14 13:41:03 -0800264<p>For more information, read the <a href="{@docRoot}guide/topics/clipboard/copy-paste.html">Copy
265and Paste</a> documentation. You can also see a simple implementation of copy and paste in the <a
Scott Maincd1b08e2011-12-27 16:22:27 -0800266href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/content/ClipboardSample.html">API Demos</a>
267and a more complete implementation in the <a
Scott Main64b12ea2011-02-14 13:41:03 -0800268href="{@docRoot}resources/samples/NotePad/index.html">Note Pad</a> application.</p>
Scott Main7fb538c2011-01-19 21:11:50 -0800269
270
271
272
273<h3>Drag and drop</h3>
274
Scott Mainea723292011-02-09 16:01:04 -0800275<p>New APIs simplify drag and drop operations in your application's user interface. A drag
276operation is the transfer of some kind of data&mdash;carried in a {@link android.content.ClipData}
277object&mdash;from one place to another. The start and end point for the drag operation is a {@link
278android.view.View}, so the APIs that directly handle the drag and drop operations are
279in the {@link android.view.View} class.</p>
280
281<p>A drag and drop operation has a lifecycle that's defined by several drag actions&mdash;each
282defined by a {@link android.view.DragEvent} object&mdash;such as {@link
283android.view.DragEvent#ACTION_DRAG_STARTED}, {@link android.view.DragEvent#ACTION_DRAG_ENTERED}, and
284{@link android.view.DragEvent#ACTION_DROP}. Each view that wants to participate in a drag
285operation can listen for these actions.</p>
Scott Main7fb538c2011-01-19 21:11:50 -0800286
Scott Maind41ff8e2011-01-21 14:51:33 -0800287<p>To begin dragging content in your activity, call {@link android.view.View#startDrag startDrag()}
288on a {@link android.view.View}, providing a {@link android.content.ClipData} object that represents
Scott Mainea723292011-02-09 16:01:04 -0800289the data to drag, a {@link android.view.View.DragShadowBuilder} to facilitate the "shadow"
290that users see under their fingers while dragging, and an {@link java.lang.Object} that can share
291information about the drag object with views that may receive the object.</p>
Scott Main7fb538c2011-01-19 21:11:50 -0800292
Scott Mainea723292011-02-09 16:01:04 -0800293<p>To accept a drag object in a {@link android.view.View} (receive the "drop"), register the view
294with an {@link android.view.View.OnDragListener OnDragListener} by calling {@link
295android.view.View#setOnDragListener setOnDragListener()}. When a drag event occurs on the view, the
296system calls {@link android.view.View.OnDragListener#onDrag onDrag()} for the {@link
Scott Main7afdaf02011-01-25 13:03:30 -0800297android.view.View.OnDragListener OnDragListener}, which receives a {@link android.view.DragEvent}
Scott Mainea723292011-02-09 16:01:04 -0800298describing the type of drag action has occurred (such as {@link
299android.view.DragEvent#ACTION_DRAG_STARTED}, {@link android.view.DragEvent#ACTION_DRAG_ENTERED}, and
300{@link android.view.DragEvent#ACTION_DROP}). During a drag, the system repeatedly calls {@link
301android.view.View.OnDragListener#onDrag onDrag()} for the view underneath the drag, to deliver a
302stream of drag events. The receiving view can inquire the event type delivered to {@link
303android.view.View#onDragEvent onDragEvent()} by calling {@link android.view.DragEvent#getAction
304getAction()} on the {@link android.view.DragEvent}.</p>
Scott Main7fb538c2011-01-19 21:11:50 -0800305
Scott Mainea723292011-02-09 16:01:04 -0800306<p class="note"><strong>Note:</strong> Although a drag event may carry a {@link
307android.content.ClipData} object, this is not related to the system clipboard. A drag and drop
308operation should never put the dragged data in the system clipboard.</p>
Scott Main7fb538c2011-01-19 21:11:50 -0800309
Scott Main64b12ea2011-02-14 13:41:03 -0800310<p>For more information, read the <a href="{@docRoot}guide/topics/ui/drag-drop.html">Dragging and
311Dropping</a> documentation. You can also see an implementation of drag and drop in the <a
312href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/DragAndDropDemo.html">
313API Demos</a> application and the <a
314href="{@docRoot}resources/samples/HoneycombGallery/index.html">Honeycomb Gallery</a>
315application.</p>
316
Scott Main7fb538c2011-01-19 21:11:50 -0800317
318
Scott Maind41ff8e2011-01-21 14:51:33 -0800319<h3>App widgets</h3>
Scott Main7fb538c2011-01-19 21:11:50 -0800320
Scott Mainea723292011-02-09 16:01:04 -0800321<p>Android 3.0 supports several new widget classes for more interactive app widgets on the users
322Home screen, including: {@link android.widget.GridView}, {@link android.widget.ListView}, {@link
323android.widget.StackView}, {@link android.widget.ViewFlipper}, and {@link
324android.widget.AdapterViewFlipper}.</p>
Scott Main7fb538c2011-01-19 21:11:50 -0800325
Scott Mainea723292011-02-09 16:01:04 -0800326<p>More importantly, you can use the new {@link android.widget.RemoteViewsService} to create app
327widgets with collections, using widgets such as {@link android.widget.GridView}, {@link
328android.widget.ListView}, and {@link android.widget.StackView} that are backed by remote data,
329such as from a content provider.</p>
Scott Main7fb538c2011-01-19 21:11:50 -0800330
Scott Main5a44efb2011-02-15 10:45:46 -0800331<p>The {@link android.appwidget.AppWidgetProviderInfo} class (defined in XML with an {@code
332&lt;appwidget-provider&gt;} element) also supports two new fields: {@link
Scott Maind41ff8e2011-01-21 14:51:33 -0800333android.appwidget.AppWidgetProviderInfo#autoAdvanceViewId} and {@link
334android.appwidget.AppWidgetProviderInfo#previewImage}. The {@link
Scott Main7fb538c2011-01-19 21:11:50 -0800335android.appwidget.AppWidgetProviderInfo#autoAdvanceViewId} field lets you specify the view ID of the
Scott Mainea723292011-02-09 16:01:04 -0800336app widget subview that should be auto-advanced by the app widget’s host. The
Scott Main7fb538c2011-01-19 21:11:50 -0800337{@link android.appwidget.AppWidgetProviderInfo#previewImage} field specifies a preview of what the
Scott Main7afdaf02011-01-25 13:03:30 -0800338app widget looks like and is shown to the user from the widget picker. If this field is not
Scott Main7fb538c2011-01-19 21:11:50 -0800339supplied, the app widget's icon is used for the preview.</p>
340
Scott Mainea723292011-02-09 16:01:04 -0800341<p>To help create a preview image for your app widget (to specify in the {@link
Scott Main48c187f2011-04-21 17:22:54 -0700342android.appwidget.AppWidgetProviderInfo#previewImage} field), the Android emulator includes an
Scott Mainea723292011-02-09 16:01:04 -0800343application called "Widget Preview." To create a preview image, launch this application, select the
344app widget for your application and set it up how you'd like your preview image to appear, then save
345it and place it in your application's drawable resources.</p>
Scott Main7fb538c2011-01-19 21:11:50 -0800346
Scott Main64b12ea2011-02-14 13:41:03 -0800347<p>You can see an implementation of the new app widget features in the <a
348href="{@docRoot}resources/samples/StackWidget/index.html">StackView App Widget</a> and <a
349href="{@docRoot}resources/samples/WeatherListWidget/index.html">Weather List Widget</a>
350applications.</p>
Scott Main7fb538c2011-01-19 21:11:50 -0800351
352
353
Scott Maind41ff8e2011-01-21 14:51:33 -0800354<h3>Status bar notifications</h3>
Scott Main7fb538c2011-01-19 21:11:50 -0800355
356<p>The {@link android.app.Notification} APIs have been extended to support more content-rich status
357bar notifications, plus a new {@link android.app.Notification.Builder} class allows you to easily
Scott Mainea723292011-02-09 16:01:04 -0800358create {@link android.app.Notification} objects.</p>
Scott Main7afdaf02011-01-25 13:03:30 -0800359<p>New features include:</p>
Scott Main7fb538c2011-01-19 21:11:50 -0800360<ul>
Scott Main7afdaf02011-01-25 13:03:30 -0800361 <li>Support for a large icon in the notification, using {@link
362android.app.Notification.Builder#setLargeIcon setLargeIcon()}. This is usually for
Scott Main7fb538c2011-01-19 21:11:50 -0800363social applications to show the contact photo of the person who is the source of the
Scott Main7afdaf02011-01-25 13:03:30 -0800364notification or for media apps to show an album thumbnail.</li>
Scott Main7fb538c2011-01-19 21:11:50 -0800365 <li>Support for custom layouts in the status bar ticker, using {@link
366android.app.Notification.Builder#setTicker(CharSequence,RemoteViews) setTicker()}.</li>
367 <li>Support for custom notification layouts to include buttons with {@link
Scott Mainea723292011-02-09 16:01:04 -0800368android.app.PendingIntent}s, for more interactive notification widgets. For example, a
369notification can control music playback without starting an activity.</li>
Scott Main7fb538c2011-01-19 21:11:50 -0800370</ul>
371
372
373
Scott Maind41ff8e2011-01-21 14:51:33 -0800374<h3>Content loaders</h3>
Scott Main7fb538c2011-01-19 21:11:50 -0800375
Scott Maind41ff8e2011-01-21 14:51:33 -0800376<p>New framework APIs facilitate asynchronous loading of data using the {@link
377android.content.Loader} class. You can use it in combination with UI components such as views and
Scott Main7afdaf02011-01-25 13:03:30 -0800378fragments to dynamically load data from worker threads. The {@link
Scott Mainea723292011-02-09 16:01:04 -0800379android.content.CursorLoader} subclass is specially designed to help you do so for data backed by
380a {@link android.content.ContentProvider}.</p>
Scott Maind41ff8e2011-01-21 14:51:33 -0800381
Scott Mainea723292011-02-09 16:01:04 -0800382<p>All you need to do is implement the {@link android.app.LoaderManager.LoaderCallbacks
383LoaderCallbacks} interface to receive callbacks when a new loader is requested or the data has
384changed, then call {@link android.app.LoaderManager#initLoader initLoader()} to initialize the
385loader for your activity or fragment.</p>
Scott Maind41ff8e2011-01-21 14:51:33 -0800386
Scott Main64b12ea2011-02-14 13:41:03 -0800387<p>For more information, read the <a
Scott Maina5647452011-02-15 17:25:26 -0800388href="{@docRoot}guide/topics/fundamentals/loaders.html">Loaders</a> documentation. You can also see
Scott Main64b12ea2011-02-14 13:41:03 -0800389example code using loaders in the <a
Scott Maincd1b08e2011-12-27 16:22:27 -0800390href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderCursor.html">LoaderCursor</a>
Scott Main13033ea2011-02-15 13:18:30 -0800391and <a
Scott Main64b12ea2011-02-14 13:41:03 -0800392href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderThrottle.html">
393LoaderThrottle</a> samples.</p>
Scott Maind41ff8e2011-01-21 14:51:33 -0800394
395
396
397<h3>Bluetooth A2DP and headset APIs</h3>
398
399<p>Android now includes APIs for applications to verify the state of connected Bluetooth A2DP and
Scott Main7afdaf02011-01-25 13:03:30 -0800400headset profile devices. For example, applications can identify when a Bluetooth headset is
401connected for listening to music and notify the user as appropriate. Applications can also receive
402broadcasts for vendor specific AT commands and notify the user about the state of the connected
403device, such as when the connected device's battery is low.</p>
404
405<p>You can initialize the respective {@link android.bluetooth.BluetoothProfile} by calling {@link
Scott Maind41ff8e2011-01-21 14:51:33 -0800406android.bluetooth.BluetoothAdapter#getProfileProxy getProfileProxy()} with either the {@link
407android.bluetooth.BluetoothProfile#A2DP} or {@link android.bluetooth.BluetoothProfile#HEADSET}
408profile constant and a {@link android.bluetooth.BluetoothProfile.ServiceListener} to receive
Scott Main7afdaf02011-01-25 13:03:30 -0800409callbacks when the Bluetooth client is connected or disconnected.</p>
Scott Maind41ff8e2011-01-21 14:51:33 -0800410
411
412
413
Scott Mainea723292011-02-09 16:01:04 -0800414<h3 id="animation">Animation framework</h3>
Scott Maind41ff8e2011-01-21 14:51:33 -0800415
Scott Main7afdaf02011-01-25 13:03:30 -0800416<p>An all new flexible animation framework allows you to animate arbitrary properties of any object
Scott Mainea723292011-02-09 16:01:04 -0800417(View, Drawable, Fragment, Object, or anything else). It allows you to define several aspects of an
Scott Main7afdaf02011-01-25 13:03:30 -0800418animation, such as:</p>
Scott Main7fb538c2011-01-19 21:11:50 -0800419<ul>
420 <li>Duration</li>
421 <li>Repeat amount and behavior</li>
422 <li>Type of time interpolation</li>
423 <li>Animator sets to play animations together, sequentially, or after specified delays</li>
424 <li>Frame refresh delay</li>
425</ul>
Scott Main7fb538c2011-01-19 21:11:50 -0800426
Scott Mainea723292011-02-09 16:01:04 -0800427 <p>You can define these animation aspects, and others, for an object's int, float, and hexadecimal
428color values, by default. That is, when an object has a property field for one of these types, you
429can change its value over time to affect an animation. To animate any other type of value, you tell
430the system how to calculate the values for that given type, by implementing the {@link
431android.animation.TypeEvaluator} interface.</p>
432
433<p>There are two animators you can use to animate the values of a property: {@link
Scott Main7fb538c2011-01-19 21:11:50 -0800434android.animation.ValueAnimator} and {@link android.animation.ObjectAnimator}. The {@link
435android.animation.ValueAnimator} computes the animation values, but is not aware of the specific
436object or property that is animated as a result. It simply performs the calculations, and you must
437listen for the updates and process the data with your own logic. The {@link
438android.animation.ObjectAnimator} is a subclass of {@link android.animation.ValueAnimator} and
Scott Maind41ff8e2011-01-21 14:51:33 -0800439allows you to set the object and property to animate, and it handles all animation work.
440That is, you give the {@link android.animation.ObjectAnimator} the object to animate, the
441property of the object to change over time, and a set of values to apply to the property over
Scott Mainea723292011-02-09 16:01:04 -0800442time, then start the animation.</p>
Scott Maind41ff8e2011-01-21 14:51:33 -0800443
444<p>Additionally, the {@link android.animation.LayoutTransition} class enables automatic transition
Scott Main7afdaf02011-01-25 13:03:30 -0800445animations for changes you make to your activity layout. To enable transitions for part of the
446layout, create a {@link android.animation.LayoutTransition} object and set it on
Scott Maind41ff8e2011-01-21 14:51:33 -0800447any {@link android.view.ViewGroup} by calling {@link
448android.view.ViewGroup#setLayoutTransition setLayoutTransition()}. This causes default
449animations to run whenever items are added to or removed from the group. To specify custom
450animations, call {@link android.animation.LayoutTransition#setAnimator setAnimator()} on the {@link
Scott Main7afdaf02011-01-25 13:03:30 -0800451android.animation.LayoutTransition} and provide a custom {@link android.animation.Animator},
Scott Maind41ff8e2011-01-21 14:51:33 -0800452such as a {@link android.animation.ValueAnimator} or {@link android.animation.ObjectAnimator}
453discussed above.</p>
Scott Main7fb538c2011-01-19 21:11:50 -0800454
455<p>For more information, see the <a
Scott Main64b12ea2011-02-14 13:41:03 -0800456href="{@docRoot}guide/topics/graphics/animation.html">Property Animation</a> documentation. You can
457also see several samples using the animation APIs in the <a
458href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/animation/index.html">API
459Demos</a> application.</p>
Scott Main7fb538c2011-01-19 21:11:50 -0800460
461
462
463
Scott Maind41ff8e2011-01-21 14:51:33 -0800464<h3>Extended UI framework</h3>
Scott Main7fb538c2011-01-19 21:11:50 -0800465
466<ul>
467
Scott Maind41ff8e2011-01-21 14:51:33 -0800468 <li><b>Multiple-choice selection for ListView and GridView</b>
Scott Main7fb538c2011-01-19 21:11:50 -0800469
Scott Maind41ff8e2011-01-21 14:51:33 -0800470<p>New {@link android.widget.AbsListView#CHOICE_MODE_MULTIPLE_MODAL} mode for {@link
Scott Mainea723292011-02-09 16:01:04 -0800471android.widget.AbsListView#setChoiceMode setChoiceMode()} allows users to select multiple items
472from a {@link android.widget.ListView} or {@link android.widget.GridView}. When used in
473conjunction with the Action Bar, users can select multiple items and then select the action to
474perform from a list of options in the Action Bar (which has transformed into a Multi-choice
475Action Mode).</p>
Scott Main7fb538c2011-01-19 21:11:50 -0800476
Scott Maind41ff8e2011-01-21 14:51:33 -0800477<p>To enable multiple-choice selection, call {@link
478android.widget.AbsListView#setChoiceMode setChoiceMode(CHOICE_MODE_MULTIPLE_MODAL)} and register a
479{@link android.widget.AbsListView.MultiChoiceModeListener MultiChoiceModeListener} with {@link
480android.widget.AbsListView#setMultiChoiceModeListener setMultiChoiceModeListener()}.</p>
Scott Main7fb538c2011-01-19 21:11:50 -0800481
Scott Maind41ff8e2011-01-21 14:51:33 -0800482<p>When the user performs a long-press on an item, the Action Bar switches to the Multi-choice
483Action Mode. The system notifies the {@link android.widget.AbsListView.MultiChoiceModeListener
484MultiChoiceModeListener} when items are selected by calling {@link
485android.widget.AbsListView.MultiChoiceModeListener#onItemCheckedStateChanged
486onItemCheckedStateChanged()}.</p>
Scott Main7fb538c2011-01-19 21:11:50 -0800487
Scott Maind41ff8e2011-01-21 14:51:33 -0800488<p>For an example of multiple-choice selection, see the <a
489href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/List15.html">List15.
490java</a>
491class in the API Demos sample application.</p>
492 </li>
Scott Main7fb538c2011-01-19 21:11:50 -0800493
Scott Maind41ff8e2011-01-21 14:51:33 -0800494
495 <li><b>New APIs to transform views</b>
496
Scott Mainea723292011-02-09 16:01:04 -0800497 <p>New APIs allow you to easily apply 2D and 3D transformations to views in your activity
498layout. New transformations are made possible with a set of object properties that define the view's
Scott Maind41ff8e2011-01-21 14:51:33 -0800499layout position, orientation, transparency and more.</p>
Scott Mainea723292011-02-09 16:01:04 -0800500 <p>New methods to set the view properties include: {@link android.view.View#setAlpha
501setAlpha()}, {@link
Scott Maind41ff8e2011-01-21 14:51:33 -0800502android.view.View#setBottom setBottom()}, {@link android.view.View#setLeft setLeft()}, {@link
503android.view.View#setRight setRight()}, {@link android.view.View#setBottom setBottom()}, {@link
504android.view.View#setPivotX setPivotX()}, {@link android.view.View#setPivotY setPivotY()}, {@link
505android.view.View#setRotationX setRotationX()}, {@link android.view.View#setRotationY
506setRotationY()}, {@link android.view.View#setScaleX setScaleX()}, {@link android.view.View#setScaleY
507setScaleY()}, {@link android.view.View#setAlpha setAlpha()}, and others.</p>
Scott Main7fb538c2011-01-19 21:11:50 -0800508
Scott Maind41ff8e2011-01-21 14:51:33 -0800509 <p>Some methods also have a corresponding XML attribute that you can specify in your layout
Scott Mainea723292011-02-09 16:01:04 -0800510file, to apply a default transformation. Available attributes include: {@code translationX}, {@code
511translationY}, {@code rotation},
Scott Maind41ff8e2011-01-21 14:51:33 -0800512{@code rotationX}, {@code rotationY}, {@code scaleX}, {@code scaleY}, {@code transformPivotX},
513{@code transformPivotY}, and {@code alpha}.</p>
Scott Main7fb538c2011-01-19 21:11:50 -0800514
Scott Mainea723292011-02-09 16:01:04 -0800515 <p>Using some of these new view properties in combination with the new <a
516href="#animation">animation framework</a> (discussed
517above), you can easily apply some fancy animations to your views. For example, to rotate a
Scott Maind41ff8e2011-01-21 14:51:33 -0800518view on its y-axis, supply {@link android.animation.ObjectAnimator} with the {@link
Scott Mainea723292011-02-09 16:01:04 -0800519android.view.View}, the "rotationY" property, and the start and end values:</p>
Scott Maind41ff8e2011-01-21 14:51:33 -0800520<pre>
521ObjectAnimator animator = ObjectAnimator.ofFloat(myView, "rotationY", 0, 360);
522animator.setDuration(2000);
523animator.start();
524</pre>
525 </li>
Scott Main7fb538c2011-01-19 21:11:50 -0800526
Scott Maind41ff8e2011-01-21 14:51:33 -0800527
528 <li><b>New holographic themes</b>
Scott Main7fb538c2011-01-19 21:11:50 -0800529
Scott Mainea723292011-02-09 16:01:04 -0800530 <p>The standard system widgets and overall look have been redesigned and incorporate a new
531"holographic" user interface theme. The system applies the new theme
532using the standard <a href="{@docRoot}guide/topics/ui/themes.html">style and theme</a> system.</p>
533
534<p>Any application that targets the Android 3.0 platform&mdash;by setting either the <a
535href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code android:minSdkVersion}</a>
536or <a
537href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code
538android:targetSdkVersion}</a> value to {@code "11"}&mdash;inherits the holographic theme by default.
539However, if your application also applies its own theme, then your theme will override the
540holographic theme, unless you update your styles to inherit the holographic theme.</p>
Scott Main7fb538c2011-01-19 21:11:50 -0800541
542<p>To apply the holographic theme to individual activities or to inherit them in your own theme
Scott Main7afdaf02011-01-25 13:03:30 -0800543definitions, use one of several new {@link android.R.style#Theme_Holo Theme.Holo}
Scott Mainea723292011-02-09 16:01:04 -0800544themes. If your application is compatible with version of Android lower than 3.0 and applies
545custom themes, then you should <a
546href="{@docRoot}guide/topics/ui/themes.html#SelectATheme">select a theme based on platform
547version</a>.</p>
548
Scott Maind41ff8e2011-01-21 14:51:33 -0800549 </li>
550
551
552 <li><b>New widgets</b>
553
554 <ul>
555 <li>{@link android.widget.AdapterViewAnimator}
556 <p>Base class for an {@link android.widget.AdapterView} that performs animations when switching
557 between its views.</p></li>
558
559 <li>{@link android.widget.AdapterViewFlipper}
560 <p>Simple {@link android.widget.ViewAnimator} that animates between two or more views that have
561 been added to it. Only one child is shown at a time. If requested, it can automatically flip
562 between
563 each child at a regular interval.</p></li>
564
565 <li>{@link android.widget.CalendarView}
Scott Mainea723292011-02-09 16:01:04 -0800566 <p>Allows users to select dates from a calendar by touching the date and can scroll or fling the
567calendar to a desired date. You can configure the range of dates available in the widget.</p></li>
Scott Maind41ff8e2011-01-21 14:51:33 -0800568
569 <li>{@link android.widget.ListPopupWindow}
570 <p>Anchors itself to a host view and displays a list of choices, such as for a list of
571 suggestions when typing into an {@link android.widget.EditText} view.</p></li>
572
573 <li>{@link android.widget.NumberPicker}
Scott Mainea723292011-02-09 16:01:04 -0800574 <p>Enables the user to select a number from a predefined range. The widget presents an input
575field and up and down buttons for selecting a number. Touching the input field allows the user to
576scroll through values or touch again to directly edit the current value. It also allows you to map
577positions to strings, so that the corresponding string is displayed instead of the index
578position.</p></li>
Scott Maind41ff8e2011-01-21 14:51:33 -0800579
580 <li>{@link android.widget.PopupMenu}
581 <p>Displays a {@link android.view.Menu} in a modal popup window that's anchored to a view. The
Scott Mainea723292011-02-09 16:01:04 -0800582popup appears below the anchor view if there is room, or above it if there is not. If the IME (soft
583keyboard) is visible, the popup does not overlap the IME it until the user touches the
584menu.</p></li>
Scott Maind41ff8e2011-01-21 14:51:33 -0800585
586 <li>{@link android.widget.SearchView}
Scott Mainabdf0d52011-02-08 10:20:27 -0800587 <p>Provides a search box that you can configure to deliver search queries to a specified
588activity and display search suggestions (in the same manner as the traditional search dialog). This
589widget is particularly useful for offering a search widget in the Action Bar. For more information,
Dirk Doughertyb7c7f152011-03-25 11:54:46 -0700590see <a href="{@docRoot}guide/topics/search/search-dialog.html">Creating a Search Interface.</p></li>
Scott Maind41ff8e2011-01-21 14:51:33 -0800591
592 <li>{@link android.widget.StackView}
Scott Mainea723292011-02-09 16:01:04 -0800593 <p>A view that displays its children in a 3D stack and allows users to swipe through
594 views like a rolodex.</p></li>
Scott Maind41ff8e2011-01-21 14:51:33 -0800595
596 </ul>
597 </li>
598
599</ul>
Scott Main7fb538c2011-01-19 21:11:50 -0800600
601
602
Scott Main7fb538c2011-01-19 21:11:50 -0800603<h3>Graphics</h3>
604
605<ul>
Scott Maind41ff8e2011-01-21 14:51:33 -0800606 <li><b>Hardware accelerated 2D graphics</b>
Scott Main7fb538c2011-01-19 21:11:50 -0800607
608<p>You can now enable the OpenGL renderer for your application by setting {@code
609android:hardwareAccelerated="true"} in your manifest element's <a
610href="{@docRoot}guide/topics/manifest/application-element.html">{@code &lt;application&gt;}</a>
611element or for individual <a
612href="{@docRoot}guide/topics/manifest/activity-element.html">{@code &lt;activity&gt;}</a>
613elements.</p>
614
615<p>This flag helps applications by making them draw faster. This results in smoother animations,
616smoother scrolling, and overall better performance and response to user interaction.</p></li>
617
Scott Maind41ff8e2011-01-21 14:51:33 -0800618
619 <li><b>View support for hardware and software layers</b>
620
621 <p>By default, a {@link android.view.View} has no layer specified. You can specify that the
622view be backed by either a hardware or software layer, specified by values {@link
623android.view.View#LAYER_TYPE_HARDWARE} and {@link android.view.View#LAYER_TYPE_SOFTWARE}, using
624{@link android.view.View#setLayerType setLayerType()} or the <a
625href="{@docRoot}reference/android/view/View.html#attr_android:layerType">{@code layerType}</a>
626attribute.</p>
627 <p>A hardware layer is backed by a hardware specific texture (generally Frame Buffer Objects or
628FBO on OpenGL hardware) and causes the view to be rendered using Android's hardware rendering
629pipeline, but only if hardware acceleration is turned on for the view hierarchy. When hardware
630acceleration is turned off, hardware layers behave exactly as software layers.</p>
631 <p>A software layer is backed by a bitmap and causes the view to be rendered using Android's
632software rendering pipeline, even if hardware acceleration is enabled. Software layers should be
633avoided when the affected view tree updates often. Every update will require to re-render the
634software layer, which can potentially be slow.</p>
635 <p>For more information, see the {@link android.view.View#LAYER_TYPE_HARDWARE} and {@link
636android.view.View#LAYER_TYPE_SOFTWARE} documentation.</p>
637 </li>
638
639
640 <li><b>Renderscript 3D graphics engine</b>
Scott Main7fb538c2011-01-19 21:11:50 -0800641
642<p>Renderscript is a runtime 3D framework that provides both an API for building 3D scenes as well
643as a special, platform-independent shader language for maximum performance. Using Renderscript, you
644can accelerate graphics operations and data processing. Renderscript is an ideal way to create
Scott Main64b12ea2011-02-14 13:41:03 -0800645high-performance 3D effects for applications, wallpapers, carousels, and more.</p>
646<p>For more information, see the <a
647href="{@docRoot}guide/topics/graphics/renderscript.html">3D Rendering and Computation with
648Renderscript</a> documentation.</p></li>
Scott Main7fb538c2011-01-19 21:11:50 -0800649</ul>
650
651
652
653
Scott Main7fb538c2011-01-19 21:11:50 -0800654<h3>Media</h3>
655
656
657<ul>
Scott Main7fb538c2011-01-19 21:11:50 -0800658
Scott Main7afdaf02011-01-25 13:03:30 -0800659 <li><b>Time lapse video</b>
Scott Main7fb538c2011-01-19 21:11:50 -0800660
661<p>Camcorder APIs now support the ability to record time lapse video. The {@link
662android.media.MediaRecorder#setCaptureRate setCaptureRate()} sets the rate at which frames
663should be captured.</p></li>
664
Scott Main7afdaf02011-01-25 13:03:30 -0800665 <li><b>Texture support for image streams</b>
666
667<p>New {@link android.graphics.SurfaceTexture} allows you to capture an image stream as an OpenGL ES
668texture. By calling {@link android.hardware.Camera#setPreviewTexture setPreviewTexture()} for your
669{@link android.hardware.Camera} instance, you can specify the {@link
670android.graphics.SurfaceTexture} upon which to draw video playback or preview frames from the
671camera.</p></li>
672
673 <li><b>HTTP Live streaming</b>
674
675<p>Applications can now pass an M3U playlist URL to the media framework to begin an HTTP Live
676streaming session. The media framework supports most of the HTTP Live streaming specification,
Scott Mainea723292011-02-09 16:01:04 -0800677including adaptive bit rate. See the <a
678href="{@docRoot}guide/appendix/media-formats.html">Supported Media Formats</a> document for
679more information.</p></li>
Scott Main7afdaf02011-01-25 13:03:30 -0800680
681 <li><b>EXIF data</b>
682
683<p>The {@link android.media.ExifInterface} includes new fields for photo aperture, ISO, and exposure
684time.</p></li>
685
686 <li><b>Camcorder profiles</b>
687
688<p>New {@link android.media.CamcorderProfile#hasProfile hasProfile()} method and several video
689quality profiles (such as {@link android.media.CamcorderProfile#QUALITY_1080P}, {@link
690android.media.CamcorderProfile#QUALITY_720P}, {@link
691android.media.CamcorderProfile#QUALITY_CIF}, and others) allow you to determine camcorder
692quality options.</p></li>
693
Scott Maind41ff8e2011-01-21 14:51:33 -0800694 <li><b>Digital media file transfer</b>
Scott Main7fb538c2011-01-19 21:11:50 -0800695
696<p>The platform includes built-in support for Media/Picture Transfer Protocol (MTP/PTP) over USB,
697which lets users easily transfer any type of media files between devices and to a host computer.
698Developers can build on this support, creating applications that let users create or manage rich
699media files that they may want to transfer or share across devices. </p></li>
700
Scott Maind41ff8e2011-01-21 14:51:33 -0800701 <li><b>Digital rights management (DRM)</b>
Scott Main7fb538c2011-01-19 21:11:50 -0800702
703<p>New extensible digital rights management (DRM) framework for checking and enforcing digital
704rights. It's implemented in two architectural layers:</p>
705<ul>
706 <li>A DRM framework API, which is exposed to applications and runs through the Dalvik VM for
707standard applications.</li>
708 <li>A native code DRM manager that implements the framework API and exposes an interface for DRM
709plug-ins to handle rights management and decryption for various DRM schemes.</li>
710</ul>
711
712<p>For application developers, the framework offers an abstract, unified API that simplifies the
713management of protected content. The API hides the complexity of DRM operations and allows a
714consistent operation mode for both protected and unprotected content, and across a variety of DRM
715schemes.</p>
716
717<p>For device manufacturers, content owners, and Internet digital media providers the DRM
718framework?s plugin API provides a means of adding support for a DRM scheme of choice into the
719Android system, for secure enforcement of content protection.</p>
720
721<p>The preview release does not provide any native DRM plug-ins for checking and enforcing digital
722rights. However, device manufacturers may ship DRM plug-ins with their devices.</p>
723
724<p>You can find all of the DRM APIs in the {@link android.drm} package.</p></li>
725
726</ul>
727
728
729
Scott Mainea723292011-02-09 16:01:04 -0800730<h3>Keyboard support</h3>
731
732<ul>
733<li>Support for Control, Meta, Caps Lock, Num Lock and Scroll Lock modifiers. For more information,
734see {@link android.view.KeyEvent#META_CTRL_ON} and related fields.</li>
735
736<li>Support for full desktop-style keyboards, including support for keys such as Escape, Home, End,
737Delete and others. You can determine whether key events are coming from a full keyboard by
738querying {@link android.view.KeyCharacterMap#getKeyboardType()} and checking for {@link
739android.view.KeyCharacterMap#FULL KeyCharacterMap.FULL}</li>
740
741<li>{@link android.widget.TextView} now supports keyboard-based cut, copy, paste, and select-all,
742using the key combinations Ctrl+X, Ctrl+C, Ctrl+V, and Ctrl+A. It also supports PageUp/PageDown,
743Home/End, and keyboard-based text selection.</li>
744
745<li>{@link android.view.KeyEvent} adds several new methods to make it easier to check the key
746modifier state correctly and consistently. See {@link android.view.KeyEvent#hasModifiers(int)},
747{@link android.view.KeyEvent#hasNoModifiers()},
748{@link android.view.KeyEvent#metaStateHasModifiers(int,int) metaStateHasModifiers()},
749{@link android.view.KeyEvent#metaStateHasNoModifiers(int) metaStateHasNoModifiers()}.</li>
750
751<li>Applications can implement custom keyboard shortcuts by subclassing {@link
752android.app.Activity}, {@link android.app.Dialog}, or {@link android.view.View} and implementing
753{@link android.app.Activity#onKeyShortcut onKeyShortcut()}. The framework calls this method
754whenever a key is combined with Ctrl key. When creating an <a
755href="{@docRoot}guide/topics/ui/menus.html#options-menu">Options Menu</a>, you can register keyboard
756shortcuts by setting either the {@code android:alphabeticShortcut} or {@code
757android:numericShortcut} attribute for each <a
758href="{@docRoot}guide/topics/resources/menu-resource.html#item-element">{@code &lt;item&gt;}</a>
759element (or with {@link android.view.MenuItem#setShortcut setShortcut()}).</li>
760
761<li>Android 3.0 includes a new "virtual keyboard" device with the id {@link
762android.view.KeyCharacterMap#VIRTUAL_KEYBOARD KeyCharacterMap.VIRTUAL_KEYBOARD}. The virtual
763keyboard has a desktop-style US key map which is useful for synthesizing key events for testing
764input.</li>
765
766</ul>
767
768
769
770
771<h3>Split touch events</h3>
772
773<p>Previously, only a single view could accept touch events at one time. Android 3.0
774adds support for splitting touch events across views and even windows, so different views can accept
775simultaneous touch events.</p>
776
777<p>Split touch events is enabled by default when an application targets
778Android 3.0. That is, when the application has set either the <a
779href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code android:minSdkVersion}</a>
780or <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code
781android:targetSdkVersion}</a> attribute's value to {@code "11"}.</p>
782
Scott Mainc2299de2011-02-14 11:37:50 -0800783<p>However, the following properties allow you to disable split touch events across views inside
784specific view groups and across windows.</p>
Scott Mainea723292011-02-09 16:01:04 -0800785
786<ul>
787<li>The {@link android.R.attr#splitMotionEvents android:splitMotionEvents} attribute for view groups
Scott Mainc2299de2011-02-14 11:37:50 -0800788allows you to disable split touch events that occur between child views in a layout. For example:
Scott Mainea723292011-02-09 16:01:04 -0800789<pre>
790&lt;LinearLayout android:splitMotionEvents="false" ... >
791 ...
792&lt;/LinearLayout>
793</pre>
Scott Mainc2299de2011-02-14 11:37:50 -0800794<p>This way, child views in the linear layout cannot split touch events&mdash;only one view can
795receive touch events at a time.</p>
Scott Mainea723292011-02-09 16:01:04 -0800796</li>
797
798<li>The {@link android.R.attr#windowEnableSplitTouch android:windowEnableSplitTouch} style property
Scott Mainc2299de2011-02-14 11:37:50 -0800799allows you to disable split touch events across windows, by applying it to a theme for the activity
Scott Mainea723292011-02-09 16:01:04 -0800800or entire application. For example:
801<pre>
802&lt;style name="NoSplitMotionEvents" parent="android:Theme.Holo">
803 &lt;item name="android:windowEnableSplitTouch">false&lt;/item>
804 ...
805&lt;/style>
806</pre>
807<p>When this theme is applied to an <a
808href="{@docRoot}guide/topics/manifest/activity-element.html">{@code &lt;activity&gt;}</a> or <a
809href="{@docRoot}guide/topics/manifest/application-element.html">{@code &lt;application&gt;}</a>,
810only touch events within the current activity window are accepted. For example, by disabling split
811touch events across windows, the system bar cannot receive touch events at the same time as the
Scott Mainc2299de2011-02-14 11:37:50 -0800812activity. This does <em>not</em> affect whether views inside the activity can split touch
813events&mdash;by default, the activity can still split touch events across views.</p>
Scott Mainea723292011-02-09 16:01:04 -0800814
815<p>For more information about creating a theme, read <a
816href="{@docRoot}guide/topics/ui/themes.html">Applying Styles and Themes</a>.</p>
817</li>
818</ul>
819
820
821
822<h3>WebKit</h3>
823
824<ul>
825 <li>New {@link android.webkit.WebViewFragment} class to create a fragment composed of a
826{@link android.webkit.WebView}.</li>
827 <li>New {@link android.webkit.WebSettings} methods:
828 <ul>
829 <li>{@link
830android.webkit.WebSettings#setDisplayZoomControls setDisplayZoomControls()} allows you to hide
831the on-screen zoom controls while still allowing the user to zoom with finger gestures ({@link
832android.webkit.WebSettings#setBuiltInZoomControls setBuiltInZoomControls()} must be set
833{@code true}).</li>
834 <li>New {@link android.webkit.WebSettings} method, {@link
835android.webkit.WebSettings#setEnableSmoothTransition setEnableSmoothTransition()}, allows you
836to enable smooth transitions when panning and zooming. When enabled, WebView will choose a solution
837to maximize the performance (for example, the WebView's content may not update during the
838transition).</li>
839 </ul>
840 <li>New {@link android.webkit.WebView} methods:
841 <ul>
842 <li>{@link android.webkit.WebView#onPause onPause()} callback, to pause any processing
843associated with the WebView when it becomes hidden. This is useful to reduce unnecessary CPU or
844network traffic when the WebView is not in the foreground.</li>
845 <li>{@link android.webkit.WebView#onResume onResume()} callback, to resume processing
846associated with the WebView, which was paused during {@link android.webkit.WebView#onPause
847onPause()}.</li>
848 <li>{@link android.webkit.WebView#saveWebArchive saveWebArchive()} allows you to save the
849current view as a web archive on the device.</li>
850 <li>{@link android.webkit.WebView#showFindDialog showFindDialog()} initiates a text search in
851the current view.</li>
852 </ul>
853 </li>
854</ul>
855
856
857
858<h3>Browser</h3>
859
860<p>The Browser application adds the following features to support web applications:</p>
861
862<ul>
863 <li><b>Media capture</b>
864 <p>As defined by the <a href="http://dev.w3.org/2009/dap/camera/">HTML Media Capture</a>
865specification, the Browser allows web applications to access audio, image and video capture
866capabilities of the device. For example, the following HTML provides an input for the user to
867capture a photo to upload:</p>
868<pre>
869&lt;input type="file" accept="image/*;capture=camera" />
870</pre>
871<p>Or by excluding the {@code capture=camera} parameter, the user can choose to either capture a
872new image with the camera or select one from the device (such as from the Gallery application).</p>
873 </li>
874
875 <li><b>Device Orientation</b>
876 <p>As defined by the <a
877href="http://dev.w3.org/geo/api/spec-source-orientation.html">Device Orientation Event</a>
878specification, the Browser allows web applications to listen to DOM events that provide information
879about the physical orientation and motion of the device.</p>
880 <p>The device orientation is expressed with the x, y, and z axes, in degrees and motion is
881expressed with acceleration and rotation rate data. A web page can register for orientation
882events by calling {@code window.addEventListener} with event type {@code "deviceorientation"}
883and register for motion events by registering the {@code "devicemotion"} event type.</p>
884 </li>
885
886 <li><b>CSS 3D Transforms</b>
887 <p>As defined by the <a href="http://www.w3.org/TR/css3-3d-transforms/">CSS 3D Transform
888Module</a> specification, the Browser allows elements rendered by CSS to be transformed in three
889dimensions.</p>
890 </li>
891</ul>
892
893
894
895<h3>JSON utilities</h3>
896
897<p>New classes, {@link android.util.JsonReader} and {@link android.util.JsonWriter}, help you
Scott Main2788e4f2011-02-23 10:54:31 -0800898read and write JSON streams. The new APIs complement the {@link org.json} classes, which manipulate
899a document in memory.</p>
Scott Mainea723292011-02-09 16:01:04 -0800900
901<p>You can create an instance of {@link android.util.JsonReader} by calling
902its constructor method and passing the {@link java.io.InputStreamReader} that feeds the JSON string.
903Then begin reading an object by calling {@link android.util.JsonReader#beginObject()}, read a
904key name with {@link android.util.JsonReader#nextName()}, read the value using methods
905respective to the type, such as {@link android.util.JsonReader#nextString()} and {@link
906android.util.JsonReader#nextInt()}, and continue doing so while {@link
907android.util.JsonReader#hasNext()} is true.</p>
908
909<p>You can create an instance of {@link android.util.JsonWriter} by calling its constructor and
910passing the appropriate {@link java.io.OutputStreamWriter}. Then write the JSON data in a manner
911similar to the reader, using {@link android.util.JsonWriter#name name()} to add a property name
912and an appropriate {@link android.util.JsonWriter#value value()} method to add the respective
913value.</p>
914
915<p>These classes are strict by default. The {@link android.util.JsonReader#setLenient setLenient()}
916method in each class configures them to be more liberal in what they accept. This lenient
917parse mode is also compatible with the {@link org.json}'s default parser.</p>
918
919
920
921
922<h3>New feature constants</h3>
923
924<p>The <a
925href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code &lt;uses-feature&gt;}</a>
Dirk Dougherty4d7bc6552012-01-27 17:56:49 -0800926manfest element should be used to inform external entities (such as Google Play) of the set of
Scott Mainea723292011-02-09 16:01:04 -0800927hardware and software features on which your application depends. In this release, Android adds the
928following new constants that applications can declare with this element:</p>
929
930<ul>
931 <li>{@link android.content.pm.PackageManager#FEATURE_FAKETOUCH "android.hardware.faketouch"}
932 <p>When declared, this indicates that the application is compatible with a device that offers an
933emulated touchscreen (or better). A device that offers an emulated touchscreen provides a user input
934system that can emulate a subset of touchscreen
935capabilities. An example of such an input system is a mouse or remote control that drives an
936on-screen cursor. Such input systems support basic touch events like click down, click up, and drag.
937However, more complicated input types (such as gestures, flings, etc.) may be more difficult or
938impossible on faketouch devices (and multitouch gestures are definitely not possible).</p>
939 <p>If your application does <em>not</em> require complicated gestures and you do
940<em>not</em> want your application filtered from devices with an emulated touchscreen, you
941should declare {@link
942android.content.pm.PackageManager#FEATURE_FAKETOUCH "android.hardware.faketouch"} with a <a
943href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code &lt;uses-feature&gt;}</a>
944element. This way, your application will be available to the greatest number of device types,
945including those that provide only an emulated touchscreen input.</p>
946 <p>All devices that include a touchscreen also support {@link
947android.content.pm.PackageManager#FEATURE_FAKETOUCH "android.hardware.faketouch"}, because
948touchscreen capabilities are a superset of faketouch capabilities. Thus, unless you actually require
949a touchscreen, you should add a <a
950href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code &lt;uses-feature&gt;}</a>
951element for faketouch.</p>
952 </li>
953</ul>
954
955
956
957
958<h3>New permissions</h3>
959
960<ul>
961 <li>{@link android.Manifest.permission#BIND_REMOTEVIEWS
962"android.permission.BIND_REMOTEVIEWS"}
963 <p>This must be declared as a required permission in the <a
964href="{@docRoot}guide/topics/manifest/service-element.html">{@code &lt;service&gt;}</a> manifest
965element for an implementation of {@link android.widget.RemoteViewsService}. For example, when
966creating an App Widget that uses {@link android.widget.RemoteViewsService} to populate a
967collection view, the manifest entry may look like this:</p>
968<pre>
969&lt;service android:name=".widget.WidgetService"
970 android:exported="false"
971 android:permission="android.permission.BIND_REMOTEVIEWS" />
972</pre>
973</ul>
974
975
976
977<h3>New platform technologies</h3>
978
979<ul>
980<li><strong>Storage</strong>
981 <ul>
982 <li>ext4 file system support to enable onboard eMMC storage.</li>
983 <li>FUSE file system to support MTP devices.</li>
984 <li>USB host mode support to support keyboards and USB hubs.</li>
985 <li>Support for MTP/PTP </li>
986 </ul>
987</li>
988
989<li><strong>Linux Kernel</strong>
990 <ul>
991 <li>Upgraded to 2.6.36</li>
992 </ul>
993</li>
994
995<li><strong>Dalvik VM</strong>
996 <ul>
997 <li>New code to support and optimize for SMP</li>
998 <li>Various improvements to the JIT infrastructure</li>
999 <li>Garbage collector improvements:
1000 <ul>
1001 <li>Tuned for SMP</li>
1002 <li>Support for larger heap sizes</li>
1003 <li>Unified handling for bitmaps and byte buffers</li>
1004 </ul>
1005 </li>
1006 </ul>
1007</li>
1008
1009<li><strong>Dalvik Core Libraries</strong>
1010 <ul>
1011 <li>New, much faster implementation of NIO (modern I/O library)</li>
1012 <li>Improved exception messages</li>
1013 <li>Correctness and performance fixes throughout</li>
1014 </ul>
1015</li>
1016</ul>
1017
1018
1019
1020<h3 id="api-diff">API differences report</h3>
1021
1022<p>For a detailed view of all API changes in Android {@sdkPlatformVersion} (API Level
1023{@sdkPlatformApiLevel}), see the <a
1024href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API Differences Report</a>.</p>
Scott Main7fb538c2011-01-19 21:11:50 -08001025
1026
1027
1028
1029
1030<h2 id="api-level">API Level</h2>
1031
Scott Mainea723292011-02-09 16:01:04 -08001032<p>The Android {@sdkPlatformVersion} platform delivers an updated version of
1033the framework API. The Android {@sdkPlatformVersion} API
1034is assigned an integer identifier &mdash;
1035<strong>{@sdkPlatformApiLevel}</strong> &mdash; that is
1036stored in the system itself. This identifier, called the "API Level", allows the
1037system to correctly determine whether an application is compatible with
1038the system, prior to installing the application. </p>
Scott Main7fb538c2011-01-19 21:11:50 -08001039
Scott Mainea723292011-02-09 16:01:04 -08001040<p>To use APIs introduced in Android {@sdkPlatformVersion} in your application,
1041you need compile the application against the Android library that is provided in
1042the Android {@sdkPlatformVersion} SDK platform. Depending on your needs, you might
1043also need to add an <code>android:minSdkVersion="{@sdkPlatformApiLevel}"</code>
1044attribute to the <code>&lt;uses-sdk&gt;</code> element in the application's
1045manifest. If your application is designed to run only on Android 2.3 and higher,
1046declaring the attribute prevents the application from being installed on earlier
1047versions of the platform.</p>
Scott Main7fb538c2011-01-19 21:11:50 -08001048
Scott Mainea723292011-02-09 16:01:04 -08001049<p>For more information about how to use API Level, see the <a
1050href="{@docRoot}guide/appendix/api-levels.html">API Levels</a> document. </p>
Scott Main7fb538c2011-01-19 21:11:50 -08001051
1052
1053<h2 id="apps">Built-in Applications</h2>
1054
1055<p>The system image included in the downloadable platform provides these
1056built-in applications:</p>
1057
1058<table style="border:0;padding-bottom:0;margin-bottom:0;">
1059<tr>
1060<td style="border:0;padding-bottom:0;margin-bottom:0;">
1061<ul>
Scott Mainea723292011-02-09 16:01:04 -08001062<li>API Demos</li>
Scott Main7fb538c2011-01-19 21:11:50 -08001063<li>Browser</li>
1064<li>Calculator</li>
1065<li>Camera</li>
1066<li>Clock</li>
1067<li>Contacts</li>
1068<li>Custom Locale</li>
1069<li>Dev Tools</li>
1070<li>Downloads</li>
1071<li>Email</li>
1072</ul>
1073</td>
1074<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
1075<ul>
1076<li>Gallery</li>
Scott Mainea723292011-02-09 16:01:04 -08001077<li>Gestures Builder</li>
1078<li>Messaging</li>
Scott Main7fb538c2011-01-19 21:11:50 -08001079<li>Music</li>
1080<li>Search</li>
1081<li>Settings</li>
Scott Mainea723292011-02-09 16:01:04 -08001082<li>Spare Parts</li>
Scott Main7fb538c2011-01-19 21:11:50 -08001083<li>Speech Recorder</li>
Scott Mainea723292011-02-09 16:01:04 -08001084<li>Widget Preview</li>
Scott Main7fb538c2011-01-19 21:11:50 -08001085</ul>
1086</td>
1087</tr>
1088</table>
1089
1090
1091<h2 id="locs" style="margin-top:.75em;">Locales</h2>
1092
1093<p>The system image included in the downloadable SDK platform provides a variety of
1094built-in locales. In some cases, region-specific strings are available for the
1095locales. In other cases, a default version of the language is used. The
1096languages that are available in the Android 3.0 system
1097image are listed below (with <em>language</em>_<em>country/region</em> locale
1098descriptor).</p>
1099
1100<table style="border:0;padding-bottom:0;margin-bottom:0;">
1101<tr>
1102<td style="border:0;padding-bottom:0;margin-bottom:0;">
1103<ul>
1104<li>Arabic, Egypt (ar_EG)</li>
1105<li>Arabic, Israel (ar_IL)</li>
1106<li>Bulgarian, Bulgaria (bg_BG)</li>
1107<li>Catalan, Spain (ca_ES)</li>
1108<li>Czech, Czech Republic (cs_CZ)</li>
1109<li>Danish, Denmark(da_DK)</li>
1110<li>German, Austria (de_AT)</li>
1111<li>German, Switzerland (de_CH)</li>
1112<li>German, Germany (de_DE)</li>
1113<li>German, Liechtenstein (de_LI)</li>
1114<li>Greek, Greece (el_GR)</li>
1115<li>English, Australia (en_AU)</li>
1116<li>English, Canada (en_CA)</li>
1117<li>English, Britain (en_GB)</li>
1118<li>English, Ireland (en_IE)</li>
1119<li>English, India (en_IN)</li>
1120<li>English, New Zealand (en_NZ)</li>
1121<li>English, Singapore(en_SG)</li>
1122<li>English, US (en_US)</li>
Scott Mainb16965c2012-01-30 23:33:01 -08001123<li>English, South Africa (en_ZA)</li>
Scott Main7fb538c2011-01-19 21:11:50 -08001124<li>Spanish (es_ES)</li>
1125<li>Spanish, US (es_US)</li>
1126<li>Finnish, Finland (fi_FI)</li>
1127<li>French, Belgium (fr_BE)</li>
1128<li>French, Canada (fr_CA)</li>
1129<li>French, Switzerland (fr_CH)</li>
1130<li>French, France (fr_FR)</li>
1131<li>Hebrew, Israel (he_IL)</li>
1132<li>Hindi, India (hi_IN)</li>
1133</ul>
1134</td>
1135<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
1136<li>Croatian, Croatia (hr_HR)</li>
1137<li>Hungarian, Hungary (hu_HU)</li>
1138<li>Indonesian, Indonesia (id_ID)</li>
1139<li>Italian, Switzerland (it_CH)</li>
1140<li>Italian, Italy (it_IT)</li>
1141<li>Japanese (ja_JP)</li>
1142<li>Korean (ko_KR)</li>
1143<li>Lithuanian, Lithuania (lt_LT)</li>
1144<li>Latvian, Latvia (lv_LV)</li>
1145<li>Norwegian bokmål, Norway (nb_NO)</li>
1146<li>Dutch, Belgium (nl_BE)</li>
1147<li>Dutch, Netherlands (nl_NL)</li>
1148<li>Polish (pl_PL)</li>
1149<li>Portuguese, Brazil (pt_BR)</li>
1150<li>Portuguese, Portugal (pt_PT)</li>
1151<li>Romanian, Romania (ro_RO)</li>
1152<li>Russian (ru_RU)</li></li>
1153<li>Slovak, Slovakia (sk_SK)</li>
1154<li>Slovenian, Slovenia (sl_SI)</li>
1155<li>Serbian (sr_RS)</li>
1156<li>Swedish, Sweden (sv_SE)</li>
1157<li>Thai, Thailand (th_TH)</li>
1158<li>Tagalog, Philippines (tl_PH)</li>
1159<li>Turkish, Turkey (tr_TR)</li>
1160<li>Ukrainian, Ukraine (uk_UA)</li>
1161<li>Vietnamese, Vietnam (vi_VN)</li>
1162<li>Chinese, PRC (zh_CN)</li>
1163<li>Chinese, Taiwan (zh_TW)</li>
1164</td>
1165</tr>
1166</table>
1167
1168<p class="note"><strong>Note:</strong> The Android platform may support more
1169locales than are included in the SDK system image. All of the supported locales
1170are available in the <a href="http://source.android.com/">Android Open Source
1171Project</a>.</p>
1172
1173<h2 id="skins">Emulator Skins</h2>
1174
1175<p>The downloadable platform includes the following emulator skin:</p>
1176
1177<ul>
1178 <li>
1179 WXGA (1280x800, medium density, xlarge screen)
1180 </li>
1181</ul>
1182
1183<p>For more information about how to develop an application that displays
1184and functions properly on all Android-powered devices, see <a
1185href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple
1186Screens</a>.</p>