page.title=Android 2.3 APIs excludeFromSuggestions=true sdk.platform.version=2.3 sdk.platform.apiLevel=9 @jd:body <div id="qv-wrapper"> <div id="qv"> <h2>In this document</h2> <ol> <li><a href="#api">API Overview</a></li> <li><a href="#api-level">API Level</a></li> </ol> <h2>Reference</h2> <ol> <li><a href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API Differences Report »</a> </li> </ol> </div> </div> <p> <em>API Level:</em> <strong>{@sdkPlatformApiLevel}</strong></p> <p>For developers, the Android {@sdkPlatformVersion} ({@link android.os.Build.VERSION_CODES#GINGERBREAD})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 {@sdkPlatformVersion}, use the Android SDK Manager to download the platform into your SDK.</p> <h2 id="api">API Overview</h2> <p>The sections below provide a technical overview of what's new for developers in {@sdkPlatformVersion}, including new features and changes in the framework API since the previous version.</p> <h3 id="sip">SIP-based VoIP</h3> <p>The platform now includes a SIP protocol stack and framework API that lets developers build internet telephony applications. Using the API, applications can offer voice calling features without having to manage sessions, transport-level communication, or audio — these are handled transparently by the platform's SIP API and services.</p> <p>The SIP API is available in the {@link android.net.sip android.net.sip} package. The key class is {@link android.net.sip.SipManager}, which applications use to set up and manage SIP profiles, then initiate audio calls and receive audio calls. Once an audio call is established, applications can mute calls, turn on speaker mode, send DTMF tones, and more. Applications can also use the {@link android.net.sip.SipManager} to create generic SIP connections.</p> <p>The platform’s underlying SIP stack and services are available on devices at the discretion of the manufacturer and associated carrier. For this reason, applications should use the {@link android.net.sip.SipManager#isApiSupported isApiSupported()} method to check whether SIP support is available, before exposing calling functionality to users. </p> <p>To use the SIP API, applications must request permission from the user by declaring <code><uses-permission android:name="android.permission.INTERNET"></code> and <code><uses-permission android:name="android.permission.USE_SIP"></code> in their manifest files.</p> <p>Additionally, developers can request filtering on Google Play, such that their applications are not discoverable to users whose devices do not include the platform’s SIP stack and services. To request filtering, add <code><uses-feature android:name="android.software.sip" android:required="true"></code> and <code><uses-feature android:name="android.software.sip.voip"></code> to the application manifest.</p> <p class="note">For more information, read the <a href="{@docRoot}guide/topics/connectivity/sip.html">SIP</a> developer guide.</p> <h3 id="nfc">Near Field Communications (NFC)</h3> <p>Android 2.3 includes an NFC stack and framework API that lets developers read NDEF tags that are discovered as a user touches an NFC-enabled device to tag elements embedded in stickers, smart posters, and even other devices.</p> <p>The platform provides the underlying NFC services that work with the device hardware to discover tags when they come into range. On discovering a tag, the platform notifies applications by broadcasting an Intent, appending the tag's NDEF messages to the Intent as extras. Applications can create Intent filters to recognize and handle targeted tags and messages. For example, after receiving a tag by Intent, applications extract the NDEF messages, store them, alert the user, or handle them in other ways. </p> <p>The NFC API is available in the {@link android.nfc} package. The key classes are: </p> <ul><li>{@link android.nfc.NfcAdapter}, which represents the NFC hardware on the device.</li> <li>{@link android.nfc.NdefMessage}, which represents an NDEF data message, the standard format in which "records" carrying data are transmitted between devices and tags. Applications can receive these messages from {@link android.nfc.NfcAdapter#ACTION_TAG_DISCOVERED}</code> Intents.</li> <li>{@link android.nfc.NdefRecord}, delivered in an {@link android.nfc.NdefMessage}, which describes the type of data being shared and carries the data itself.</li> </ul> <p>NFC communication relies on wireless technology in the device hardware, so support for the platform's NFC features on specific devices is determined by their manufacturers. To determine the NFC support on the current device, applications can call {@link android.nfc.NfcAdapter#isEnabled isEnabled()} to query the {@link android.nfc.NfcAdapter}. The NFC API is always present, however, regardless of underlying hardware support.</p> <p>To use the NFC API, applications must request permission from the user by declaring <code><uses-permission android:name="android.permission.NFC"></code> in their manifest files.</p> <p>Additionally, developers can request filtering on Google Play, such that their applications are not discoverable to users whose devices do not support NFC. To request filtering, add <code><uses-feature android:name="android.hardware.nfc" android:required="true"></code> to the application's manifest.</p> <p class="note">To look at a sample application that uses the NFC API, see <a href="{@docRoot}resources/samples/NFCDemo/index.html">NFCDemo</a>.</p> <h3 id="sensors">Gyroscope and other sensors</h3> <p>Android 2.3 adds platform and API support for several new sensor reading types — gyroscope, rotation vector, linear acceleration, gravity, and barometer. Developers can use the new sensor readings to create applications that respond quickly and smoothly to precise changes in device position and motion. The Sensor API reports gyroscope and other sensor changes to interested applications, whether they are running on the application framework or in native code. </p> <p>Note that the specific set of hardware sensors available on any given device varies at the discretion of the device manufacturer. </p> <p>Developers can request filtering on Google Play, such that their applications are not discoverable to users whose devices do not offer a gyroscope sensor. To do so, add <code><uses-feature android:name="android.hardware.sensor.gyroscope" android:required="true"></code> to the application manifest.</p> <p>For API details, see {@link android.hardware.Sensor}.</p> <h3 id="cameras">Multiple cameras support</h3> <p>Applications can now make use of any cameras that are available on a device, for either photo or video capture. The {@link android.hardware.Camera} lets applications query for the number of cameras available and the unique characteristics of each. </p> <ul> <li>New {@link android.hardware.Camera.CameraInfo} class stores a camera's positional characteristics (orientation, front-facing or back-facing).</li> <li>New {@link android.hardware.Camera#getNumberOfCameras()} and {@link android.hardware.Camera#getCameraInfo(int,CameraInfo) getCameraInfo()} methods in the {@link android.hardware.Camera} class let applications query for the cameras available and open the camera that they need.</li> <li>New {@link android.media.CamcorderProfile#get get()} method lets applications retrieve a {@link android.media.CamcorderProfile} for a specific camera. </li> <li>New {@link android.media.CameraProfile#getJpegEncodingQualityParameter(int, int) getJpegEncodingQualityParameter()} lets applications obtain the still-image capture quality level for a specific camera.</li> </ul> <p class="note">To look at sample code for accessing a front-facing camera, see <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/graphics/CameraPreview.html">CameraPreview.java</a> in the ApiDemos sample application.</p> <p>The Camera API also adds: </p> <ul> <li>New parameters for cameras, including focus distance, focus mode, and preview fps maximum/minimum. New {@link android.hardware.Camera.Parameters#getFocusDistances(float[]) getFocusDistances()}, {@link android.hardware.Camera.Parameters#getPreviewFpsRange(int[]) getPreviewFpsRange()}, and {@link android.hardware.Camera.Parameters#getSupportedPreviewFpsRange() getSupportedPreviewFpsRange()} for getting camera parameters, as well as {@link android.hardware.Camera.Parameters#setPreviewFpsRange(int, int) setPreviewFpsRange()} for setting preview framerate. </li> </ul> <h3 id="media">Mixable audio effects</h3> <p>The platform's media framework adds support for new per-track or global audio effects, including bass boost, headphone virtualization, equalization, and reverb.</p> <ul> <li>New {@link android.media.audiofx android.media.audiofx} package provides the API to access audio effects.</li> <li>New {@link android.media.audiofx.AudioEffect AudioEffect} is the base class for controlling audio effects provided by the Android audio framework. <li>New audio session ID that lets an application associate a set of audio effects with an instance of {@link android.media.AudioTrack} or {@link android.media.MediaPlayer}.</li> <li>New {@link android.media.AudioTrack#AudioTrack(int, int, int, int, int, int, int) AudioTrack} class constructor that lets you create an {@link android.media.AudioTrack} with a specific session ID. New {@link android.media.AudioTrack#attachAuxEffect(int) attachAuxEffect()}, {@link android.media.AudioTrack#getAudioSessionId() getAudioSessionId()}, and {@link android.media.AudioTrack#setAuxEffectSendLevel(float) setAuxEffectSendLevel()} methods.</li> <li>New {@link android.media.MediaPlayer#attachAuxEffect(int) attachAuxEffect()}, {@link android.media.MediaPlayer#getAudioSessionId() getAudioSessionId()}, {@link android.media.MediaPlayer#setAudioSessionId(int) setAudioSessionId(int)}, and {@link android.media.MediaPlayer#setAuxEffectSendLevel(float) setAuxEffectSendLevel()} methods and supporting types.</li> </ul> <p class="note">To look at sample code for audio effects, see <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/media/AudioFxDemo.html">AudioFxDemo.java</a> in the ApiDemos sample application.</p> <p>The media framework also adds:</p> <ul> <li>New support for altitude tag in EXIF metadata for JPEG files. New method {@link android.media.ExifInterface#getAltitude(double) getAltitude()} method to retrieve the value of the EXIF altitude tag.</li> <li>New {@link android.media.MediaRecorder#setOrientationHint(int) setOrientationHint()} method lets an application tell {@link android.media.MediaRecorder} of the orientation during video capture.</li> </ul> <h3 id="download">Download manager</h3> <p>The platform includes a new {@link android.app.DownloadManager} system service that handles long-running HTTP downloads. Applications can request that a URI be downloaded to a particular destination file. The <code>DownloadManager</code> will conduct the download in the background, taking care of HTTP interactions and retrying downloads after failures or across connectivity changes and system reboots. </p> <ul> <li>Applications can obtain an instance of the {@link android.app.DownloadManager} class by calling {@link android.content.Context#getSystemService(String)} and passing {@link android.content.Context#DOWNLOAD_SERVICE}. Applications that request downloads through this API should register a broadcast receiver for {@link android.app.DownloadManager#ACTION_NOTIFICATION_CLICKED}, to appropriately handle when the user clicks on a running download in a notification or from the Downloads UI.</li> <li>The {@link android.app.DownloadManager.Request} class lets an application provide all the information necessary to request a new download, such as request URI and download destination. A request URI is the only required parameter. Note that the default download destination is a shared volume where the system can delete your file if it needs to reclaim space for system use. For persistent storage of a download, specify a download destination on external storage (see {@link android.app.DownloadManager.Request#setDestinationUri(Uri)}).</li> <li>The {@link android.app.DownloadManager.Query} class provides methods that let an application query for and filter active downloads.</li> </ul> <h3 id="strictmode">StrictMode</h3> <p>To help developers monitor and improve the performance of their applications, the platform offers a new system facility called {@link android.os.StrictMode}. When implemented in an application, StrictMode catches and notifies the developer of accidental disk or network activity that could degrade application performance, such as activity taking place on the application's main thread (where UI operations are received and animations are also taking place). Developers can evaluate the network and disk usages issues raised in StrictMode and correct them if needed, keeping the main thread more responsive and preventing ANR dialogs from being shown to users. <ul> <li>{@link android.os.StrictMode} is the core class and is the main integration point with the system and VM. The class provides convenience methods for managing the thread and VM policies that apply to the instance.</li> <li>{@link android.os.StrictMode.ThreadPolicy} and {@link android.os.StrictMode.VmPolicy} hold the policies that you define and apply to thread and VM instances.</li> </ul> <p>For more information about how to use StrictMode to optimize your application, see the class documentation and sample code at {@link android.os.StrictMode android.os.StrictMode}.</p> <h3 id="ui">UI Framework</h3> <ul> <li>Support for overscroll <ul> <li>New support for overscroll in Views and Widgets. In Views, applications can enable/disable overscroll for a given view, set the overscoll mode, control the overscroll distance, and handle the results of overscrolling. </li> <li>In Widgets, applications can control overscroll characteristics such as animation, springback, and overscroll distance. For more information, see {@link android.view.View android.view.View} and {@link android.widget.OverScroller android.widget.OverScroller}. </li> <li>{@link android.view.ViewConfiguration} also provides methods {@link android.view.ViewConfiguration#getScaledOverflingDistance()} and {@link android.view.ViewConfiguration#getScaledOverscrollDistance()}.</li> <li>New <code>overScrollMode</code>, <code>overScrollFooter</code>, and <code>overScrollHeader</code> attributes for <code><ListView></code> elements, for controlling overscroll behavior.</li> </ul> </li> <li>Support for touch filtering <ul> <li>New support for touch filtering, which lets an application improve the security of Views that provide access to sensitive functionality. For example, touch filtering is appropriate to ensure the security of user actions such as granting a permission request, making a purchase, or clicking on an advertisement. For details, see the <a href="{@docRoot}reference/android/view/View.html#Security">View class documentation</a>.</li> <li>New <code>filterTouchesWhenObscured</code> attribute for view elements, which declares whether to filter touches when the view's window is obscured by another visible window. When set to <code>"true"</code>, the view will not receive touches whenever a toast, dialog or other window appears above the view's window. Refer to <a href="{@docRoot}reference/android/view/View.html#Security">View security documentation</a> for details.</li> </ul> <p class="note">To look at sample code for touch filtering, see <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/SecureView.html">SecureView.java</a> in the ApiDemos sample application.</p> </li> <li>Improved event management <ul> <li>New base class for input events, {@link android.view.InputEvent}. The class provides methods that let applications determine the meaning of the event, such as by querying for the InputDevice from which the event orginated. The {@link android.view.KeyEvent} and {@link android.view.MotionEvent} are subclasses of {@link android.view.InputEvent}.</li> <li>New base class for input devices, {@link android.view.InputDevice}. The class stores information about the capabilities of a particular input device and provides methods that let applications determine how to interpret events from an input device.</li> </ul> </li> <li>Improved motion events <ul> <li>The {@link android.view.MotionEvent} API is extended to include "pointer ID" information, which lets applications to keep track of individual fingers as they move up and down. The class adds a variety of methods that let an application work efficiently with motion events.</li> <li>The input system now has logic to generate motion events with the new pointer ID information, synthesizing identifiers as new pointers are down. The system tracks multiple pointer IDs separately during a motion event, and ensures proper continuity of pointers by evaluating at the distance between the last and next set of pointers.</li> </ul> </li> <li>Text selection controls <ul> <li>A new <code>setComposingRegion</code> method lets an application mark a region of text as composing text, maintaining the current styling. A <code>getSelectedText</code> method returns the selected text to the application. The methods are available in {@link android.view.inputmethod.BaseInputConnection}, {@link android.view.inputmethod.InputConnection}, and {@link android.view.inputmethod.InputConnectionWrapper}.</li> <li>New <code>textSelectHandle</code>, <code>textSelectHandleLeft</code>, <code>textSelectHandleRight</code>, and <code>textSelectHandleWindowStyle</code> attributes for <code><TextView></code>, for referencing drawables that will be used to display text-selection anchors and the style for the containing window.</li> </ul> </li> <li>Activity controls <ul> <li>{@link android.content.pm.ActivityInfo} adds new constants for managing Activity orientation: {@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_FULL_SENSOR}, {@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_REVERSE_LANDSCAPE}, {@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_REVERSE_PORTRAIT}, {@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_SENSOR_LANDSCAPE}, and {@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_SENSOR_PORTRAIT}. </li> <li>New constant {@link android.app.ActivityManager.RunningAppProcessInfo#IMPORTANCE_PERCEPTIBLE} for the {@link android.app.ActivityManager.RunningAppProcessInfo#importance} field in {@link android.app.ActivityManager.RunningAppProcessInfo}. The value indicates that a specific process is running something that is considered to be actively perceptible to the user. An example would be an application performing background music playback.</li> <li>The Activity.setPersistent(boolean) method to mark an Activity as persistent is now deprecated and the implementation is a no-op.</li> </ul> </li> <li>Notification text and icon styles <ul> <li>New {@link android.R.style#TextAppearance_StatusBar_EventContent TextAppearance.StatusBar.EventContent}, {@link android.R.style#TextAppearance_StatusBar_EventContent_Title TextAppearance.StatusBar.EventContent.Title}, {@link android.R.style#TextAppearance_StatusBar_Icon TextAppearance.StatusBar.Icon}, and {@link android.R.style#TextAppearance_StatusBar_Title TextAppearance.StatusBar.Title} for managing notification style.</li> </ul> </li> <h3 id="extralargescreens">Extra Large Screens</h3> <p>The platform now supports extra large screen sizes, such as those that might be found on tablet devices. Developers can indicate that their applications are designed to support extra large screen sizes by adding a <code><supports screens ... android:xlargeScreens="true"></code> element to their manifest files. Applications can use a new resource qualifier, <code>xlarge</code>, to tag resources that are specific to extra large screens. For details on how to support extra large and other screen sizes, see <a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a>.</p> <h3 id="graphics">Graphics</h3> <ul> <li>Adds remaining OpenGL ES 2.0 methods {@link android.opengl.GLES20#glDrawElements(int, int, int, int) glDrawElements()} and {@link android.opengl.GLES20#glVertexAttribPointer(int, int, int, boolean, int, int) glVertexAttribPointer()} in the {@link android.opengl.GLES20 android.opengl.GLES20} class.</li> <li>Adds support for {@link android.graphics.ImageFormat#YV12} pixel format, a planar 4:2:0 YCrCb format.</li> </ul> <h3 id="providers">Content Providers</h3> <ul> <li>New {@link android.provider.AlarmClock} provider class for setting an alarm or handling an alarm. The provider contains a <code>ACTION_SET_ALARM</code> Intent action and extras that can be used to start an Activity to set a new alarm in an alarm clock application. Applications that wish to receive the <code>SET_ALARM</code> Intent should create an activity that requires the the SET_ALARM permission. Applications that wish to create a new alarm should use {@link android.content.Context#startActivity(android.content.Intent) Context.startActivity()}, so that the user has the option of choosing which alarm clock application to use.</li> <li>{@link android.provider.MediaStore} supports a new Intent action, {@link android.provider.MediaStore#INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH PLAY_FROM_SEARCH}, that lets an application search for music media and automatically play content from the result when possible. For example, an application could fire this Intent as the result of a voice recognition command to listen to music.</li> <li>{@link android.provider.MediaStore} also adds a new {@link android.provider.MediaStore#MEDIA_IGNORE_FILENAME} flag that tells the media scanner to ignore media in the containing directory and its subdirectories. Developers can use this to avoid having graphics appear in the Gallery and likewise prevent application sounds and music from showing up in the Music app.</li> <li>The {@link android.provider.Settings} provider adds the new Activity actions {@link android.provider.Settings#ACTION_APPLICATION_DETAILS_SETTINGS APPLICATION_DETAILS_SETTINGS} and {@link android.provider.Settings#ACTION_MANAGE_ALL_APPLICATIONS_SETTINGS MANAGE_ALL_APPLICATIONS_SETTINGS}, which let an application show the details screen for a specific application or show the Manage Applications screen. </li> <li>The {@link android.provider.ContactsContract} provider adds the {@link android.provider.ContactsContract.CommonDataKinds.SipAddress} data kind, for storing a contact's SIP (Internet telephony) address. </li> </ul> <h3 id="location">Location</h3> <ul> <li>The {@link android.location.LocationManager} now tracks application requests that result in wake locks or wifi locks according to {@link android.os.WorkSource}, a system-managed class that identifies the application. <p>The <code>LocationManager</code> keeps track of all clients requesting periodic updates, and tells its providers about them as a <code>WorkSource</code> parameter, when setting their minimum update times. The network location provider uses <code>WorkSource</code> to track the wake and wifi locks initiated by an application and adds it to the application's battery usage reported in Manage Applications. </p></li> <li>The {@link android.location.LocationManager} adds several new methods that let an Activity register to receive periodic or one-time location updates based on specified criteria (see below).</li> <li>A new {@link android.location.Criteria} class lets an application specify a set of criteria for selecting a location provider. For example, providers may be ordered according to accuracy, power usage, ability to report altitude, speed, and bearing, and monetary cost. </li> </ul> <h3 id="storage">Storage</h3> <ul> <li>Android 2.3 adds a new {@link android.os.storage.StorageManager} that supports OBB (Opaque Binary Blob) files. Although platform support for OBB is available in Android 2.3, development tools for creating and managing OBB files will not be availble until early 2011.</li> <li>The Android 2.3 platform adds official support for devices that do not include SD cards (although it provides virtual SD Card partition, when no physical SD card is available). A convenience method, {@link android.os.Environment#isExternalStorageRemovable()}, lets applications determine whether a physical SD card is present.</li> </ul> <h3 id="packagemanager">Package Manager</h3> <ul> <li>New constants for declaring hardware and software features. See the list in the <a href="#feature_constants">New Feature Constants</a> section, below.</li> <li>{@link android.content.pm.PackageInfo} adds new {@link android.content.pm.PackageInfo#firstInstallTime} and {@link android.content.pm.PackageInfo#lastUpdateTime} fields that store the time of the package installation and last update. </li> <li>New {@link android.content.pm.PackageManager#getProviderInfo(android.content.ComponentName, int) getProviderInfo()} method for retrieving all of the information known about a particular content provider class.</li> </ul> <h3 id="telephony">Telephony</h3> <ul> <li>The {@link android.telephony.TelephonyManager} adds the constant {@link android.telephony.TelephonyManager#NETWORK_TYPE_EVDO_B} for specifying the CDMA EVDO Rev B network type.</li> <li>New {@link android.telephony.gsm.GsmCellLocation#getPsc()} method returns the primary scrambling code of the serving cell on a UMTS network.</li> </ul> <h3 id="native">Native access to Activity lifecycle, windows</h3> <p>Android 2.3 exposes a broad set of APIs to applications that use native code. Framework classes of interest to such applications include: </p> <ul> <li>{@link android.app.NativeActivity} is a new type of Activity class, whose lifecycle callbacks are implemented directly in native code. A <code>NativeActivity</code> and its underlying native code run in the system just as do other Activities — specifically they run in the Android application's system process and execute on the application's main UI thread, and they receive the same lifecycle callbacks as do other Activities. </li> <li>New {@link android.view.InputQueue} class and callback interface lets native code manage event queueing. </li> <li>New {@link android.view.SurfaceHolder.Callback2} interface lets native code manage a {@link android.view.SurfaceHolder}. </li> <li>New {@link android.view.Window#takeInputQueue(android.view.InputQueue.Callback) takeInputQueue} and {@link android.view.Window#takeSurface(android.view.SurfaceHolder.Callback2) takeSurface()} methods in {@link android.view.Window} let native code manage events and surfaces.</li> </ul> <p>For full information on working with native code or to download the NDK, see the <a href="{@docRoot}tools/sdk/ndk/index.html">Android NDK</a> page.</p> <h3 id="dalvik">Dalvik Runtime</h3> <ul> <li>{@link dalvik.system dalvik.system} removes several classes that were previously deprecated.</li> <li>Dalvik core libraries: <ul> <li>New collections: {@link java.util.ArrayDeque}, {@link java.util.NavigableMap}, {@link java.util.concurrent.ConcurrentSkipListMap}, {@link java.util.concurrent.LinkedBlockingDeque}</li> <li>New {@link java.util.Arrays} utilities: <code>binarySearch()</code>, <code>copyOf()</code>, <code>copyOfRange()</code>, and others.</li> <li>{@link java.net.CookieManager} for {@link java.net.HttpURLConnection}.</li> <li>More complete network APIs: {@link java.net.InterfaceAddress}, {@link java.net.NetworkInterface} and {@link java.net.IDN}</li> <li>{@link java.io.File} read and write controls</li> <li>{@link java.lang.String#isEmpty() String.isEmpty()}</li> <li>{@link java.text.Normalizer} and {@link java.text.Normalizer.Form}</li> <li>Improved {@link javax.net.ssl} server sockets.</li> </ul> </li> </ul> <h3 id="manifest">New manifest elements and attributes</h3> <ul> <li>New <code>xlargeScreens</code> attribute for <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code <supports-screens>}</a> element, to indicate whether the application supports extra large screen form-factors. For details, see <a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a>.</li> <li>New values for <code>android:screenOrientation</code> attribute of <code><activity></code> element: <ul> <li><code>"reverseLandscape"</code> — The Activity would like to have the screen in landscape orientation, turned in the opposite direction from normal landscape.</li> <li><code>"reversePortrait"</code> — The Activity would like to have the screen in portrait orientation, turned in the opposite direction from normal portrait.</li> <li><code>"sensorLandscape"</code> — The Activity would like to have the screen in landscape orientation, but can use the sensor to change which direction the screen is facing.</li> <li><code>"sensorPortrait"</code> — The Activity would like to have the screen in portrait orientation, but can use the sensor to change which direction the screen is facing.</li> <li><code>"fullSensor"</code> — Orientation is determined by a physical orientation sensor: the display will rotate based on how the user moves the device. This allows any of the 4 possible rotations, regardless of what the device will normally do (for example some devices won't normally use 180 degree rotation).</li> </ul> </li> </ul> <h3 id="permissions">New Permissions</h3> <ul> <li><code>com.android.permission.SET_ALARM</code> — Allows an application to broadcast an Intent to set an alarm for the user. An Activity that handles the {@link android.provider.AlarmClock#ACTION_SET_ALARM SET_ALARM} Intent action should require this permission.</li> <li><code>android.permission.USE_SIP</code> — Allows an application to use the {@link android.net.sip SIP API} to make or receive internet calls. <li><code>android.permission.NFC</code> — Allows an application to use the {@link android.nfc NFC API} to read NFC tags.</li> </ul> <h3 id="feature_constants">New Feature Constants</h3> <p>The platform adds several new hardware features that developers can declare in their application manifests as being required by their applications. This lets developers control how their application is filtered, when published on Google Play. </p> <ul> <li>{@link android.content.pm.PackageManager#FEATURE_AUDIO_LOW_LATENCY android.hardware.audio.low_latency} — The application uses a low-latency audio pipeline on the device and is sensitive to delays or lag in sound input or output.</li> <li>{@link android.content.pm.PackageManager#FEATURE_CAMERA_FRONT android.hardware.camera.front} — The application uses a front-facing camera on the device.</li> <li>{@link android.content.pm.PackageManager#FEATURE_NFC android.hardware.nfc} — The application uses NFC radio features in the device.</li> <li>{@link android.content.pm.PackageManager#FEATURE_SENSOR_BAROMETER android.hardware.sensor.barometer} — The application uses the device's barometer.</li> <li>{@link android.content.pm.PackageManager#FEATURE_SENSOR_GYROSCOPE android.hardware.sensor.gyroscope} — The application uses the device's gyroscope sensor.</li> <li>{@link android.content.pm.PackageManager#FEATURE_SIP android.software.sip} — The application uses the SIP API on the device.</li> <li>{@link android.content.pm.PackageManager#FEATURE_SIP_VOIP android.software.sip.voip} — The application uses a SIP-based VoIP service on the device.</li> <li>{@link android.content.pm.PackageManager#FEATURE_TOUCHSCREEN_MULTITOUCH_JAZZHAND android.hardware.touchscreen.multitouch.jazzhand} — The application uses advanced multipoint multitouch capabilities on the device screen, for tracking five or more points fully independently.</li> </ul> <p>For full information about how to declare features and use them for filtering, see the documentation for <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html"><code><uses-feature></code></a>.</p> <h3 id="api-diff">API differences report</h3> <p>For a detailed view of all API changes in Android {@sdkPlatformVersion} (API Level {@sdkPlatformApiLevel}), see the <a href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API Differences Report</a>.</p> <h2 id="api-level">API Level</h2> <p>The Android {@sdkPlatformVersion} platform delivers an updated version of the framework API. The Android {@sdkPlatformVersion} API is assigned an integer identifier — <strong>{@sdkPlatformApiLevel}</strong> — 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. </p> <p>To use APIs introduced in Android {@sdkPlatformVersion} in your application, you need compile the application against the Android library that is provided in the Android {@sdkPlatformVersion} SDK platform. Depending on your needs, you might also need to add an <code>android:minSdkVersion="{@sdkPlatformApiLevel}"</code> attribute to the <code><uses-sdk></code> element in the application's manifest. If your application is designed to run only on Android 2.3 and higher, declaring the attribute prevents the application from being installed on earlier versions of the platform.</p> <p>For more information, read <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">What is API Level?</a></p>