Android 3.2 APIs

In this document

Reference

Android 3.2 (HONEYCOMB_MR2) is an incremental platform release that adds new
capabilities for users and developers. The sections below provide an overview
of the new features and developer APIs.

For developers, the Android 3.2 platform is available as a
downloadable component for the Android SDK. The downloadable platform includes
an Android library and system image, as well as a set of emulator skins and
more. To get started developing or testing against Android 3.2,
use the Android SDK Manager to download the platform into your SDK.

Platform Highlights

New user features

Optimizations for a wider range of tablets

Android 3.2 includes a variety of optimizations across the system
to ensure a great user experience on a wider range of tablet devices.

Compatibility zoom for fixed-sized apps

Android 3.2 introduces a new compatibility zoom mode that gives
users a new way to view fixed-sized apps on larger devices. The new mode provides a
pixel-scaled alternative to the standard UI stretching for apps that are not
designed to run on larger screen sizes, such as on tablets. The new mode is
accessible to users from a menu icon in the system bar, for apps that need
compatibility support.

Media sync from SD card

On devices that support an SD card, users can now load media files directly
from the SD card to apps that use them. A system facility makes the files
accessible to apps from the system media store.

New developer features

Extended API for managing screens support

Android 3.2 introduces extensions to the platform's screen support API to
give developers additional ways to manage application UI across the range of
Android-powered devices. The API includes new resource qualifiers and new
manifest attributes that give you more precise control over how your
apps are displayed on different sizes, rather than relying on generalized
size categories.

To ensure the best possible display for fixed-sized apps and apps with limited
support for various screen sizes, the platform also provides a new zoom
compatibility mode that renders the UI on a smaller screen area, then scales it
up to fill the space available on the display. For more information about the
screen support API and the controls it provides, see the sections below.

API Overview

Screens Support APIs

Android 3.2 introduces new screens support APIs that give you more
control over how their applications are displayed across different screen sizes.
The API builds on the existing screens-support API, including the platform's
generalized screen density model, but extends it with the ability to precisely
target specific screen ranges by their dimensions, measured in
density-independent pixel units (such as 600dp or 720dp wide), rather than
by their generalized screen sizes (such as large or xlarge)

When designing an application's UI, you can still rely on the platform to
provide density abstraction, which means that applications do not need to
compensate for the differences in actual pixel density across devices. You
can design the application UI according to the amount of horizontal or vertical
space available. The platform expresses the amount of space available using three new
characteristics: smallestWidth, width, and
height.

A screen's smallestWidth is its fundamental minimum size,
measured in density-independent pixel ("dp") units. Of the screen's height or
width, it is the shorter of the two. For a screen in portrait orientation, the
smallestWidth is normally based on its width, while in landscape orientation it is based
on its height. In all cases, the smallestWidth is derived from a fixed characteristic of the
screen and the value does not change, regardless of orientation. The smallestWidth
is important for applications because it represents the shortest possible width
in which the application UI will need to be drawn, not including screen areas
reserved by the system.

In contrast, a screen's width and height represent the
current horizontal or vertical space available for application layout, measured
in "dp" units, not including screen areas reserved by the system. The width and
height of a screen change when the user switches orientation between landscape
and portrait.

The new screens support API is designed to let you manage application UI
according to the smallestWidth of the current screen. You can also manage the
UI according to current width or height, as needed. For those purposes, the API
provides these tools:

New resource qualifiers for targeting layouts and other resources to a
minimum smallestWidth, width, or height, and

Additionally, applications can still query the system and manage UI and
resource loading at runtime, as in the previous versions of the platform.

Since the new API lets you target screens more directly through smallestWidth,
width, and height, it's helpful to understand the typical
characteristics of the different screen types. The table below provides some
examples, measured in "dp" units.

Table 1. Typical devices, with density
and size in dp.

Type

Density (generalized)

Dimensions (dp)

smallestWidth (dp)

Baseline phone

mdpi

320x480

320

Small tablet/large phone

mdpi

480x800

480

7-inch tablet

mdpi

600x1024

600

10-inch tablet

mdpi

800x1280

800

The sections below provide more information about the new screen qualifiers
and manifest attributes. For complete information about how to use the screen
support API, see Supporting Multiple
Screens.

New resource qualifiers for screens support

The new resource qualifiers in Android 3.2 let you better target your layouts
for ranges of screen sizes. Using the qualifiers, you can create resource
configurations designed for a specific minimum smallestWidth, current width, or
current height, measured in density-independent pixels.

The new qualifiers are:

swNNNdp — Specifies the minimum smallestWidth on which
the resource should be used, measured in "dp" units. As mentioned above, a
screen's smallestWidth is constant, regardless of orientation. Examples:
sw320dp, sw720dp, sw720dp.

wNNNdp and hNNNdp — Specifies the minimum
width or height on which the resource should be used, measured in "dp" units. As
mentioned above, a screen's width and height are relative to the orientation of
the screen and change whenever the orientation changes. Examples:
w320dp, w720dp, h1024dp.

You can also create multiple overlapping resource configurations if needed.
For example, you could tag some resources for use on any screen wider than 480
dp, others for wider than 600 dp, and others for wider than 720 dp. When
multiple resource configurations are qualified for a given screen, the system
selects the configuration that is the closest match. For precise control over
which resources are loaded on a given screen, you can tag resources with one
qualifier or combine several new or existing qualifiers.

Based on the typical dimensions listed earlier, here are some examples of how
you could use the new qualifiers:

