1page.title=Обзор API-интерфейсов
2page.keywords=предварительная версия,пакет sdk,совместимость
3page.tags=previewresources, androidm
4sdk.platform.apiLevel=22-mnc
5page.image=images/cards/card-api-overview_16-9_2x.png
6@jd:body
7
8
9<div id="qv-wrapper">
10<div id="qv">
11
12<h2>Содержание
13<a href="#" onclick="hideNestedItems('#toc44',this);return false;" class="header-toggle">
14        <span class="more">развернуть</span>
15        <span class="less" style="display:none">свернуть</span></a></h2>
16
17<ol id="toc44" class="hide-nested">
18  <li><a href="#app-linking">Связывание приложений</a></li>
19  <li><a href="#backup">Автоматическое резервное копирование для приложений</a></li>
20  <li><a href="#authentication">Авторизация</a>
21    <ol>
22      <li><a href="#fingerprint-authentication">Авторизация по отпечатку пальца</a></li>
23      <li><a href="#confirm-credential">Подтверждение учетных данных</a></li>
24    </ol>
25  </li>
26  <li><a href="#direct-share">Прямой обмен контентом</a></li>
27  <li><a href="#voice-interactions">Голосовой интерфейс</a></li>
28  <li><a href="#assist">API-интерфейс помощника</a></li>
29  <li><a href="#notifications">Уведомления</a></li>
30  <li><a href="#bluetooth-stylus">Поддержка пера Bluetooth</a></li>
31  <li><a href="#ble-scanning">Улучшенное сканирование Bluetooth с низким потреблением энергии</a></li>
32  <li><a href="#hotspot">Поддержка Hotspot 2.0, выпуск 1</a></li>
33  <li><a href="#4K-display">Режим отображения в формате 4K</a></li>
34  <li><a href="#behavior-themeable-colorstatelists">Метод ColorStateLists для работы с темами</a></li>
35  <li><a href="#audio">Работа с аудио</a></li>
36  <li><a href="#video">Работа с видео</a></li>
37  <li><a href="#camera">Возможности камеры</a>
38    <ol>
39      <li><a href="#flashlight">API-интерфейс вспышки</a></li>
40      <li><a href="#reprocessing">Повторная обработка изображения с камеры</a></li>
41    </ol>
42  </li>
43  <li><a href="#afw">Возможности Android for Work</a></li>
44</ol>
45
46<h2>Различия между API-интерфейсами</h2>
47<ol>
48<li><a href="{@docRoot}preview/download.html">API уровня 22 в M Preview &raquo;</a> </li>
49</ol>
50
51</div>
52</div>
53
54<p>M Developer Preview — ознакомительная версия предстоящего выпуска платформы Android,
55в котором реализованы новые возможности как для пользователей, так и для
56разработчиков приложений. В этой статье мы расскажем о наиболее интересных API-интерфейсах.</p>
57
58<p>Версия M Developer Preview предназначена для тех, <strong>кто хочет первым ознакомиться с новой платформой</strong>,
59а также для <strong>тестировщиков</strong>. <a href="{@docRoot}preview/setup-sdk.html">M Developer Preview — прекрасная возможность
60</a>повлиять на вектор развития
61платформы Android.
62Мы с нетерпением ждем ваших отзывов!</p>
63
64<p class="caution"><strong>Внимание!</strong> Не публикуйте в магазине Google Play приложения,
65предназначенные для M Developer Preview.</p>
66
67<p class="note"><strong>Примечание.</strong> В этой статье часто упоминаются классы и методы,
68для которых на сайте <a href="{@docRoot}">developer.android.com</a> пока еще нет справочных материалов. Такие элементы API-интерфейса обозначаются здесь следующим образом:
69{@code code style} (без гиперссылок). Чтобы ознакомиться с предварительной документацией по этим элементам,
70загрузите <a href="{@docRoot}preview/download.html#docs">справочное руководство по предварительной версии</a>.</p>
71
72<h3>Важные изменения в работе приложений</h3>
73
74<p>Если вы ранее публиковали приложения для Android, то примите во внимание, что изменения в платформе могут повлиять
75на работу опубликованных приложений.</p>
76
77<p>Подробные сведения представлены в статье <a href="behavior-changes.html">Изменения в работе</a>.</p>
78
79<h2 id="app-linking">Связывание приложений</h2>
80<p>В M Preview улучшена система намерений Android за счет более эффективного связывания приложений.
81Теперь у вас есть возможность связывать приложения с вашими собственными веб-доменами. Благодаря этому
82платформа может сама, без вмешательства пользователя, определить приложение, которое будет использоваться по умолчанию
83для обработки определенной веб-ссылки. О том, как реализовать такую возможность, можно почитать в статье
84<a href="{@docRoot}preview/features/app-linking.html">Связывание приложений</a>.
85
86<h2 id="backup">Автоматическое резервное копирование для приложений</h2>
87<p>Теперь система автоматически выполняет полное резервное копирование и восстановление данных ваших приложений. Для приложений,
88написанных под M Preview, эта функция включена по умолчанию — вам даже не нужно добавлять отдельный код. Если пользователь решит удалить свою учетную запись Google, все резервные копии его данных также будут удалены.
89 О том, как работает эта функция и как настроить параметры резервного копирования элементов файловой системы,
90 рассказано в статье
91<a href="{@docRoot}preview/backup/index.html">Автоматическое резервное копирование для приложений</a>.</p>
92
93<h2 id="authentication">Авторизация</h2>
94<p>В M Preview представлены новые API-интерфейсы, которые позволяют авторизовать пользователей по отпечатку пальца
95(на устройствах, поддерживающих такую возможность), а также подтвердить учетные данные, если пользователь недавно авторизовался через механизмы разблокировки устройства
96(например, вводил пароль для разблокировки экрана). Эти API-интерфейсы рекомендуется использовать совместно с
97<a href="{@docRoot}training/articles/keystore.html">системой хранилища ключей Android</a>.</p>
98
99<h3 id="fingerprint-authentication">Авторизация по отпечатку пальца</h3>
100
101<p>Чтобы авторизовать пользователя по отпечатку пальца, получите экземпляр нового класса
102{@code android.hardware.fingerprint.FingerprintManager} и вызовите метод
103{@code FingerprintManager.authenticate()}. Эта функция доступна для совместимых
104устройств, оснащенных сканером отпечатков пальцев. Прежде всего, вам необходимо реализовать в своем приложении пользовательский интерфейс проверки
105подлинности по отпечатку пальца, а также использовать для него стандартный значок отпечатка пальца Android.
106Этот значок ({@code c_fp_40px.png}) вы можете найти в
107<a href="https://github.com/googlesamples/android-FingerprintDialog" class="external-link">примере приложения</a>. При разработке нескольких приложений, использующих функцию авторизации по отпечатку пальца,
108помните, что каждое из них должно самостоятельно выполнять проверку подлинности.
109</p>
110
111<p>Чтобы реализовать эту функцию, сначала добавьте в файл манифеста разрешение {@code USE_FINGERPRINT}.
112</p>
113
114<pre>
115&lt;uses-permission
116        android:name="android.permission.USE_FINGERPRINT" /&gt;
117</pre>
118
119<img src="{@docRoot}preview/images/fingerprint-screen.png" srcset="{@docRoot}preview/images/fingerprint-screen.png 1x, {@docRoot}preview/images/fingerprint-screen_2x.png 2x" style="float:right; margin:0 0 10px 20px" width="282" height="476" />
120
121<p>Пример такой проверки подлинности вы найдете в
122<a href="https://github.com/googlesamples/android-FingerprintDialog" class="external-link">примере
123диалогового окна авторизации по отпечатку пальца</a>.</p>
124
125<p>Если вы тестируете эту функцию, выполните следующие действия:</p>
126<ol>
127<li>Установите инструменты SDK Android (версию 24.3), если у вас их еще нет.</li>
128<li>Зарегистрируйте в эмуляторе новый отпечаток пальца (в разделе
129<strong>Настройки &gt; Безопасность &gt; Отпечаток пальца</strong>) и следуйте дальнейшим инструкциям.</li>
130<li>Воспользовавшись указанной ниже командой, сымитируйте в эмуляторе события касания для проверки отпечатка пальца.
131 С помощью этой же команды сымитируйте события касания для проверки отпечатка пальца на экране блокировки или в
132своем приложении.
133<pre class="no-prettyprint">
134adb -e emu finger touch &lt;finger_id&gt;
135</pre>
136<p>В Windows, возможно, потребуется выполнить команду {@code telnet 127.0.0.1 &lt;emulator-id&gt;}, а затем
137{@code finger touch &lt;finger_id&gt;}.
138</p>
139</li>
140</ol>
141
142<h3 id="confirm-credential">Подтверждение учетных данных</h3>
143<p>Для авторизации пользователей ваше приложение может обратиться к сведениям о том, как давно они разблокировали свое устройство в последний раз. Эта функция
144избавляет пользователя от необходимости запоминать отдельные пароли для каждого приложения, а вас — от необходимости
145реализовывать собственный пользовательский интерфейс авторизации. В приложении эту функцию следует
146использовать совместно с реализацией открытого или секретного ключа для авторизации пользователей.</p>
147
148<p>Чтобы задать временя ожидания, в течение которого после успешной
149авторизации можно использовать ключ повторно, вызовите новый метод
150{@code android.security.keystore.KeyGenParameterSpec.setUserAuthenticationValidityDurationSeconds()}
151при настройке {@link javax.crypto.KeyGenerator} или
152{@link java.security.KeyPairGenerator}. На сегодняшний день эта функция совместима с симметричными криптографическими
153операциями.</p>
154
155<p>Не стоит слишком часто отображать диалоговое окно повторной авторизации — ваше
156приложение должно сначала попробовать использовать криптографический объект и только потом, если окажется, что время ожидания истекло, обратиться к методу
157{@link android.app.KeyguardManager#createConfirmDeviceCredentialIntent(java.lang.CharSequence, java.lang.CharSequence) createConfirmDeviceCredentialIntent()}
158для повторной авторизации пользователя.
159</p>
160
161<p>Как можно реализовать эту функцию, показано в
162<a href="https://github.com/googlesamples/android-ConfirmCredential" class="external-link">примерепроверки учетных данных</a>.
163</p>
164
165<h2 id="direct-share">Прямой обмен контентом</h2>
166
167<img src="{@docRoot}preview/images/direct-share-screen.png" srcset="{@docRoot}preview/images/direct-share-screen.png 1x, {@docRoot}preview/images/direct-share-screen_2x.png 2x" style="float:right; margin:0 0 20px 30px" width="312" height="329" />
168
169<p>M Preview содержит API-интерфейсы для интуитивно понятного и быстрого обмена контентом между пользователями. Теперь вы можете
170определить <em>целевые объекты прямого обмена</em>, которые будут запускать определенную операцию в приложении
171и открываться в меню <em>Поделиться</em>. С помощью данной функции пользователи могут обмениваться контентом
172с целевыми объектами, такими как контакты, в других приложениях. Например, целевой объект прямого обмена может запустить операцию
173в другом приложении социальной сети, что позволит пользователю напрямую делиться контентом с другом
174или членами сообщества через это приложение.</p>
175
176<p>Чтобы включить использование целевых объектов прямого обмена, необходимо определить класс, который наследует класс
177{@code android.service.} <br>
178{@code chooser.ChooserTargetService}. Объявите
179{@code ChooserTargetService} в манифесте. В этом объявлении укажите разрешение
180{@code BIND_CHOOSER_TARGET_SERVICE} и фильтр намерений с помощью действия
181{@code SERVICE_INTERFACE}.</p>
182<p>В примере ниже показано, как объявить {@code ChooserTargetService}
183 в вашем манифесте.</p>
184<pre>
185&lt;service android:name=".ChooserTargetService"
186        android:label="&#64;string/service_name"
187        android:permission="android.permission.BIND_CHOOSER_TARGET_SERVICE"&gt;
188    &lt;intent-filter&gt;
189        &lt;action android:name="android.service.chooser.ChooserTargetService" /&gt;
190    &lt;/intent-filter&gt;
191&lt;/service&gt;
192</pre>
193
194<p>Для каждого действия, которое необходимо сделать доступным для {@code ChooserTargetService}, добавьте в манифест вашего приложения элемент
195{@code &lt;meta-data&gt;} с именем
196{@code "android.service.chooser.chooser_target_service"}.
197</p>
198
199<pre>
200&lt;activity android:name=".MyShareActivity”
201        android:label="&#64;string/share_activity_label"&gt;
202    &lt;intent-filter>
203        &lt;action android:name="android.intent.action.SEND" /&gt;
204    &lt;/intent-filter>
205&lt;meta-data
206        android:name="android.service.chooser.chooser_target_service"
207        android:value=".ChooserTargetService" /&gt;
208&lt;/activity>
209</pre>
210
211<h2 id="voice-interactions">Голосовой интерфейс</h2>
212<p>
213В M Preview представлен новый голосовой API-интерфейс, который, наряду с
214<a href="https://developers.google.com/voice-actions/" class="external-link">голосовыми командами</a>,
215позволяет встраивать в приложение диалоговое голосовое взаимодействие. Вызовите метод
216{@code android.app.Activity.isVoiceInteraction()}, чтобы определить, была ли операция запущена
217в ответ на голосовую команду. Если это так, ваше приложение может использовать класс
218{@code android.app.VoiceInteractor}, чтобы получить голосовое подтверждение от пользователя, предложить ему список вариантов
219на выбор и многое другое. Подробнее о реализации голосовых команд можно почитать в
220<a href="https://developers.google.com/voice-actions/interaction/" class="external-link">руководстве к голосовому интерфейсу</a>.
221</p>
222
223<h2 id="assist">API-интерфейс помощника</h2>
224<p>
225M Preview предлагает новый способ взаимодействия пользователей с приложением — взаимодействие посредством помощника. Для этого
226пользователю необходимо разришить помощнику использовать текущий контекст, после чего он сможет вызывать помощника
227в любом приложении, удерживая кнопку <strong>Домой</strong>.</p>
228<p>Разработчик может также запретить приложению сообщать помощнику текущий контекст. Для этого установите флаг
229{@link android.view.WindowManager.LayoutParams#FLAG_SECURE}. Кроме стандартного набора
230информации, который платформа передает помощнику, ваше приложение может сообщать ему дополнительные
231сведения посредством нового класса {@code android.app.Activity.AssistContent}.</p>
232
233<p>Чтобы предоставить помощнику дополнительный контекст из вашего приложения, выполните следующие действия:</p>
234
235<ol>
236<li>Реализуйте интерфейс {@link android.app.Application.OnProvideAssistDataListener}.</li>
237<li>Зарегистрируйте этот приемник с помощью
238{@link android.app.Application#registerOnProvideAssistDataListener(android.app.Application.OnProvideAssistDataListener) registerOnProvideAssistDataListener()}.</li>
239<li>Для предоставления контекста, относящего к конкретной операции, переопределите метод обратного вызова
240{@link android.app.Activity#onProvideAssistData(android.os.Bundle) onProvideAssistData()},
241а также, при желании, новый метод обратного вызова{@code Activity.onProvideAssistContent()}.
242</ol>
243
244<h2 id="notifications">Уведомления</h2>
245<p>В API-интерфейс уведомлений внесены следующие изменения:</p>
246<ul>
247  <li>{@code NotificationListenerService.INTERRUPTION_FILTER_ALARMS} — новый уровень фильтрации,
248соответствующий новому режиму «Не беспокоить» <em>Только будильник</em>.</li>
249  <li>{@code Notification.CATEGORY_REMINDER} — новое значение категории, позволяющее отличить
250установленные пользователем напоминания от других событий
251({@link android.app.Notification#CATEGORY_EVENT}) и будильников
252({@link android.app.Notification#CATEGORY_ALARM}).</li>
253  <li>{@code android.graphics.drawable.Icon} — новый класс, который можно добавить к уведомлениям
254с помощью методов {@code Notification.Builder.setSmallIcon(Icon)} и
255{@code Notification.Builder.setLargeIcon(Icon)}.</li>
256  <li>{@code NotificationManager.getActiveNotifications()} — новый метод, с помощью которого ваше приложение
257может определить, какие из уведомлений в настоящее время активны. Если хотите взглянуть, как может быть реализовано приложение
258с этой функцией, пройдите по ссылке: <a href="https://github.com/googlesamples/android-ActiveNotifications" class="external-link">Пример активных уведомлений</a>.</li>
259</ul>
260
261<h2 id="bluetooth-stylus">Поддержка пера Bluetooth</h2>
262<p>В M Preview улучшена поддержка ввода с помощью пера Bluetooth. Пользователи могут подключить
263совместимое перо Bluetooth к своему смартфону или планшету.  Когда перо подключено, данные о его
264положении объединяются со сведениями о степени нажима и нажатия кнопки на пере,
265и таким образом при сенсорном вводе используются не только возможности сенсорного экрана. Ваше приложение может отслеживать
266нажатия кнопки пера и выполнять дополнительные действия, регистрируя в операции новые методы обратного вызова
267{@code View.onStylusButtonPressListener} и
268{@code GestureDetector.OnStylusButtonPressListener}.</p>
269
270<p>Для определения нажатий кнопок пера используйте методы и константы {@link android.view.MotionEvent}:
271</p>
272<ul>
273<li>Если пользователь касается пером кнопки на экране приложения, метод
274{@link android.view.MotionEvent#getToolType(int) getTooltype()} возвращает
275{@link android.view.MotionEvent#TOOL_TYPE_STYLUS}.</li>
276<li>В приложениях, разработанных для M Preview, при нажатии пользователем на основную кнопку на пере, метод
277{@link android.view.MotionEvent#getButtonState() getButtonState()}
278возвращает{@code MotionEvent.STYLUS_BUTTON_PRIMARY}.
279 Если перо оснащено дополнительной кнопкой, то при нажатии на нее этот метод возвращает
280{@code MotionEvent.STYLUS_BUTTON_SECONDARY}. При нажатии пользователем
281на обе кнопки одновременно, метод возвращает оба значения через оператор «OR»
282({@code STYLUS_BUTTON_PRIMARY|STYLUS_BUTTON_SECONDARY}).</li>
283<li>
284В приложениях, разработанных для более ранних версий платформы, метод
285{@link android.view.MotionEvent#getButtonState() getButtonState()} возвращает
286{@link android.view.MotionEvent#BUTTON_SECONDARY} (при нажатии на основную кнопку на пере),
287{@link android.view.MotionEvent#BUTTON_TERTIARY} (при нажатии дополнительной кнопки на пере) или оба этих значения.
288</li>
289</ul>
290
291<h2 id="ble-scanning">Улучшенное сканирование Bluetooth с низким потреблением энергии</h2>
292<p>
293Если ваше приложение выполняет сканирование Bluetooth с низким потреблением энергии, вы можете при помощи нового метода
294{@code android.bluetooth.le.ScanSettings.Builder.setCallbackType()} указать, что обратные вызовы следует уведомлять только в случае, если прежде обнаружен пакет объявления,
295 совпадающий с заданным фильтром
296{@link android.bluetooth.le.ScanFilter}, или если он не обнаруживается в течение заданного периода времени.
297 Такой подход к сканированию обеспечивает еще большую экономию энергии, чем это было возможно в предыдущей
298версии платформы.
299</p>
300
301<h2 id="hotspot">Поддержка Hotspot 2.0, выпуск 1</h2>
302<p>
303В M Preview включена поддержка Hotspot 2.0 (выпуск 1) для устройств Nexus 6 и Nexus 9. Для
304предоставления учетных данных Hotspot 2.0 в вашем приложении используйте новые методы класса
305{@link android.net.wifi.WifiEnterpriseConfig}, такие как {@code setPlmn()} и
306{@code setRealm()}. В объекте {@link android.net.wifi.WifiConfiguration} можно задать поля
307{@link android.net.wifi.WifiConfiguration#FQDN} и {@code providerFriendlyName}.
308Новое свойство{@code ScanResult.PasspointNetwork} показывает, является ли обнаруженная
309сеть точкой доступа Hotspot 2.0.
310</p>
311
312<h2 id="4K-display">Режим отображения в формате 4K</h2>
313<p>Теперь платформа позволяет приложениям запрашивать увеличение разрешения экрана до 4K при обработке изображения
314на совместимом устройстве. Чтобы запросить текущее физическое разрешение, используйте новые API-интерфейсы
315{@code android.view.Display.Mode}. Если элементы пользовательского интерфейса, отрисованные в более низком логическом разрешении, масштабируются до
316более высокого физического разрешения, обратите внимание, что метод физического разрешения
317{@code Display.Mode.getPhysicalWidth()} возвращает результат, который может отличаться от результата выполнения метода логического разрешения
318{@link android.view.Display#getSize(android.graphics.Point) getSize()} .</p>
319
320<p>Можно отправить запрос системе на изменение физического разрешения в активном приложении, задав для окна вашего приложения свойство
321{@code WindowManager.LayoutParams.preferredDisplayModeId}.  Эта
322функция особенно полезна в случаях, когда требуется переключиться на разрешение экрана 4K. В режиме отображения в формате 4K элементы
323пользовательского интерфейса отрисовываются в исходном разрешении (например, 1080p) и масштабируются до 4K, однако содержимое
324{@link android.view.SurfaceView} объектов может отображаться с использованием основного разрешения.</p>
325
326<h2 id="behavior-themeable-colorstatelists">Метод ColorStateLists для работы с темами</h2>
327<p>Теперь метод
328{@link android.content.res.ColorStateList} для устройств под управлением M Preview поддерживает атрибуты темы. Методы
329{@link android.content.res.Resources#getColorStateList(int) getColorStateList()} и
330{@link android.content.res.Resources#getColor(int) getColor()} уже неактуальны. Если вы
331вызываете эти API-интерфейсы, вызовите вместо них новые методы {@code Context.getColorStateList()} или
332{@code Context.getColor()}, Доступные также в библиотеке v4 appcompat
333посредством {@link android.support.v4.content.ContextCompat}.</p>
334
335<h2 id="audio">Работа с аудио</h2>
336
337<p>В M Preview реализован ряд улучшений в области обработки аудиофайлов системой Android, включая следующие: </p>
338<ul>
339  <li>Новые API-интерфейсы {@code android.media.midi}, поддерживающие протокол <a href="http://en.wikipedia.org/wiki/MIDI" class="external-link">MIDI</a>
340 для отправки и получения событий
341MIDI.</li>
342  <li>Новые классы: {@code android.media.AudioRecord.Builder} позволяет создавать объекты захвата цифрового аудио, а {@code android.media.AudioTrack.Builder} — объекты воспроизведения,
343а также осуществлять настройку источника
344аудио и свойств приемника, переопределяя исходные системные настройки.</li>
345  <li>Обработчики API-интерфейсов предназначены для связывания аудиофайлов и устройств ввода. Это особенно полезно в случае, если ваше приложение
346предоставляет возможность выполнять голосовой поиск с помощью игрового контроллера или пульта дистанционного управления, подключенного к Android
347TV. Когда пользователь запустит поиск, система вызовет новый метод обратного вызова {@code android.app.Activity.onSearchRequested()}.
348 Чтобы определить, оснащено ли устройство ввода встроенным микрофоном, получите из этого метода обратного вызова объект
349{@link android.view.InputDevice} и вызовите новый метод
350{@code InputDevice.hasMic()}.</li>
351  <li>Новый класс {@code android.media.AudioDevicesManager}, позволяющий пользователю получить список всех
352подключенных источников аудио и приемников. Также можно указать объект
353{@code android.media.OnAudioDeviceConnectionListener}, если требуется, чтобы приложение
354получало уведомления о подключении или отключении аудиоустройств.</li>
355</ul>
356
357<h2 id="video">Работа с видео</h2>
358<p>В M Preview вы обнаружите новые возможности API-интерфейсов для обработки видео, в том числе:</p>
359<ul>
360<li>Новый класс {@code android.media.MediaSync} обеспечивает синхронную обработку потоков
361аудио и видео. Буферы аудио отправляются неблокируемым способом и возвращаются посредством
362обратного вызова. Также имеется поддержка динамической скорости воспроизведения.
363</li>
364<li>Новое событие {@code MediaDrm.EVENT_SESSION_RECLAIMED} указывает на то, что сеанс, запущенный
365приложением, освобожден диспетчером ресурсов. Если в вашем приложении используются сеансы DRM, то это событие
366необходимо обработать и убедиться в том, что освобожденный сеанс не используется.
367</li>
368<li>Новый код ошибки {@code MediaCodec.CodecException.ERROR_RECLAIMED} указывает на то, что
369диспетчер ресурсов освободил ресурс мультимедиа, используемый кодеком. Во всех остальных случаях кодек должен
370быть освобожден, поскольку его необходимо перевести в конечное состояние.
371</li>
372<li>Новый интерфейс {@code MediaCodecInfo.CodecCapabilities.getMaxSupportedInstances()} позволяет узнать максимальное количество
373 экземпляров кодека, которые могут выполняться одновременно.
374</li>
375<li>Новый {@code MediaPlayer.setPlaybackParams()} метод задает скорость при ускоренном или
376замедленном воспроизведении мультимедиа. Он также позволяет автоматически замедлять или ускорять воспроизведение аудио синхронно с
377видео.</li>
378</ul>
379
380<h2 id="camera">Возможности камеры</h2>
381<p>В M Preview представлены следующие API-интерфейсы для вспышки камеры и повторной обработки
382изображений камерой.</p>
383
384<h3 id="flashlight">API-интерфейс вспышки</h3>
385<p>Если камера оснащена вспышкой, вы можете вызвать метод{@code CameraManager.setTorchMode()},
386чтобы включить или отключить режим фонарика, не запуская камеру. Приложение
387не может заполучить вспышку или камеру в единоличное пользование. Режим фонарика отключается
388и становится недоступен, когда камера недоступна или ресурсов камеры недостаточно для использования вспышки в качестве
389фонарика. Кроме того, другие приложения могут вызывать метод {@code setTorchMode()}
390для отключения режима фонарика. При закрытии приложения, которое включило режим фонарика, этот режим
391отключается.</p>
392
393<p>Чтобы зарегистрировать обратный вызов для уведомления о режиме фонарика, вызовите метод
394{@code CameraManager.registerTorchCallback()}. При первой регистрации обратного вызова
395он сразу же вызывается со сведениями о состоянии режима фонарика для всех известных к настоящему моменту устройств,
396оснащенных вспышкой. При успешном включении или отключении фонарика вызывается метод
397{@code CameraManager.TorchCallback.onTorchModeChanged()}.</p>
398
399<h3 id="reprocessing">API-интерфейс повторной обработки</h3>
400<p>API-интерфейс {@link android.hardware.camera2 Camera2} теперь поддерживает повторную обработку цветовых моделей YUV и изображений в собственном
401формате непрозрачности. Чтобы определить, возможна ли повторная обработка, приложение использует метод
402{@code CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES}. Если устройство поддерживает повторную обработку,
403вы можете создать сеанс захвата изображения с камеры с возможностью повторной обработки, вызвав метод
404{@code CameraDevice.createReprocessableCaptureSession()}, а затем создать запросы на повторную обработку буфера
405входных данных.</p>
406
407<p>Чтобы подключить поток буфера входных данных к модулю повторной обработки изображения с камеры, используйте класс
408{@code ImageWriter}. Чтобы получить пустой буфер, выполните следующие действия:</p>
409
410<ol>
411<li>Вызовите метод {@code ImageWriter.dequeueInputImage()}.</li>
412<li>Заполните буфер входными данными.</li>
413<li>Отправьте буфер в камеру, вызвав метод {@code ImageWriter.queueInputImage()}.</li>
414</ol>
415
416<p>Если вы используете объект {@code ImageWriter} вместе с изображением
417{@code android.graphics.ImageFormat.PRIVATE}, вашему приложению не удастся получить доступ к изображению
418напрямую. Вместо этого передайте изображение {@code ImageFormat.PRIVATE} прямо в
419{@code ImageWriter}, вызвав метод {@code ImageWriter.queueInputImage()} без копии
420буфера.</p>
421
422<p>Класс {@code ImageReader} теперь поддерживает потоки изображений в формате {@code android.graphics.ImageFormat.PRIVATE}.
423 Благодаря этому ваше приложение может организовать циклическую очередь выходных изображений
424{@code ImageReader}, выбрать одно или несколько изображений и отправить их в
425{@code ImageWriter} для повторной обработки камерой.</p>
426
427<h2 id="afw">Возможности Android for Work</h2>
428<p>В M Preview представлены новые API-интерфейсы для Android for Work:</p>
429<ul>
430  <li><strong>Улучшенные элементы управления для корпоративных специализированных устройств.</strong> Владельцу устройства
431теперь доступны новые возможности управления
432корпоративными специализированными устройствами при помощие следующих настроек:
433  <ul>
434    <li>Отключение или повторное включение блокировки клавиатуры с помощью метода
435{@code DevicePolicyManager.setKeyguardEnabledState()}.</li>
436    <li>Отключение или повторное включение строки состояния (включая быстрые настройки, уведомления и
437запуск Google Now путем проведения пальцем по экрану) с помощью метода
438{@code DevicePolicyManager.setStatusBarEnabledState()}.</li>
439    <li>Отключение и повторное включение безопасной загрузки с помощью константы
440{@code DISALLOW_SAFE_BOOT} {@link android.os.UserManager}.</li>
441    <li>Предотвращение отключения экрана, если устройство питается от сети, с помощью константы
442{@code STAY_ON_WHILE_PLUGGED_IN} {@link android.provider.Settings.Global}.</li>
443  </ul>
444  </li>
445  <li><strong>Автоматические установка и удаление приложений владельцами устройств.</strong> Владелец устройства теперь может автоматически
446устанавливать и удалять приложения с помощью API-интерфейсов {@link android.content.pm.PackageInstaller},
447независимо от Google Play for Work. Теперь вы можете подготавливать устройства с помощью компонента «Владелец устройства», который
448получает и устанавливает приложения без участия пользователя. Такая возможность особенно полезна тем, что позволяет подготавливать
449киоски или иные подобные устройства одним касанием, не активируя аккаунт Google.</li>
450<li><strong>Автоматический доступ к корпоративному сертификату.</strong> Теперь, когда приложение вызывает метод
451{@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()},
452владелец профиля или устройства, прежде чем ему будет предложено выбрать сертификат, может вызывать метод
453{@code DeviceAdminReceiver.onChoosePrivateKeyAlias()}, который автоматически предоставит предложению псевдоним.
454 С помощью этой возможности вы можете предоставлять управляемым приложениям доступ к сертификатам без
455вмешательства пользователя.</li>
456<li><strong>Автоматическое принятие обновлений системы.</strong> Настройка параметров обновления системы с помощью
457{@code DevicePolicyManager.setSystemUpdatePolicy()} теперь позволяет компоненту «Владелец устройства» автоматически принять обновление системы
458(например, в киоске) или отложить его на период до 30 дней, причем пользователь
459тоже не сможет установить обновление до истечения этого срока. Более того, администратор может задать ежедневный временной интервал, когда устройство будет принимать
460обновления (например, во те часы, когда киоск не используется). При наличии доступного
461обновления система проверяет, заданы ли параметры обновления системы приложением «Параметры работы»
462, и выполняет соответствующие действия.
463</li>
464<li>
465<strong>Делегированная установка сертификата.</strong> Владелец профиля или устройства теперь может предоставлять
466стороннему приложению возможность вызывать следующие API-интерфейсы управления сертификатом
467{@link android.app.admin.DevicePolicyManager}:
468<ul>
469  <li>{@link android.app.admin.DevicePolicyManager#getInstalledCaCerts(android.content.ComponentName)
470getInstalledCaCerts()}</li>
471  <li>{@link android.app.admin.DevicePolicyManager#hasCaCertInstalled(android.content.ComponentName,byte[])
472hasCaCertInstalled()}</li>
473  <li>{@link android.app.admin.DevicePolicyManager#installCaCert(android.content.ComponentName,byte[])
474installCaCert()}</li>
475  <li>{@link android.app.admin.DevicePolicyManager#uninstallCaCert(android.content.ComponentName,byte[])
476uninstallCaCert()}</li>
477  <li>{@link android.app.admin.DevicePolicyManager#uninstallAllUserCaCerts(android.content.ComponentName)
478uninstallAllUserCaCerts()}</li>
479  <li>{@link android.app.admin.DevicePolicyManager#installKeyPair(android.content.ComponentName,java.security.PrivateKey,java.security.cert.Certificate,java.lang.String)
480installKeyPair()}</li>
481</ul>
482</li>
483<li><strong>Корпоративная настройка защиты от сброса параметров до заводских настроек.</strong> При подготовке компонента «Владелец устройства» теперь
484имеется возможность настроить параметры разблокировки защиты от сброса параметров до заводских настроек (FRP) путем задания пакета
485{@code DeviceManagerPolicy.EXTRA_PROVISIONING_RESET_PROTECTION_PARAMETERS}. Приложение NFC Programmer
486может после перезагрузки устройства предоставить эти параметрыс целью разблокировки FRP и его подготовки
487(без необходимости запрашивать ранее настроенную учетную запись Google). Если не изменить эти параметры,
488заводские настройки сохранятся не позволят активировать устройство без ввода активированных ранее
489учетных данных Google.
490<p>Кроме того, задав ограничения на использование служб Google Play, компонент «Владелец устройства» может указать альтернативные учетные записи
491Google для разблокировки FRP и замены учетных записей, активированных на устройстве.</p>
492</li>
493<img src="{@docRoot}preview/images/work-profile-screen.png" srcset="{@docRoot}preview/images/work-profile-screen.png 1x, {@docRoot}preview/images/work-profile-screen_2x.png 2x" style="float:right; margin:0 0 10px 20px" width="282" height="476" />
494<li><strong>Отслеживание использования данных.</strong> Владелец профиля или устройства теперь может запрашивать статистику использования
495данных, которая отображается в разделе <strong>Настройки &gt; Использование данных</strong>, с помощью новых методов
496{@code android.app.usage.NetworkStatsManager}. Владельцам профилей автоматически предоставляется
497разрешение запрашивать данные профиля, которым они управляют, тогда как владельцам устройств предоставляется доступ к сведениям об использовании данных
498основного управляемого пользователя.</li>
499<li><strong>Управление разрешениями на выполнение.</strong>
500<p>Владелец профиля или устройства может задавать политику разрешений
501для всех запросов на использование среды выполнения любых приложений с помощью
502{@code DevicePolicyManager.setPermissionPolicy()}. Это позволяет выбрать, будет ли система предлагать пользователю предоставить разрешение
503как обычно, или она будет автоматически предоставлять разрешения или отказывать в них. В последнем случае
504пользователю не удастся изменить выбор, сделанный владельцем профиля или устройства на экране
505разрешений приложения в разделе <strong>Настройки</strong>.</p></li>
506<li><strong>VPN в разделе «Настройки».</strong> Приложения VPN теперь отображаются в разделе
507<strong>Настройки &gt; Другие сети &gt; VPN</strong>.
508Кроме того, сведения в уведомлениях об использовании VPN теперь зависят от настроек самой VPN.
509 Для владельца профиля уведомления зависят от того, настроена ли VPN для
510управляемого профиля, личного профиля или же того и другого. Для владельца устройства уведомления зависят от того, настроена ли VPN для
511всего устройства.</li>
512<li><strong>Уведомление о состоянии «В работе».</strong> Теперь, когда приложения
513из управляемого профиля выполняет операцию в фоновом режиме, в строке состояния появляется значок портфеля. Кроме того, если после разблокировки устройства
514открывается операция приложения из управляемого профиля, отображается всплывающее уведомление о том,
515что операция выполняется в рабочем профиле.
516</li>
517</ul>
518
519<p class="note">
520  Подробные сведения обо всех изменениях в API-интерфейсах в версии M Developer Preview представлены в <a href="{@docRoot}preview/download.html">отчете о различиях между API-интерфейсами</a>.
521</p>
522