<li><a href="#gles_32">OpenGLTM ES 3.2 API</a></li>
</ol>
</div>
</div>
<p>Android N is still in active development, but you can try it
now as part of the N Developer Preview. The sections below highlight some of
the new features for developers. </p>
<p>Make sure to check out the <a href="{@docRoot}preview/behavior-changes.html">Behavior Changes</a> to learn about areas
where platform changes may affect your apps, take a look at the developer guides to learn more about key features, and download the <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API Reference</a> for details on new APIs. </p>
<p>In Android N, we're introducing a new and much-requested multitasking feature
into the platform — multi-window support. </p>
<p>Users can now pop open two apps on the screen at once. </p>
<ul>
<li>On phones and tablets
running Android N, users can run two apps side-by-side or
one-above-the-other in splitscreen mode. Users can resize the apps by dragging
the divider between them. </li>
<li>On Android TV devices, apps can put themselves in <a href="{@docRoot}preview/features/picture-in-picture.html">picture-in-picture mode</a>, allowing them to continue showing content while the user browses or interacts
with other apps. See below for more information. </li>
<li> <strong>Bundled notifications</strong>: The system can group messages together, for example by message topic, and display the group. A user can take actions, such as Dismiss or Archive, on them in place. If you’ve implemented notifications for Android Wear, you’ll already be familiar with this model.
</div><p>Quick Settings is a popular and simple way to expose key settings and actions,
directly from the notification shade. In Android N, we've expanded the scope of
Quick Settings to make it even more useful and convenient. </p>
<p>We've added more room for additional Quick Settings tiles, which users can
access across a paginated display area by swiping left or right. We've also
given users control over what Quick Settings tiles appear and where they are
displayed — users can add or move tiles just by dragging and dropping them. </p>
<p>For developers, Android N also adds a new API that lets you define your own
Quick Settings tiles to give users easy access to key controls and actions in your app.</p>
<p>Quick Settings tiles are reserved for controls or actions that are either
urgently required or frequently used, and should not be used as shortcuts to launching an app. </p>
<p>Once you’ve defined your tiles, you can surface them to users, who can add them to Quick Settings just by drag and drop. </p>
<p>For information about creating an app tile, see the <code>android.service.quicksettings.Tile</code> in the downloadable <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API Reference</a>. </p>
preference changes</a>. All apps should check whether the user has enabled Data
Saver and make an effort to limit foreground and background data usage.</p>
<h2 id="multi-locale_languages">Multi-locale support, more languages</h2>
<p>Android N now lets users select <strong>multiple locales</strong> in Settings,
to better support bilingual use-cases. Apps can use
a new API to get the user's selected locales and then offer more sophisticated
user experiences for multi-locale users — such as showing search results in
multiple languages and not offering to translate webpages in a language the
user already knows.</p>
<p>Along with multi-locale support, Android N also expands the range of languages
available to users. It offers more than 25 variants each for commonly used
languages such as English, Spanish, French, and Arabic. It also adds partial
support for more than 100 new languages.</p>
<p>Apps can get the list of locales set by the user by calling <code>LocaleList.GetDefault()</code>. To support the expanded number of locales, Android N is changing the way
that it resolves resources. Make sure that you test and verify that your apps
working as expected with the new resource resolution logic.</p>
<p>To learn about the new resource-resolution behavior and the best practices you
should follow, see <a href="{@docRoot}preview/features/multilingual-support.html">Multilingual Support</a>.</p>
<h2 id="icu4">ICU4J APIs in Android</h2>
<p>Android N now offers a subset of <a href="http://site.icu-project.org/">ICU4J</a> APIs in the Android framework under the <code>android.icu</code> package. Migration is
easy, and mostly entails simply changing from the <code>com.java.icu</code> namespace to
<code>android.icu</code>.
If you are already using an ICU4J bundle in your apps, switching to the
<code>android.icu</code> APIs provided in the Android framework can produce substantial
savings in APK size.</p>
<p>To learn more about the Android ICU4J APIs, see <a href="{@docRoot}preview/features/icu4j-framework.html">ICU4J Support</a>.</p>
<h2 id="android_tv_recording">Android TV recording</h2>
<p>Android N adds the ability to record and playback content from Android TV input
services via new recording APIs. Building on top of existing time-shifting
APIs, TV input services can control what channel data can be recorded, how
recorded sessions are saved, and manage user interaction with recorded content. </p>
<p>For more information, see <a
href="{@docRoot}preview/features/tv-recording-api.html">Android TV Recording APIs</a>.</p>
<p>Android N now offers Vision Settings directly on the Welcome screen for new
device setup. This makes it much easier for users to discover and configure
accessibility features on their devices, including magnification gesture, font
size, display size, and TalkBack. </p>
<p>With these accessibility features getting more prominent placement, your users
are more likely to try your app with them enabled. Make sure you test your apps
early with these settings enabled. You can enable them from Settings >
Accessibility.</p>
<p>Also in Android N, accessibility services can now help users with motor
impairments to touch the screen. The new API allows building services with
features such as face-tracking, eye-tracking, point scanning, and so on, to
meet the needs of those users.</p>
<p>For more information, see <code>android.accessibilityservice.GestureDescription</code>
in the downloadable <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API Reference</a>.</p>
<h2 id="number-blocking">Number-blocking</h2>
<p>Android N now supports number-blocking in the platform and provides a
framework API to let service providers maintain a blocked-number list. The
default SMS app, the default phone app, and provider apps can read from and
write to the blocked-number list. The list is not accessible to other apps.</p>
<p>By making number-blocking a standard feature of the platform, Android provides
a consistent way for apps to support number-blocking across a wide range of
devices. Among the other benefits that apps can take advantage of are:</p>
<ul>
<li> Numbers blocked on calls are also blocked on texts
<li> Blocked numbers can persist across resets and devices through the Backup &
Restore feature
<li> Multiple apps can use the same blocked numbers list
</ul>
<p>Additionally, carrier app integration through Android means that carriers can
read the blocked numbers list on the device and perform service-side blocking
for the user in order to stop unwanted calls and texts from reaching the user
through any medium, such as a VOIP endpoint or forwarding phones.</p>
<p>For more information, see <code>android.provider.BlockedNumberContract</code> in the downloadable <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API Reference</a>.</p>
<h2 id="call_screening">Call screening</h2>
<p>Android N allows the default phone app to screen incoming calls. The phone app
does this by implementing the new <code>CallScreeningService</code>, which allows the phone app to perform a number of actions based on an
incoming call's {@link android.telecom.Call.Details Call.Details}, such as:</p>
<ul>
<li> Reject the incoming call
<li> Do not allow the call to the call log
<li> Do not show the user a notification for the call
</ul>
<p>For more information, see <code>android.telecom.CallScreeningService</code> in the downloadable <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API Reference</a>.</p>
<h2 id="direct_boot">Direct boot</h2>
<p>Direct boot improves device startup times and lets registered
apps have limited functionality even after an unexpected reboot.
For example, if an encrypted device reboots while the user is sleeping,
registered alarms, messages and incoming calls can now continue notify
the user as normal. This also means accessibility services can also be
available immediately after a restart.</p>
<p>Direct boot takes advantage of file based encryption in Android N
to enable fine grained encryption policies for both system and app data.
The system uses a device-encrypted store for select system data and explicitly
registered app data. By default a credential-encrypted store is used for all
other system data, user data, apps, and app data. </p>
<p>At boot, the system starts in a restricted mode with access to
device-encrypted data only, and without general access to apps or data.
If you have components that you want to run in this mode, you can register
them by setting a flag in the manifest. After restart, the system activates
registered components by broadcasting the <code>LOCKED_BOOT_COMPLETED</code>
intent. The system ensures registered device-encrypted app data is available
before unlock. All other data is unavailable until the User confirms their lock
screen credentials to decrypt it. </p>
For more information, see <a href="{@docRoot}preview/features/direct-boot.html">Direct Boot</a>.</p>
</p>
<h3 id="key_attestation">Key Attestation</h3>
<p>Hardware-backed keystores provide a much safer method to create, store,
and use cryptographic keys on Android devices. They protect keys from the
Linux kernel, potential Android vulnerabilities, and extraction
<p>Profile owners can specify a separate security challenge for apps running in
the work profile. The work challenge is shown when a user attempts to open any
work apps. Successful completion of the security challenge unlocks the work
profile and decrypts it if necessary. For profile owners, <code>ACTION_SET_NEW_PASSWORD</code> prompts the user to set a work challenge, and <code>ACTION_SET_NEW_PARENT_PROFILE_PASSWORD</code> prompts the user to set a device lock.</p>
<p>Profile owners can set distinct password policies for the work challenge (such
as how long the PIN needs to be, or whether a fingerprint can be used to unlock
the profile) using the <code>setPasswordQuality()</code>, <code>setPasswordMinimumLength()</code> and related methods. The profile owner can also set the device lock using the <code>DevicePolicyManager</code> instance returned by the new <code>getParentProfileInstance()</code> method. Additionally, profile owners can customize the credentials screen for
the work challenge using the new <code>setOrganizationColor()</code> and <code>setOrganizationName()</code> methods.</p>
<h3 id="turn_off_work">Turn off work </h3>
<p>On a device with a work profile, users can toggle work mode. When work mode is
off the managed user is temporarily shut down, which disables work profile
apps, background sync, and notifications. This includes the profile owner
application. When work mode is off, the system displays a persistent status
icon to remind the user that they can't launch work apps. The launcher
indicates that work apps and widgets are not accessible. </p>
<h3 id="always_on_vpn">Always on VPN </h3>
<p>Device owners and profile owners can ensure that work apps always connect
through a specified VPN. The system automatically starts that VPN after the
device boots.</p>
<p>New <code>DevicePolicyManager</code> methods are <code>setAlwaysOnVpnPackage()</code> and <code>getAlwaysOnVpnPackage()</code>.</p>
<p>Because VPN services can be bound directly by the system without app
interaction, VPN clients need to handle new entry points for Always on VPN. As
before, services are indicated to the system by an intent filter matching
action <code>android.net.VpnService</code>. </p>
<p>Users can also manually set Always on VPN clients that implement <code>VPNService</code> methods in the primary user using <strong>Settings>More>Vpn</strong>.</p>
<p>Project Svelte is an ongoing effort to minimize RAM use by system and apps
across the range of Android devices in the ecosystem. In Android N, Project
Svelte is focused on optimizing the way apps run in the background. </p>
<p>Background processing is an essential part of most apps. When handled right, it
can make your user experience amazing — immediate, fast, and context-aware.
When not handled right, background processing can needlessly consume RAM (and
battery) and affect system performance for other apps. </p>
<p>Since Android 5.0, {@link android.app.job.JobScheduler} has been the preferred way of performing background work in a way that's good
for users. Apps can schedule jobs while letting the system optimize based on
memory, power, and connectivity conditions. JobScheduler offers control and
simplicity, and we want all apps to use it. </p>
<p>Another good option is <a href="https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmNetworkManager"><code>GCMNetworkManager</a>, part of Google Pl</p>ay Services, which offers similar job scheduling with
compatibility across legacy versions of Android.</p>
<p>We're continuing to extend <code>JobScheduler</code> and <code>GCMNetworkManager</code> to meet more of
your use cases — for example, in Android N you can now schedule background
work based on changes in Content Providers. At the same time we're starting to
deprecate some of the older patterns that can reduce system performance,
especially on low-memory devices.</p>
<p>In Android N we're removing three commonly-used implicit broadcasts —