New manifest attributes for screen-size compatibility

The framework offers a new set of <supports-screens> manifest attributes that let
you manage your app's support for different screen sizess.
Specifically, you can specify the largest and smallest screens on which your app
is designed to run, as well as the largest screen on which it is designed run
without needing the system's new screen
compatibility mode. Like the resource qualifiers described above, the new
manifest attributes specify the range of screens that the application supports,
as specified by the smallestWidth.

The new manifest attributes for screen support are:

android:compatibleWidthLimitDp="numDp" — This
attribute lets you specify the maximum smallestWidth on which the application
can run without needing compatibility mode. If the current screen is larger than
the value specified, the system displays the application in normal mode but
allows the user to optionally switch to compatibility mode through a setting in
the system bar.

android:largestWidthLimitDp="numDp" — This
attribute lets you specify the maximum smallestWidth on which the application
is designed to run. If the current screen is larger than the value specified,
the system forces the application into screen compatibility mode, to ensure best
display on the current screen.

android:requiresSmallestWidthDp="numDp" — This
attribute lets you specify the minimum smallestWidth on which the application
can run. If the current screen is smaller than the value specified, the system
considers the application incompatible with the device, but does not prevent it
from being installed and run.

Note: Google Play does not currently filter
apps based on any of the attributes above. Support for filtering will be
added in a later platform release. Applications that require
filtering based on screen size can use the existing <supports-screens>
attributes.

Screen compatibility mode

Android 3.2 provides a new screen compatibility mode for applications
explicitly declaring that they do not support screens as large as the one on
which they are running. This new "zoom" mode is a pixel-scaled — it
renders the application in a smaller screen area and then scales the pixels to
fill the current screen.

By default, the system offers screen compatibility mode as an user option, for apps
that require it. Users can turn the zoom mode on and off using a control available
in the system bar.

Because the new screen compatibility mode may not be appropriate for all
applications, the platform allows the application to disable it using manifest
attributes. When disabled by the app, the system does not offer "zoom" compatibility
mode as an option for users when the app is running.

Note: For important information about how
to control compatibility mode in your applications, please review the New Mode for Apps on Large Screens article on the Android
Developers Blog.

New screen density for 720p televisions and similar devices

To meet the needs of applications running on 720p televisions or similar with
moderate density screens, Android 3.2 introduces a new generalized density,
tvdpi, with an approximate dpi of 213. Applications can query for
the new density in densityDpi and can use
the new tvdpi qualifier to tag resources for televisions and
similar devices. For example:

res/drawable-tvdpi/my_icon.png # Bitmap for tv density

In general, applications should not need to work with this density. For situations
where output is needed for a 720p screen, the UI elements can be scaled
automatically by the platform.

New onViewCreated() callback method notifies the Fragment that
onCreateView()
has returned, but before any saved state has been restored in to the View.

isDetached() method determines whether
the Fragment has been explicitly detached from the UI.

New attach()
and detach()
methods let an application re-attach or detach fragments in the UI.

A new setCustomAnimations() overload method lets you set specific animation
resources to run for enter/exit operations and specifically when
popping the back stack. The existing implementation does not account
for the different behavior of fragments when popping the back stack.

New applications should use Fragments instead of these classes. To
continue to run on older versions of the platform, you can use the v4 Support
Library (compatibility library), available in the Android SDK. The v4 Support
Library provides a version of the Fragment API that is compatible down to
Android 1.6 (API level 4).

For apps developing against Android 3.0 (API level
11) or higher, tabs are typically presented in the UI using the new
ActionBar.newTab() and related APIs
for placing tabs within their action bar area.

Media framework

Applications that use the platform's media provider (MediaStore) can now read media data directly from the
removeable SD card, where supported by the device. Applications can also
interact with the SD card files directly, using the MTP API.

New feature constants

The platform adds new hardware feature constants that you can declare
in their application manifests, to inform external entities such as Google
Play of required hardware and software capabilities. You declare these
and other feature constants in <uses-feature> manifest elements.

Google Play filters applications based on their <uses-feature> attributes, to ensure that they are available only to devices on which their requirements are met.

Feature constants for landscape or portrait requirements

Android 3.2 introduces new feature constants that let applications specify whether they require display in landscape orientation, portrait orientation, or both. Declaring these constants indicates that the application must not be installed on a device that doesn't offer the associated orientation. Conversely, if one or both of the constants are not declared, it indicates that the application does not have a preference for the undeclared orientations and may be installed on a device that doesn't offer them.

A typical application that functions properly in both landscape and portrait orientations would not normally need to declare an orientation requirement. Rather, an application designed primarily for one orientation, such as an app designed for a television, could declare one of the constants to ensure that it isn't available to devices that don't provide that orientation.

If any of activities declared in the manifest request that they run in a specific orientation,
using the android:screenOrientation attribute, then this also declares that the application
requires that orientation.

API Differences Report

API Level

The Android 3.2 platform delivers an updated version of
the framework API. The Android 3.2 API
is assigned an integer identifier —
13 — that is
stored in the system itself. This identifier, called the "API Level", allows the
system to correctly determine whether an application is compatible with
the system, prior to installing the application.

To use APIs introduced in Android 3.2 in your application,
you need compile the application against the Android library that is provided in
the Android 3.2 SDK platform. Depending on your needs, you
might
also need to add an android:minSdkVersion="13"
attribute to the <uses-sdk> element in the application's
manifest.