Joe Fernandez | 306f1ce | 2015-05-01 12:51:21 -0700 | [diff] [blame] | 1 | page.title=API Overview |
Joe Fernandez | e786688 | 2015-05-06 17:15:03 -0700 | [diff] [blame] | 2 | page.keywords=preview,sdk,compatibility |
Dirk Dougherty | c85bf85 | 2015-05-24 19:56:35 -0700 | [diff] [blame] | 3 | page.tags=previewresources, androidm |
Dirk Dougherty | 7470945 | 2015-05-15 00:51:24 -0700 | [diff] [blame] | 4 | sdk.platform.apiLevel=22-mnc |
Dirk Dougherty | c85bf85 | 2015-05-24 19:56:35 -0700 | [diff] [blame] | 5 | page.image=images/cards/card-api-overview_16-9_2x.png |
Joe Fernandez | 306f1ce | 2015-05-01 12:51:21 -0700 | [diff] [blame] | 6 | @jd:body |
| 7 | |
| 8 | |
| 9 | <div id="qv-wrapper"> |
| 10 | <div id="qv"> |
| 11 | |
| 12 | <h2>In this document |
| 13 | <a href="#" onclick="hideNestedItems('#toc44',this);return false;" class="header-toggle"> |
| 14 | <span class="more">show more</span> |
| 15 | <span class="less" style="display:none">show less</span></a></h2> |
| 16 | |
| 17 | <ol id="toc44" class="hide-nested"> |
Quddus Chong | 79d03e9 | 2015-05-26 17:58:51 -0700 | [diff] [blame] | 18 | <li><a href="#app-linking">App Linking</a></li> |
| 19 | <li><a href="#backup">Auto Backup for Apps</a></li> |
Joe Fernandez | a06ac3a | 2015-05-15 15:42:17 -0700 | [diff] [blame] | 20 | <li><a href="#authentication">Authentication</a> |
Dirk Dougherty | ae70b69 | 2015-05-27 16:58:46 -0700 | [diff] [blame] | 21 | <ol> |
Joe Fernandez | a06ac3a | 2015-05-15 15:42:17 -0700 | [diff] [blame] | 22 | <li><a href="#fingerprint-authentication">Fingerprint Authentication</a></li> |
Quddus Chong | 2b95561 | 2015-06-01 14:05:12 -0700 | [diff] [blame] | 23 | <li><a href="#confirm-credential">Confirm Credential</a></li> |
Dirk Dougherty | ae70b69 | 2015-05-27 16:58:46 -0700 | [diff] [blame] | 24 | </ol> |
Joe Fernandez | 306f1ce | 2015-05-01 12:51:21 -0700 | [diff] [blame] | 25 | </li> |
Joe Fernandez | a06ac3a | 2015-05-15 15:42:17 -0700 | [diff] [blame] | 26 | <li><a href="#direct-share">Direct Share</a></li> |
| 27 | <li><a href="#voice-interactions">Voice Interactions</a></li> |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 28 | <li><a href="#assist">Assist API</a></li> |
| 29 | <li><a href="#notifications">Notifications</a></li> |
Joe Fernandez | a06ac3a | 2015-05-15 15:42:17 -0700 | [diff] [blame] | 30 | <li><a href="#bluetooth-stylus">Bluetooth Stylus Support</a></li> |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 31 | <li><a href="#ble-scanning">Improved Bluetooth Low Energy Scanning</a></li> |
| 32 | <li><a href="#hotspot">Hotspot 2.0 Release 1 Support</a></li> |
| 33 | <li><a href="#4K-display">4K Display Mode</a></li> |
| 34 | <li><a href="#behavior-themeable-colorstatelists">Themeable ColorStateLists</a></li> |
| 35 | <li><a href="#audio">Audio Features</a></li> |
| 36 | <li><a href="#video">Video Features</a></li> |
| 37 | <li><a href="#camera">Camera Features</a> |
Dirk Dougherty | ae70b69 | 2015-05-27 16:58:46 -0700 | [diff] [blame] | 38 | <ol> |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 39 | <li><a href="#flashlight">Flashlight API</a></li> |
| 40 | <li><a href="#reprocessing">Camera Reprocessing</a></li> |
Dirk Dougherty | ae70b69 | 2015-05-27 16:58:46 -0700 | [diff] [blame] | 41 | </ol> |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 42 | </li> |
| 43 | <li><a href="#afw">Android for Work Features</a></li> |
Joe Fernandez | a06ac3a | 2015-05-15 15:42:17 -0700 | [diff] [blame] | 44 | </ol> |
| 45 | |
| 46 | <h2>API Differences</h2> |
| 47 | <ol> |
Joe Fernandez | bd4ed32 | 2015-08-16 16:56:02 -0700 | [diff] [blame] | 48 | <li><a href="{@docRoot}sdk/api_diff/23/changes.html">API level 22 to 23 (Preview 3) »</a> </li> |
Joe Fernandez | 306f1ce | 2015-05-01 12:51:21 -0700 | [diff] [blame] | 49 | </ol> |
| 50 | |
| 51 | </div> |
| 52 | </div> |
| 53 | |
| 54 | <p>The M Developer Preview gives you an advance look at the upcoming release |
| 55 | for the Android platform, which offers new features for users and app |
| 56 | developers. This document provides an introduction to the most notable APIs.</p> |
| 57 | |
Joe Fernandez | bd4ed32 | 2015-08-16 16:56:02 -0700 | [diff] [blame] | 58 | <p> |
| 59 | The M Developer Preview 3 release includes the <strong>final APIs for Android 6.0 (API level |
| 60 | 23)</strong>. If you are preparing an app for use on Android 6.0, |
| 61 | <a href="{@docRoot}preview/setup-sdk.html">download the latest SDK</a> and to complete your |
| 62 | final updates and release testing. You can review the final APIs in the |
| 63 | <a href="{@docRoot}reference/packages.html">API Reference</a> and see the API differences in |
| 64 | the <a href="{@docRoot}sdk/api_diff/23/changes.html">Android API Differences Report</a>. |
| 65 | </p> |
Joe Fernandez | 306f1ce | 2015-05-01 12:51:21 -0700 | [diff] [blame] | 66 | |
Joe Fernandez | bd4ed32 | 2015-08-16 16:56:02 -0700 | [diff] [blame] | 67 | </p> |
Joe Fernandez | 306f1ce | 2015-05-01 12:51:21 -0700 | [diff] [blame] | 68 | |
Joe Fernandez | bd4ed32 | 2015-08-16 16:56:02 -0700 | [diff] [blame] | 69 | <p class="caution"><strong>Important:</strong> |
| 70 | You may now publish apps that target Android 6.0 (API level 23) to the Google Play store. |
| 71 | </p> |
| 72 | |
| 73 | <p class="note"><strong>Note:</strong> |
| 74 | If you have been working with previous preview releases and want to see the differences |
| 75 | between the final API and previous preview versions, download the additional difference |
| 76 | reports included in the <a href="{@docRoot}preview/download.html#docs">preview docs |
| 77 | reference</a>. |
| 78 | </p> |
Joe Fernandez | 306f1ce | 2015-05-01 12:51:21 -0700 | [diff] [blame] | 79 | |
Joe Fernandez | a06ac3a | 2015-05-15 15:42:17 -0700 | [diff] [blame] | 80 | <h3>Important behavior changes</h3> |
Joe Fernandez | 306f1ce | 2015-05-01 12:51:21 -0700 | [diff] [blame] | 81 | |
Joe Fernandez | a06ac3a | 2015-05-15 15:42:17 -0700 | [diff] [blame] | 82 | <p>If you have previously published an app for Android, be aware that your app might be affected |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 83 | by changes in the platform.</p> |
Joe Fernandez | 306f1ce | 2015-05-01 12:51:21 -0700 | [diff] [blame] | 84 | |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 85 | <p>Please see <a href="behavior-changes.html">Behavior Changes</a> for complete information.</p> |
Joe Fernandez | 306f1ce | 2015-05-01 12:51:21 -0700 | [diff] [blame] | 86 | |
Quddus Chong | 79d03e9 | 2015-05-26 17:58:51 -0700 | [diff] [blame] | 87 | <h2 id="app-linking">App Linking</h2> |
| 88 | <p>This preview enhances Android’s intent system by providing more powerful app linking. |
| 89 | This feature allows you to associate an app with a web domain you own. Based on this |
| 90 | association, the platform can determine the default app to use to handle a particular |
| 91 | web link and skip prompting users to select an app. To learn how to implement this feature, see |
| 92 | <a href="{@docRoot}preview/features/app-linking.html">App Linking</a>. |
| 93 | |
| 94 | <h2 id="backup">Auto Backup for Apps</h2> |
Quddus Chong | 8dacbab | 2015-06-24 15:06:52 -0700 | [diff] [blame] | 95 | <p>The system now performs automatic full data backup and restore for apps. For the |
| 96 | duration of the <a href="{@docRoot}preview/overview.html">M Developer Preview program</a>, all |
| 97 | apps are backed up, independent of which SDK version they target. After the final M SDK release, |
| 98 | your app must target M to enable this behavior; you do not need to add any additional code. If users |
| 99 | delete their Google accounts, their backup data is deleted as well. To learn how this feature |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 100 | works and how to configure what to back up on the file system, see |
Quddus Chong | 79d03e9 | 2015-05-26 17:58:51 -0700 | [diff] [blame] | 101 | <a href="{@docRoot}preview/backup/index.html">Auto Backup for Apps</a>.</p> |
Joe Fernandez | a06ac3a | 2015-05-15 15:42:17 -0700 | [diff] [blame] | 102 | |
| 103 | <h2 id="authentication">Authentication</h2> |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 104 | <p>This preview offers new APIs to let you authenticate users by using their fingerprint scans on |
Joe Fernandez | a06ac3a | 2015-05-15 15:42:17 -0700 | [diff] [blame] | 105 | supported devices, and check how recently the user was last authenticated using a device unlocking |
| 106 | mechanism (such as a lockscreen password). Use these APIs in conjunction with |
| 107 | the <a href="{@docRoot}training/articles/keystore.html">Android Keystore system</a>.</p> |
| 108 | |
| 109 | <h3 id="fingerprint-authentication">Fingerprint Authentication</h3> |
| 110 | |
| 111 | <p>To authenticate users via fingerprint scan, get an instance of the new |
Quddus Chong | 9b8e179 | 2015-08-11 15:44:45 -0700 | [diff] [blame] | 112 | {@link android.hardware.fingerprint.FingerprintManager} class and call the |
| 113 | {@link android.hardware.fingerprint.FingerprintManager#authenticate(android.hardware.fingerprint.FingerprintManager.CryptoObject, android.os.CancellationSignal, int, android.hardware.fingerprint.FingerprintManager.AuthenticationCallback, android.os.Handler) authenticate()} |
| 114 | method. Your app must be running on a compatible |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 115 | device with a fingerprint sensor. You must implement the user interface for the fingerprint |
| 116 | authentication flow on your app, and use the standard Android fingerprint icon in your UI. |
| 117 | The Android fingerprint icon ({@code c_fp_40px.png}) is included in the |
| 118 | <a href="https://github.com/googlesamples/android-FingerprintDialog" |
| 119 | class="external-link">sample app</a>. If you are developing multiple apps that use fingerprint |
| 120 | authentication, note that each app must authenticate the user’s fingerprint independently. |
Joe Fernandez | 306f1ce | 2015-05-01 12:51:21 -0700 | [diff] [blame] | 121 | </p> |
| 122 | |
Quddus Chong | 9b8e179 | 2015-08-11 15:44:45 -0700 | [diff] [blame] | 123 | <p>To use this feature in your app, first add the |
| 124 | {@link android.Manifest.permission#USE_FINGERPRINT} permission in your manifest.</p> |
Joe Fernandez | 306f1ce | 2015-05-01 12:51:21 -0700 | [diff] [blame] | 125 | |
Joe Fernandez | a06ac3a | 2015-05-15 15:42:17 -0700 | [diff] [blame] | 126 | <pre> |
| 127 | <uses-permission |
| 128 | android:name="android.permission.USE_FINGERPRINT" /> |
| 129 | </pre> |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 130 | <img src="{@docRoot}preview/images/fingerprint-screen.png" |
| 131 | srcset="{@docRoot}preview/images/fingerprint-screen.png 1x, {@docRoot}preview/images/fingerprint-screen_2x.png 2x" |
| 132 | style="float:right; margin:0 0 10px 20px" width="282" height="476" /> |
Joe Fernandez | 306f1ce | 2015-05-01 12:51:21 -0700 | [diff] [blame] | 133 | |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 134 | <p>To see an app implementation of fingerprint authentication, refer to the |
| 135 | <a href="https://github.com/googlesamples/android-FingerprintDialog" class="external-link"> |
Eric Gilmore | 0898318 | 2015-07-06 11:23:44 -0700 | [diff] [blame] | 136 | Fingerprint Dialog sample</a>. For a demonstration of how you can use these authentication |
| 137 | APIs in conjunction with other Android APIs, see the video |
| 138 | <a class="video-shadowbox-button" href="https://www.youtube.com/watch?v=VOn7VrTRlA4"> |
| 139 | Fingerprint and Payment APIs</a>.</p> |
Joe Fernandez | a06ac3a | 2015-05-15 15:42:17 -0700 | [diff] [blame] | 140 | |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 141 | <p>If you are testing this feature, follow these steps:</p> |
| 142 | <ol> |
Quddus Chong | 79d03e9 | 2015-05-26 17:58:51 -0700 | [diff] [blame] | 143 | <li>Install Android SDK Tools Revision 24.3, if you have not done so.</li> |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 144 | <li>Enroll a new fingerprint in the emulator by going to |
| 145 | <strong>Settings > Security > Fingerprint</strong>, then follow the enrollment instructions.</li> |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 146 | <li>Use an emulator to emulate fingerprint touch events with the |
| 147 | following command. Use the same command to emulate fingerprint touch events on the lockscreen or |
| 148 | in your app. |
| 149 | <pre class="no-prettyprint"> |
| 150 | adb -e emu finger touch <finger_id> |
Joe Fernandez | a06ac3a | 2015-05-15 15:42:17 -0700 | [diff] [blame] | 151 | </pre> |
Neil Fuller | 71fbb81 | 2015-11-30 09:51:33 +0000 | [diff] [blame] | 152 | <p>On Windows, you may have to run {@code telnet 127.0.0.1 <emulator-id>} followed by |
| 153 | {@code finger touch <finger_id>}. |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 154 | </p> |
| 155 | </li> |
| 156 | </ol> |
Joe Fernandez | a06ac3a | 2015-05-15 15:42:17 -0700 | [diff] [blame] | 157 | |
Quddus Chong | 2b95561 | 2015-06-01 14:05:12 -0700 | [diff] [blame] | 158 | <h3 id="confirm-credential">Confirm Credential</h3> |
Quddus Chong | 79d03e9 | 2015-05-26 17:58:51 -0700 | [diff] [blame] | 159 | <p>Your app can authenticate users based on how recently they last unlocked their device. This |
| 160 | feature frees users from having to remember additional app-specific passwords, and avoids the need |
| 161 | for you to implement your own authentication user interface. Your app should use this feature in |
| 162 | conjunction with a public or secret key implementation for user authentication.</p> |
Joe Fernandez | a06ac3a | 2015-05-15 15:42:17 -0700 | [diff] [blame] | 163 | |
Quddus Chong | 79d03e9 | 2015-05-26 17:58:51 -0700 | [diff] [blame] | 164 | <p>To set the timeout duration for which the same key can be re-used after a user is successfully |
| 165 | authenticated, call the new |
Quddus Chong | 9b8e179 | 2015-08-11 15:44:45 -0700 | [diff] [blame] | 166 | {@link android.security.keystore.KeyGenParameterSpec.Builder#setUserAuthenticationValidityDurationSeconds(int) setUserAuthenticationValidityDurationSeconds()} |
Quddus Chong | 79d03e9 | 2015-05-26 17:58:51 -0700 | [diff] [blame] | 167 | method when you set up a {@link javax.crypto.KeyGenerator} or |
Quddus Chong | 8dacbab | 2015-06-24 15:06:52 -0700 | [diff] [blame] | 168 | {@link java.security.KeyPairGenerator}.</p> |
Quddus Chong | 79d03e9 | 2015-05-26 17:58:51 -0700 | [diff] [blame] | 169 | |
| 170 | <p>Avoid showing the re-authentication dialog excessively -- your apps should try using the |
| 171 | cryptographic object first and if the the timeout expires, use the |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 172 | {@link android.app.KeyguardManager#createConfirmDeviceCredentialIntent(java.lang.CharSequence, java.lang.CharSequence) createConfirmDeviceCredentialIntent()} |
Quddus Chong | 79d03e9 | 2015-05-26 17:58:51 -0700 | [diff] [blame] | 173 | method to re-authenticate the user within your app. |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 174 | </p> |
Joe Fernandez | a06ac3a | 2015-05-15 15:42:17 -0700 | [diff] [blame] | 175 | |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 176 | <p>To see an app implementation of this feature, refer to the |
Quddus Chong | 2b95561 | 2015-06-01 14:05:12 -0700 | [diff] [blame] | 177 | <a href="https://github.com/googlesamples/android-ConfirmCredential" class="external-link"> |
| 178 | Confirm Credential sample</a>.</p> |
Joe Fernandez | a06ac3a | 2015-05-15 15:42:17 -0700 | [diff] [blame] | 179 | |
| 180 | <h2 id="direct-share">Direct Share</h2> |
| 181 | |
Quddus Chong | 276ec48 | 2015-05-28 10:13:14 -0700 | [diff] [blame] | 182 | <img src="{@docRoot}preview/images/direct-share-screen.png" |
Quddus Chong | c4d39df | 2015-05-29 10:51:56 -0700 | [diff] [blame] | 183 | srcset="{@docRoot}preview/images/direct-share-screen.png 1x, {@docRoot}preview/images/direct-share-screen_2x.png 2x" |
| 184 | style="float:right; margin:0 0 20px 30px" width="312" height="329" /> |
Joe Fernandez | a06ac3a | 2015-05-15 15:42:17 -0700 | [diff] [blame] | 185 | |
Quddus Chong | 79d03e9 | 2015-05-26 17:58:51 -0700 | [diff] [blame] | 186 | <p>This preview provides you with APIs to make sharing intuitive and quick for users. You can now |
| 187 | define <em>direct share targets</em> that launch a specific activity in your app. These direct share |
| 188 | targets are exposed to users via the <em>Share</em> menu. This feature allows users to share |
| 189 | content to targets, such as contacts, within other apps. For example, the direct share target might |
| 190 | launch an activity in another social network app, which lets the user share content directly to a |
| 191 | specific friend or community in that app.</p> |
Joe Fernandez | a06ac3a | 2015-05-15 15:42:17 -0700 | [diff] [blame] | 192 | |
Quddus Chong | 79d03e9 | 2015-05-26 17:58:51 -0700 | [diff] [blame] | 193 | <p>To enable direct share targets you must define a class that extends the |
Quddus Chong | 9b8e179 | 2015-08-11 15:44:45 -0700 | [diff] [blame] | 194 | {@link android.service.chooser.ChooserTargetService} class. Declare your |
| 195 | service in the manifest. Within that declaration, specify the |
| 196 | {@link android.Manifest.permission#BIND_CHOOSER_TARGET_SERVICE} permission and an |
| 197 | intent filter using the |
| 198 | {@link android.service.chooser.ChooserTargetService#SERVICE_INTERFACE SERVICE_INTERFACE} action.</p> |
| 199 | <p>The following example shows how you might declare the |
| 200 | {@link android.service.chooser.ChooserTargetService} in your manifest.</p> |
Joe Fernandez | a06ac3a | 2015-05-15 15:42:17 -0700 | [diff] [blame] | 201 | <pre> |
| 202 | <service android:name=".ChooserTargetService" |
| 203 | android:label="@string/service_name" |
| 204 | android:permission="android.permission.BIND_CHOOSER_TARGET_SERVICE"> |
| 205 | <intent-filter> |
| 206 | <action android:name="android.service.chooser.ChooserTargetService" /> |
| 207 | </intent-filter> |
| 208 | </service> |
| 209 | </pre> |
| 210 | |
Quddus Chong | 9b8e179 | 2015-08-11 15:44:45 -0700 | [diff] [blame] | 211 | <p>For each activity that you want to expose to |
| 212 | {@link android.service.chooser.ChooserTargetService}, add a |
Neil Fuller | 71fbb81 | 2015-11-30 09:51:33 +0000 | [diff] [blame] | 213 | {@code <meta-data>} element with the name |
Joe Fernandez | a06ac3a | 2015-05-15 15:42:17 -0700 | [diff] [blame] | 214 | {@code "android.service.chooser.chooser_target_service"} in your app manifest. |
Joe Fernandez | 306f1ce | 2015-05-01 12:51:21 -0700 | [diff] [blame] | 215 | </p> |
| 216 | |
Joe Fernandez | a06ac3a | 2015-05-15 15:42:17 -0700 | [diff] [blame] | 217 | <pre> |
| 218 | <activity android:name=".MyShareActivity” |
| 219 | android:label="@string/share_activity_label"> |
| 220 | <intent-filter> |
| 221 | <action android:name="android.intent.action.SEND" /> |
| 222 | </intent-filter> |
| 223 | <meta-data |
| 224 | android:name="android.service.chooser.chooser_target_service" |
| 225 | android:value=".ChooserTargetService" /> |
| 226 | </activity> |
| 227 | </pre> |
Joe Fernandez | 306f1ce | 2015-05-01 12:51:21 -0700 | [diff] [blame] | 228 | |
Joe Fernandez | a06ac3a | 2015-05-15 15:42:17 -0700 | [diff] [blame] | 229 | <h2 id="voice-interactions">Voice Interactions</h2> |
Joe Fernandez | 306f1ce | 2015-05-01 12:51:21 -0700 | [diff] [blame] | 230 | <p> |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 231 | This preview provides a new voice interaction API which, together with |
Joe Fernandez | a06ac3a | 2015-05-15 15:42:17 -0700 | [diff] [blame] | 232 | <a href="https://developers.google.com/voice-actions/" class="external-link">Voice Actions</a>, |
| 233 | allows you to build conversational voice experiences into your apps. Call the |
Quddus Chong | 9b8e179 | 2015-08-11 15:44:45 -0700 | [diff] [blame] | 234 | {@link android.app.Activity#isVoiceInteraction()} method to determine if a voice action triggered |
| 235 | your activity. If so, your app can use the |
| 236 | {@link android.app.VoiceInteractor} class to request a voice confirmation from the user, select |
| 237 | from a list of options, and more.</p> |
| 238 | |
| 239 | <p>Most voice interactions originate from a user voice action. A voice interaction activity can |
| 240 | also, however, start without user input. For example, another app launched through a voice |
| 241 | interaction can also send an intent to launch a voice interaction. To determine if your activity |
| 242 | launched from a user voice query or from another voice interaction app, call the |
| 243 | {@link android.app.Activity#isVoiceInteractionRoot()} method. If another app launched your |
| 244 | activity, the method returns {@code false}. Your app may then prompt the user to confirm that |
| 245 | they intended this action.</p> |
| 246 | |
| 247 | <p>To learn more about implementing voice actions, see the |
Joe Fernandez | a06ac3a | 2015-05-15 15:42:17 -0700 | [diff] [blame] | 248 | <a href="https://developers.google.com/voice-actions/interaction/" |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 249 | class="external-link">Voice Actions developer site</a>. |
Joe Fernandez | 306f1ce | 2015-05-01 12:51:21 -0700 | [diff] [blame] | 250 | </p> |
| 251 | |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 252 | <h2 id="assist">Assist API</h2> |
| 253 | <p> |
| 254 | This preview offers a new way for users to engage with your apps through an assistant. To use this |
| 255 | feature, the user must enable the assistant to use the current context. Once enabled, the user |
| 256 | can summon the assistant within any app, by long-pressing on the <strong>Home</strong> button.</p> |
Quddus Chong | 79d03e9 | 2015-05-26 17:58:51 -0700 | [diff] [blame] | 257 | <p>Your app can elect to not share the current context with the assistant by setting the |
| 258 | {@link android.view.WindowManager.LayoutParams#FLAG_SECURE} flag. In addition to the |
| 259 | standard set of information that the platform passes to the assistant, your app can share |
Quddus Chong | 9b8e179 | 2015-08-11 15:44:45 -0700 | [diff] [blame] | 260 | additional information by using the new {@link android.app.assist.AssistContent} class.</p> |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 261 | |
| 262 | <p>To provide the assistant with additional context from your app, follow these steps:</p> |
| 263 | |
| 264 | <ol> |
| 265 | <li>Implement the {@link android.app.Application.OnProvideAssistDataListener} interface.</li> |
| 266 | <li>Register this listener by using |
| 267 | {@link android.app.Application#registerOnProvideAssistDataListener(android.app.Application.OnProvideAssistDataListener) registerOnProvideAssistDataListener()}.</li> |
| 268 | <li>In order to provide activity-specific contextual information, override the |
| 269 | {@link android.app.Activity#onProvideAssistData(android.os.Bundle) onProvideAssistData()} |
Quddus Chong | 9b8e179 | 2015-08-11 15:44:45 -0700 | [diff] [blame] | 270 | callback and, optionally, the new |
| 271 | {@link android.app.Activity#onProvideAssistContent(android.app.assist.AssistContent) onProvideAssistContent()} |
| 272 | callback. |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 273 | </ol> |
| 274 | |
| 275 | <h2 id="notifications">Notifications</h2> |
| 276 | <p>This preview adds the following API changes for notifications:</p> |
| 277 | <ul> |
Quddus Chong | 9b8e179 | 2015-08-11 15:44:45 -0700 | [diff] [blame] | 278 | <li>New {@link android.app.NotificationManager#INTERRUPTION_FILTER_ALARMS} filter level that |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 279 | corresponds to the new <em>Alarms only</em> do not disturb mode.</li> |
Quddus Chong | 9b8e179 | 2015-08-11 15:44:45 -0700 | [diff] [blame] | 280 | <li>New {@link android.app.Notification#CATEGORY_REMINDER} category value that is used to |
| 281 | distinguish user-scheduled reminders from other events |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 282 | ({@link android.app.Notification#CATEGORY_EVENT}) and alarms |
| 283 | ({@link android.app.Notification#CATEGORY_ALARM}).</li> |
Quddus Chong | 9b8e179 | 2015-08-11 15:44:45 -0700 | [diff] [blame] | 284 | <li>New {@link android.graphics.drawable.Icon} class that you can attach to your notifications |
| 285 | via the |
| 286 | {@link android.app.Notification.Builder#setSmallIcon(android.graphics.drawable.Icon) setSmallIcon()} |
| 287 | and {@link android.app.Notification.Builder#setLargeIcon(android.graphics.drawable.Icon) setLargeIcon()} |
| 288 | methods. Similarly, the |
| 289 | {@link android.app.Notification.Builder#addAction(int, java.lang.CharSequence, android.app.PendingIntent) |
| 290 | addAction()} method now accepts an {@link android.graphics.drawable.Icon} object instead of a |
| 291 | drawable resource ID.</li> |
| 292 | <li>New {@link android.app.NotificationManager#getActiveNotifications()} method that allows your |
| 293 | apps to find out which of their notifications are currently alive. To see an app implementation |
| 294 | that uses this feature, see the <a href="https://github.com/googlesamples/android-ActiveNotifications" |
| 295 | class="external-link">Active Notifications sample</a>.</li> |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 296 | </ul> |
| 297 | |
Joe Fernandez | a06ac3a | 2015-05-15 15:42:17 -0700 | [diff] [blame] | 298 | <h2 id="bluetooth-stylus">Bluetooth Stylus Support</h2> |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 299 | <p>This preview provides improved support for user input using a Bluetooth stylus. Users can pair |
| 300 | and connect a compatible Bluetooth stylus with their phone or tablet. While connected, position |
| 301 | information from the touch screen is fused with pressure and button information from the stylus to |
| 302 | provide a greater range of expression than with the touch screen alone. Your app can listen for |
Quddus Chong | 9b8e179 | 2015-08-11 15:44:45 -0700 | [diff] [blame] | 303 | stylus button presses and perform secondary actions, by registering |
| 304 | {@link android.view.View.OnContextClickListener} and |
| 305 | {@link android.view.GestureDetector.OnContextClickListener} objects in your activity.</p> |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 306 | |
| 307 | <p>Use the {@link android.view.MotionEvent} methods and constants to detect stylus button |
| 308 | interactions:</p> |
| 309 | <ul> |
| 310 | <li>If the user touches a stylus with a button on the screen of your app, the |
| 311 | {@link android.view.MotionEvent#getToolType(int) getTooltype()} method returns |
| 312 | {@link android.view.MotionEvent#TOOL_TYPE_STYLUS}.</li> |
| 313 | <li>For apps targeting M Preview, the |
| 314 | {@link android.view.MotionEvent#getButtonState() getButtonState()} |
Quddus Chong | 9b8e179 | 2015-08-11 15:44:45 -0700 | [diff] [blame] | 315 | method returns {@link android.view.MotionEvent#BUTTON_STYLUS_PRIMARY} when the user |
Joe Fernandez | a06ac3a | 2015-05-15 15:42:17 -0700 | [diff] [blame] | 316 | presses the primary stylus button. If the stylus has a second button, the same method returns |
Quddus Chong | 9b8e179 | 2015-08-11 15:44:45 -0700 | [diff] [blame] | 317 | {@link android.view.MotionEvent#BUTTON_STYLUS_SECONDARY} when the user presses it. If the user presses |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 318 | both buttons simultaneously, the method returns both values OR'ed together |
Quddus Chong | 9b8e179 | 2015-08-11 15:44:45 -0700 | [diff] [blame] | 319 | ({@link android.view.MotionEvent#BUTTON_STYLUS_PRIMARY}|{@link android.view.MotionEvent#BUTTON_STYLUS_SECONDARY}).</li> |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 320 | <li> |
| 321 | For apps targeting a lower platform version, the |
| 322 | {@link android.view.MotionEvent#getButtonState() getButtonState()} method returns |
| 323 | {@link android.view.MotionEvent#BUTTON_SECONDARY} (for primary stylus button press), |
| 324 | {@link android.view.MotionEvent#BUTTON_TERTIARY} (for secondary stylus button press), or both. |
| 325 | </li> |
| 326 | </ul> |
Joe Fernandez | 306f1ce | 2015-05-01 12:51:21 -0700 | [diff] [blame] | 327 | |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 328 | <h2 id="ble-scanning">Improved Bluetooth Low Energy Scanning</h2> |
| 329 | <p> |
Quddus Chong | 9b8e179 | 2015-08-11 15:44:45 -0700 | [diff] [blame] | 330 | If your app performs performs Bluetooth Low Energy scans, use the new |
| 331 | {@link android.bluetooth.le.ScanSettings.Builder#setCallbackType(int) setCallbackType()} |
| 332 | method to specify that you want the system to notify callbacks when it first finds, or sees after a |
| 333 | long time, an advertisement packet matching the set {@link android.bluetooth.le.ScanFilter}. This |
| 334 | approach to scanning is more power-efficient than what’s provided in the previous platform version. |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 335 | </p> |
Joe Fernandez | 306f1ce | 2015-05-01 12:51:21 -0700 | [diff] [blame] | 336 | |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 337 | <h2 id="hotspot">Hotspot 2.0 Release 1 Support</h2> |
| 338 | <p> |
| 339 | This preview adds support for the Hotspot 2.0 Release 1 spec on Nexus 6 and Nexus 9 devices. To |
| 340 | provision Hotspot 2.0 credentials in your app, use the new methods of the |
Quddus Chong | 9b8e179 | 2015-08-11 15:44:45 -0700 | [diff] [blame] | 341 | {@link android.net.wifi.WifiEnterpriseConfig} class, such as |
| 342 | {@link android.net.wifi.WifiEnterpriseConfig#setPlmn(java.lang.String) setPlmn()} and |
| 343 | {@link android.net.wifi.WifiEnterpriseConfig#setRealm(java.lang.String) setRealm()}. In the |
| 344 | {@link android.net.wifi.WifiConfiguration} object, you can set the |
| 345 | {@link android.net.wifi.WifiConfiguration#FQDN} and the |
| 346 | {@link android.net.wifi.WifiConfiguration#providerFriendlyName} fields. |
| 347 | The new {@link android.net.wifi.ScanResult#isPasspointNetwork()} method indicates if a detected |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 348 | network represents a Hotspot 2.0 access point. |
| 349 | </p> |
| 350 | |
| 351 | <h2 id="4K-display">4K Display Mode</h2> |
| 352 | <p>The platform now allows apps to request that the display resolution be upgraded to 4K rendering |
| 353 | on compatible hardware. To query the current physical resolution, use the new |
Quddus Chong | 9b8e179 | 2015-08-11 15:44:45 -0700 | [diff] [blame] | 354 | {@link android.view.Display.Mode} APIs. If the UI is drawn at a lower logical resolution and is |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 355 | upscaled to a larger physical resolution, be aware that the physical resolution the |
Quddus Chong | 9b8e179 | 2015-08-11 15:44:45 -0700 | [diff] [blame] | 356 | {@link android.view.Display.Mode#getPhysicalWidth()} method returns may differ from the logical |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 357 | resolution reported by {@link android.view.Display#getSize(android.graphics.Point) getSize()}.</p> |
| 358 | |
| 359 | <p>You can request the system to change the physical resolution in your app as it runs, by setting |
Quddus Chong | 9b8e179 | 2015-08-11 15:44:45 -0700 | [diff] [blame] | 360 | the {@link android.view.WindowManager.LayoutParams#preferredDisplayModeId} property of your app’s |
| 361 | window. This feature is useful if you want to switch to 4K display resolution. While in 4K display |
| 362 | mode, the UI continues to be rendered at the original resolution (such as 1080p) and is upscaled to |
| 363 | 4K, but {@link android.view.SurfaceView} objects may show content at the native resolution.</p> |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 364 | |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 365 | <h2 id="behavior-themeable-colorstatelists">Themeable ColorStateLists</h2> |
| 366 | <p>Theme attributes are now supported in |
| 367 | {@link android.content.res.ColorStateList} for devices running the M Preview. The |
| 368 | {@link android.content.res.Resources#getColorStateList(int) getColorStateList()} and |
| 369 | {@link android.content.res.Resources#getColor(int) getColor()} methods have been deprecated. If |
Quddus Chong | 9b8e179 | 2015-08-11 15:44:45 -0700 | [diff] [blame] | 370 | you are calling these APIs, call the new |
| 371 | {@link android.content.Context#getColorStateList(int) getColorStateList()} or |
| 372 | {@link android.content.Context#getColor(int) getColor()} methods instead. These methods are also |
| 373 | available in the v4 appcompat library via {@link android.support.v4.content.ContextCompat}.</p> |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 374 | |
| 375 | <h2 id="audio">Audio Features</h2> |
| 376 | |
| 377 | <p>This preview adds enhancements to audio processing on Android, including: </p> |
Joe Fernandez | a06ac3a | 2015-05-15 15:42:17 -0700 | [diff] [blame] | 378 | <ul> |
| 379 | <li>Support for the <a href="http://en.wikipedia.org/wiki/MIDI" class="external-link">MIDI</a> |
Quddus Chong | 9b8e179 | 2015-08-11 15:44:45 -0700 | [diff] [blame] | 380 | protocol, with the new {@link android.media.midi} APIs. Use these APIs to send and receive MIDI |
Joe Fernandez | a06ac3a | 2015-05-15 15:42:17 -0700 | [diff] [blame] | 381 | events.</li> |
Quddus Chong | 9b8e179 | 2015-08-11 15:44:45 -0700 | [diff] [blame] | 382 | <li>New {@link android.media.AudioRecord.Builder} and {@link android.media.AudioTrack.Builder} |
Joe Fernandez | a06ac3a | 2015-05-15 15:42:17 -0700 | [diff] [blame] | 383 | classes to create digital audio capture and playback objects respectively, and configure audio |
| 384 | source and sink properties to override the system defaults.</li> |
| 385 | <li>API hooks for associating audio and input devices. This is particularly useful if your app |
| 386 | allows users to start a voice search from a game controller or remote control connected to Android |
Quddus Chong | 9b8e179 | 2015-08-11 15:44:45 -0700 | [diff] [blame] | 387 | TV. The system invokes the new |
| 388 | {@link android.app.Activity#onSearchRequested(android.view.SearchEvent) onSearchRequested()} |
| 389 | callback when the user starts a search. To determine if the user's input device has a built-in |
| 390 | microphone, retrieve the {@link android.view.InputDevice} object from that callback, then call the |
| 391 | new {@link android.view.InputDevice#hasMicrophone()} method.</li> |
| 392 | <li>New {@link android.media.AudioManager#getDevices(int) getDevices()} method which lets you |
| 393 | retrieve a list of all audio devices currently connected to the system. You can also register an |
| 394 | {@link android.media.AudioDeviceCallback} object if you want the system to notify your app |
| 395 | when an audio device connects or disconnects.</li> |
Joe Fernandez | a06ac3a | 2015-05-15 15:42:17 -0700 | [diff] [blame] | 396 | </ul> |
Joe Fernandez | 306f1ce | 2015-05-01 12:51:21 -0700 | [diff] [blame] | 397 | |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 398 | <h2 id="video">Video Features</h2> |
| 399 | <p>This preview adds new capabilities to the video processing APIs, including:</p> |
| 400 | <ul> |
Quddus Chong | 9b8e179 | 2015-08-11 15:44:45 -0700 | [diff] [blame] | 401 | <li>New {@link android.media.MediaSync} class which helps applications to synchronously render |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 402 | audio and video streams. The audio buffers are submitted in non-blocking fashion and are |
| 403 | returned via a callback. It also supports dynamic playback rate. |
| 404 | </li> |
Quddus Chong | 9b8e179 | 2015-08-11 15:44:45 -0700 | [diff] [blame] | 405 | <li>New {@link android.media.MediaDrm#EVENT_SESSION_RECLAIMED} event, which indicates that a |
| 406 | session opened by the app has been reclaimed by the resource manager. If your app uses DRM sessions, |
| 407 | you should handle this event and make sure not to use a reclaimed session. |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 408 | </li> |
Quddus Chong | 9b8e179 | 2015-08-11 15:44:45 -0700 | [diff] [blame] | 409 | <li>New {@link android.media.MediaCodec.CodecException#ERROR_RECLAIMED} error code, which indicates |
| 410 | that the resource manager reclaimed the media resource used by the codec. With this exception, the |
| 411 | codec must be released, as it has moved to terminal state. |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 412 | </li> |
Quddus Chong | 9b8e179 | 2015-08-11 15:44:45 -0700 | [diff] [blame] | 413 | <li>New {@link android.media.MediaCodecInfo.CodecCapabilities#getMaxSupportedInstances() |
| 414 | getMaxSupportedInstances()} interface to get a hint for the max number of the supported |
| 415 | concurrent codec instances. |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 416 | </li> |
Quddus Chong | 9b8e179 | 2015-08-11 15:44:45 -0700 | [diff] [blame] | 417 | <li>New {@link android.media.MediaPlayer#setPlaybackParams(android.media.PlaybackParams) |
| 418 | setPlaybackParams()} method to set the media playback rate for fast or |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 419 | slow motion playback. It also stretches or speeds up the audio playback automatically in |
| 420 | conjunction with the video.</li> |
| 421 | </ul> |
| 422 | |
| 423 | <h2 id="camera">Camera Features</h2> |
| 424 | <p>This preview includes the following new APIs for accessing the camera’s flashlight and for |
| 425 | camera reprocessing of images:</p> |
| 426 | |
| 427 | <h3 id="flashlight">Flashlight API</h3> |
Quddus Chong | 9b8e179 | 2015-08-11 15:44:45 -0700 | [diff] [blame] | 428 | <p>If a camera device has a flash unit, you can call the |
| 429 | {@link android.hardware.camera2.CameraManager#setTorchMode(java.lang.String, boolean) setTorchMode()} |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 430 | method to switch the flash unit’s torch mode on or off without opening the camera device. The app |
| 431 | does not have exclusive ownership of the flash unit or the camera device. The torch mode is turned |
| 432 | off and becomes unavailable whenever the camera device becomes unavailable, or when other camera |
Quddus Chong | 9b8e179 | 2015-08-11 15:44:45 -0700 | [diff] [blame] | 433 | resources keeping the torch on become unavailable. Other apps can also call |
| 434 | {@link android.hardware.camera2.CameraManager#setTorchMode(java.lang.String, boolean) setTorchMode()} |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 435 | to turn off the torch mode. When the last app that turned on the torch mode is closed, the torch |
| 436 | mode is turned off.</p> |
| 437 | |
| 438 | <p>You can register a callback to be notified about torch mode status by calling the |
Quddus Chong | 9b8e179 | 2015-08-11 15:44:45 -0700 | [diff] [blame] | 439 | {@link android.hardware.camera2.CameraManager#registerTorchCallback(android.hardware.camera2.CameraManager.TorchCallback, android.os.Handler) registerTorchCallback()} |
| 440 | method. The first time the callback is registered, it is immediately called with the torch mode |
| 441 | status of all currently known camera devices with a flash unit. If the torch mode is turned on or |
| 442 | off successfully, the |
| 443 | {@link android.hardware.camera2.CameraManager.TorchCallback#onTorchModeChanged(java.lang.String, boolean) onTorchModeChanged()} |
| 444 | method is invoked.</p> |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 445 | |
| 446 | <h3 id="reprocessing">Reprocessing API</h3> |
| 447 | <p>The {@link android.hardware.camera2 Camera2} API is extended to support YUV and private |
Quddus Chong | 8dacbab | 2015-06-24 15:06:52 -0700 | [diff] [blame] | 448 | opaque format image reprocessing. To determine if these reprocessing capabilities are available, |
| 449 | call {@link android.hardware.camera2.CameraManager#getCameraCharacteristics(java.lang.String) |
Quddus Chong | 9b8e179 | 2015-08-11 15:44:45 -0700 | [diff] [blame] | 450 | getCameraCharacteristics()} and check for the |
| 451 | {@link android.hardware.camera2.CameraCharacteristics#REPROCESS_MAX_CAPTURE_STALL} key. If a |
Quddus Chong | 8dacbab | 2015-06-24 15:06:52 -0700 | [diff] [blame] | 452 | device supports reprocessing, you can create a reprocessable camera capture session by calling |
Quddus Chong | 9b8e179 | 2015-08-11 15:44:45 -0700 | [diff] [blame] | 453 | <a href="/reference/android/hardware/camera2/CameraDevice.html#createReprocessableCaptureSession(android.hardware.camera2.params.InputConfiguration, java.util.List<android.view.Surface>, android.hardware.camera2.CameraCaptureSession.StateCallback, android.os.Handler)"><code>createReprocessableCaptureSession()</code></a>, |
| 454 | and create requests for input buffer reprocessing.</p> |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 455 | |
Quddus Chong | 9b8e179 | 2015-08-11 15:44:45 -0700 | [diff] [blame] | 456 | <p>Use the {@link android.media.ImageWriter} class to connect the input buffer flow to the camera |
Quddus Chong | 8dacbab | 2015-06-24 15:06:52 -0700 | [diff] [blame] | 457 | reprocessing input. To get an empty buffer, follow this programming model:</p> |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 458 | |
| 459 | <ol> |
Quddus Chong | 9b8e179 | 2015-08-11 15:44:45 -0700 | [diff] [blame] | 460 | <li>Call the {@link android.media.ImageWriter#dequeueInputImage()} method.</li> |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 461 | <li>Fill the data into the input buffer.</li> |
Quddus Chong | 9b8e179 | 2015-08-11 15:44:45 -0700 | [diff] [blame] | 462 | <li>Send the buffer to the camera by calling the |
| 463 | {@link android.media.ImageWriter#queueInputImage(android.media.Image) queueInputImage()} method.</li> |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 464 | </ol> |
| 465 | |
Quddus Chong | 9b8e179 | 2015-08-11 15:44:45 -0700 | [diff] [blame] | 466 | <p>If you are using a {@link android.media.ImageWriter} object together with an |
| 467 | {@link android.graphics.ImageFormat#PRIVATE} image, your app cannot access the image |
| 468 | data directly. Instead, pass the {@link android.graphics.ImageFormat#PRIVATE} image directly to the |
| 469 | {@link android.media.ImageWriter} by calling the |
| 470 | {@link android.media.ImageWriter#queueInputImage(android.media.Image) queueInputImage()} method |
| 471 | without any buffer copy.</p> |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 472 | |
Quddus Chong | 8dacbab | 2015-06-24 15:06:52 -0700 | [diff] [blame] | 473 | <p>The {@link android.media.ImageReader} class now supports |
Quddus Chong | 9b8e179 | 2015-08-11 15:44:45 -0700 | [diff] [blame] | 474 | {@link android.graphics.ImageFormat#PRIVATE} format image streams. This support allows your app to |
Quddus Chong | 8dacbab | 2015-06-24 15:06:52 -0700 | [diff] [blame] | 475 | maintain a circular image queue of {@link android.media.ImageReader} output images, select one or |
Quddus Chong | 9b8e179 | 2015-08-11 15:44:45 -0700 | [diff] [blame] | 476 | more images, and send them to the {@link android.media.ImageWriter} for camera reprocessing.</p> |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 477 | |
| 478 | <h2 id="afw">Android for Work Features</h2> |
| 479 | <p>This preview includes the following new APIs for Android for Work:</p> |
Joe Fernandez | a06ac3a | 2015-05-15 15:42:17 -0700 | [diff] [blame] | 480 | <ul> |
| 481 | <li><strong>Enhanced controls for Corporate-Owned, Single-Use devices:</strong> The Device Owner |
| 482 | can now control the following settings to improve management of |
| 483 | Corporate-Owned, Single-Use (COSU) devices: |
| 484 | <ul> |
| 485 | <li>Disable or re-enable the keyguard with the |
Quddus Chong | 9b8e179 | 2015-08-11 15:44:45 -0700 | [diff] [blame] | 486 | {@link android.app.admin.DevicePolicyManager#setKeyguardDisabled(android.content.ComponentName, boolean) |
| 487 | setKeyguardDisabled()} method.</li> |
Joe Fernandez | a06ac3a | 2015-05-15 15:42:17 -0700 | [diff] [blame] | 488 | <li>Disable or re-enable the status bar (including quick settings, notifications, and the |
| 489 | navigation swipe-up gesture that launches Google Now) with the |
Quddus Chong | 9b8e179 | 2015-08-11 15:44:45 -0700 | [diff] [blame] | 490 | {@link android.app.admin.DevicePolicyManager#setStatusBarDisabled(android.content.ComponentName, boolean) setStatusBarDisabled()} |
| 491 | method.</li> |
Joe Fernandez | a06ac3a | 2015-05-15 15:42:17 -0700 | [diff] [blame] | 492 | <li>Disable or re-enable safe boot with the {@link android.os.UserManager} constant |
Quddus Chong | 9b8e179 | 2015-08-11 15:44:45 -0700 | [diff] [blame] | 493 | {@link android.os.UserManager#DISALLOW_SAFE_BOOT}.</li> |
Joe Fernandez | a06ac3a | 2015-05-15 15:42:17 -0700 | [diff] [blame] | 494 | <li>Prevent the screen from turning off while plugged in with the |
Quddus Chong | 9b8e179 | 2015-08-11 15:44:45 -0700 | [diff] [blame] | 495 | {@link android.provider.Settings.Global#STAY_ON_WHILE_PLUGGED_IN} constant.</li> |
Joe Fernandez | a06ac3a | 2015-05-15 15:42:17 -0700 | [diff] [blame] | 496 | </ul> |
| 497 | </li> |
| 498 | <li><strong>Silent install and uninstall of apps by Device Owner:</strong> A Device Owner can now |
| 499 | silently install and uninstall applications using the {@link android.content.pm.PackageInstaller} |
| 500 | APIs, independent of Google Play for Work. You can now provision devices through a Device Owner that |
| 501 | fetches and installs apps without user interaction. This feature is useful for enabling one-touch |
| 502 | provisioning of kiosks or other such devices without activating a Google account.</li> |
| 503 | <li><strong>Silent enterprise certificate access: </strong> When an app calls |
| 504 | {@link android.security.KeyChain#choosePrivateKeyAlias(android.app.Activity,android.security.KeyChainAliasCallback,java.lang.String[],java.security.Principal[],java.lang.String,int,java.lang.String) choosePrivateKeyAlias()}, |
| 505 | prior to the user being prompted to select a certificate, the Profile or Device Owner can now call |
Quddus Chong | 9b8e179 | 2015-08-11 15:44:45 -0700 | [diff] [blame] | 506 | the {@link android.app.admin.DeviceAdminReceiver#onChoosePrivateKeyAlias(android.content.Context, android.content.Intent, int, android.net.Uri, java.lang.String) onChoosePrivateKeyAlias()} |
| 507 | method to provide the alias silently to the requesting application. This feature lets you grant |
| 508 | managed apps access to certificates without user interaction.</li> |
Joe Fernandez | a06ac3a | 2015-05-15 15:42:17 -0700 | [diff] [blame] | 509 | <li><strong>Auto-acceptance of system updates.</strong> By setting a system update policy with |
Quddus Chong | 9b8e179 | 2015-08-11 15:44:45 -0700 | [diff] [blame] | 510 | {@link android.app.admin.DevicePolicyManager#setSystemUpdatePolicy(android.content.ComponentName, android.app.admin.SystemUpdatePolicy) setSystemUpdatePolicy()}, |
| 511 | a Device Owner can now auto-accept a system |
Joe Fernandez | a06ac3a | 2015-05-15 15:42:17 -0700 | [diff] [blame] | 512 | update, for instance in the case of a kiosk device, or postpone the update and prevent it being |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 513 | taken by the user for up to 30 days. Furthermore, an administrator can set a daily time window in |
| 514 | which an update must be taken, for example during the hours when a kiosk device is not in use. When |
| 515 | a system update is available, the system checks if the Work Policy Controller app has set a system |
Joe Fernandez | a06ac3a | 2015-05-15 15:42:17 -0700 | [diff] [blame] | 516 | update policy, and behaves accordingly. |
| 517 | </li> |
| 518 | <li> |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 519 | <strong>Delegated certificate installation:</strong> A Profile or Device Owner can now grant a |
Joe Fernandez | a06ac3a | 2015-05-15 15:42:17 -0700 | [diff] [blame] | 520 | third-party app the ability to call these {@link android.app.admin.DevicePolicyManager} certificate |
| 521 | management APIs: |
| 522 | <ul> |
| 523 | <li>{@link android.app.admin.DevicePolicyManager#getInstalledCaCerts(android.content.ComponentName) |
| 524 | getInstalledCaCerts()}</li> |
| 525 | <li>{@link android.app.admin.DevicePolicyManager#hasCaCertInstalled(android.content.ComponentName,byte[]) |
| 526 | hasCaCertInstalled()}</li> |
| 527 | <li>{@link android.app.admin.DevicePolicyManager#installCaCert(android.content.ComponentName,byte[]) |
| 528 | installCaCert()}</li> |
| 529 | <li>{@link android.app.admin.DevicePolicyManager#uninstallCaCert(android.content.ComponentName,byte[]) |
| 530 | uninstallCaCert()}</li> |
| 531 | <li>{@link android.app.admin.DevicePolicyManager#uninstallAllUserCaCerts(android.content.ComponentName) |
| 532 | uninstallAllUserCaCerts()}</li> |
| 533 | <li>{@link android.app.admin.DevicePolicyManager#installKeyPair(android.content.ComponentName,java.security.PrivateKey,java.security.cert.Certificate,java.lang.String) |
| 534 | installKeyPair()}</li> |
| 535 | </ul> |
| 536 | </li> |
Quddus Chong | c4d39df | 2015-05-29 10:51:56 -0700 | [diff] [blame] | 537 | <img src="{@docRoot}preview/images/work-profile-screen.png" |
| 538 | srcset="{@docRoot}preview/images/work-profile-screen.png 1x, {@docRoot}preview/images/work-profile-screen_2x.png 2x" |
Quddus Chong | 79d03e9 | 2015-05-26 17:58:51 -0700 | [diff] [blame] | 539 | style="float:right; margin:0 0 10px 20px" width="282" height="476" /> |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 540 | <li><strong>Data usage tracking.</strong> A Profile or Device Owner can now query for the |
| 541 | data usage statistics visible in <strong>Settings > Data</strong> usage by using the new |
Quddus Chong | 9b8e179 | 2015-08-11 15:44:45 -0700 | [diff] [blame] | 542 | {@link android.app.usage.NetworkStatsManager} methods. Profile Owners are automatically granted |
Joe Fernandez | a06ac3a | 2015-05-15 15:42:17 -0700 | [diff] [blame] | 543 | permission to query data on the profile they manage, while Device Owners get access to usage data |
| 544 | of the managed primary user.</li> |
Quddus Chong | 79d03e9 | 2015-05-26 17:58:51 -0700 | [diff] [blame] | 545 | <li><strong>Runtime permission management:</strong> |
| 546 | <p>A Profile or Device Owner can set a permission policy |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 547 | for all runtime requests of all applications using |
Quddus Chong | 9b8e179 | 2015-08-11 15:44:45 -0700 | [diff] [blame] | 548 | {@link android.app.admin.DevicePolicyManager#setPermissionPolicy(android.content.ComponentName, int) |
| 549 | setPermissionPolicy()}, to either prompt the user to grant the permission or automatically grant or |
| 550 | deny the permission silently. If the latter policy is set, the user cannot |
| 551 | modify the selection made by the Profile or Device Owner within the app’s permissions screen in |
| 552 | <strong>Settings</strong>.</p></li> |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 553 | <li><strong>VPN in Settings:</strong> VPN apps are now visible in |
| 554 | <strong>Settings > More > VPN</strong>. |
Quddus Chong | 79d03e9 | 2015-05-26 17:58:51 -0700 | [diff] [blame] | 555 | Additionally, the notifications that accompany VPN usage are now specific to how that VPN is |
| 556 | configured. For Profile Owner, the notifications are specific to whether the VPN is configured |
| 557 | for a managed profile, a personal profile, or both. For a Device Owner, the notifications are |
| 558 | specific to whether the VPN is configured for the entire device.</li> |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 559 | <li><strong>Work status notification:</strong> A status bar briefcase icon now appears whenever |
| 560 | an app from the managed profile has an activity in the foreground. Furthermore, if the device is |
| 561 | unlocked directly to the activity of an app in the managed profile, a toast is displayed notifying |
| 562 | the user that they are within the work profile. |
| 563 | </li> |
Joe Fernandez | a06ac3a | 2015-05-15 15:42:17 -0700 | [diff] [blame] | 564 | </ul> |
Joe Fernandez | 306f1ce | 2015-05-01 12:51:21 -0700 | [diff] [blame] | 565 | |
| 566 | <p class="note"> |
| 567 | For a detailed view of all API changes in the M Developer Preview, see the <a href= |
Quddus Chong | 5f150d5 | 2015-05-10 16:07:27 -0700 | [diff] [blame] | 568 | "{@docRoot}preview/download.html">API Differences Report</a>. |
Glenn Kasten | dedc768 | 2015-05-29 08:11:24 -0700 | [diff] [blame] | 569 | </p> |