blob: ae30e09312e12e6dd8b0d697cb462820f882b9d8 [file] [log] [blame]
page.title=Обзор API-интерфейсов
page.keywords=предварительная версия,пакет sdk,совместимость
page.tags=previewresources, androidm
sdk.platform.apiLevel=22-mnc
page.image=images/cards/card-api-overview_16-9_2x.png
@jd:body
<div id="qv-wrapper">
<div id="qv">
<h2>Содержание
<a href="#" onclick="hideNestedItems('#toc44',this);return false;" class="header-toggle">
<span class="more">развернуть</span>
<span class="less" style="display:none">свернуть</span></a></h2>
<ol id="toc44" class="hide-nested">
<li><a href="#app-linking">Связывание приложений</a></li>
<li><a href="#backup">Автоматическое резервное копирование для приложений</a></li>
<li><a href="#authentication">Авторизация</a>
<ol>
<li><a href="#fingerprint-authentication">Авторизация по отпечатку пальца</a></li>
<li><a href="#confirm-credential">Подтверждение учетных данных</a></li>
</ol>
</li>
<li><a href="#direct-share">Прямой обмен контентом</a></li>
<li><a href="#voice-interactions">Голосовой интерфейс</a></li>
<li><a href="#assist">API-интерфейс помощника</a></li>
<li><a href="#notifications">Уведомления</a></li>
<li><a href="#bluetooth-stylus">Поддержка пера Bluetooth</a></li>
<li><a href="#ble-scanning">Улучшенное сканирование Bluetooth с низким потреблением энергии</a></li>
<li><a href="#hotspot">Поддержка Hotspot 2.0, выпуск 1</a></li>
<li><a href="#4K-display">Режим отображения в формате 4K</a></li>
<li><a href="#behavior-themeable-colorstatelists">Метод ColorStateLists для работы с темами</a></li>
<li><a href="#audio">Работа с аудио</a></li>
<li><a href="#video">Работа с видео</a></li>
<li><a href="#camera">Возможности камеры</a>
<ol>
<li><a href="#flashlight">API-интерфейс вспышки</a></li>
<li><a href="#reprocessing">Повторная обработка изображения с камеры</a></li>
</ol>
</li>
<li><a href="#afw">Возможности Android for Work</a></li>
</ol>
<h2>Различия между API-интерфейсами</h2>
<ol>
<li><a href="{@docRoot}preview/download.html">API уровня 22 в M Preview &raquo;</a> </li>
</ol>
</div>
</div>
<p>M Developer Preview ознакомительная версия предстоящего выпуска платформы Android,
в котором реализованы новые возможности как для пользователей, так и для
разработчиков приложений. В этой статье мы расскажем о наиболее интересных API-интерфейсах.</p>
<p>Версия M Developer Preview предназначена для тех, <strong>кто хочет первым ознакомиться с новой платформой</strong>,
а также для <strong>тестировщиков</strong>. <a href="{@docRoot}preview/setup-sdk.html">M Developer Preview — прекрасная возможность
</a>повлиять на вектор развития
платформы Android.
Мы с нетерпением ждем ваших отзывов!</p>
<p class="caution"><strong>Внимание!</strong> Не публикуйте в магазине Google Play приложения,
предназначенные для M Developer Preview.</p>
<p class="note"><strong>Примечание.</strong> В этой статье часто упоминаются классы и методы,
для которых на сайте <a href="{@docRoot}">developer.android.com</a> пока еще нет справочных материалов. Такие элементы API-интерфейса обозначаются здесь следующим образом:
{@code code style} (без гиперссылок). Чтобы ознакомиться с предварительной документацией по этим элементам,
загрузите <a href="{@docRoot}preview/download.html#docs">справочное руководство по предварительной версии</a>.</p>
<h3>Важные изменения в работе приложений</h3>
<p>Если вы ранее публиковали приложения для Android, то примите во внимание, что изменения в платформе могут повлиять
на работу опубликованных приложений.</p>
<p>Подробные сведения представлены в статье <a href="behavior-changes.html">Изменения в работе</a>.</p>
<h2 id="app-linking">Связывание приложений</h2>
<p>В M Preview улучшена система намерений Android за счет более эффективного связывания приложений.
Теперь у вас есть возможность связывать приложения с вашими собственными веб-доменами. Благодаря этому
платформа может сама, без вмешательства пользователя, определить приложение, которое будет использоваться по умолчанию
для обработки определенной веб-ссылки. О том, как реализовать такую возможность, можно почитать в статье
<a href="{@docRoot}preview/features/app-linking.html">Связывание приложений</a>.
<h2 id="backup">Автоматическое резервное копирование для приложений</h2>
<p>Теперь система автоматически выполняет полное резервное копирование и восстановление данных ваших приложений. Для приложений,
написанных под M Preview, эта функция включена по умолчанию вам даже не нужно добавлять отдельный код. Если пользователь решит удалить свою учетную запись Google, все резервные копии его данных также будут удалены.
О том, как работает эта функция и как настроить параметры резервного копирования элементов файловой системы,
рассказано в статье
<a href="{@docRoot}preview/backup/index.html">Автоматическое резервное копирование для приложений</a>.</p>
<h2 id="authentication">Авторизация</h2>
<p>В M Preview представлены новые API-интерфейсы, которые позволяют авторизовать пользователей по отпечатку пальца
(на устройствах, поддерживающих такую возможность), а также подтвердить учетные данные, если пользователь недавно авторизовался через механизмы разблокировки устройства
(например, вводил пароль для разблокировки экрана). Эти API-интерфейсы рекомендуется использовать совместно с
<a href="{@docRoot}training/articles/keystore.html">системой хранилища ключей Android</a>.</p>
<h3 id="fingerprint-authentication">Авторизация по отпечатку пальца</h3>
<p>Чтобы авторизовать пользователя по отпечатку пальца, получите экземпляр нового класса
{@code android.hardware.fingerprint.FingerprintManager} и вызовите метод
{@code FingerprintManager.authenticate()}. Эта функция доступна для совместимых
устройств, оснащенных сканером отпечатков пальцев. Прежде всего, вам необходимо реализовать в своем приложении пользовательский интерфейс проверки
подлинности по отпечатку пальца, а также использовать для него стандартный значок отпечатка пальца Android.
Этот значок ({@code c_fp_40px.png}) вы можете найти в
<a href="https://github.com/googlesamples/android-FingerprintDialog" class="external-link">примере приложения</a>. При разработке нескольких приложений, использующих функцию авторизации по отпечатку пальца,
помните, что каждое из них должно самостоятельно выполнять проверку подлинности.
</p>
<p>Чтобы реализовать эту функцию, сначала добавьте в файл манифеста разрешение {@code USE_FINGERPRINT}.
</p>
<pre>
&lt;uses-permission
android:name="android.permission.USE_FINGERPRINT" /&gt;
</pre>
<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" />
<p>Пример такой проверки подлинности вы найдете в
<a href="https://github.com/googlesamples/android-FingerprintDialog" class="external-link">примере
диалогового окна авторизации по отпечатку пальца</a>.</p>
<p>Если вы тестируете эту функцию, выполните следующие действия:</p>
<ol>
<li>Установите инструменты SDK Android (версию 24.3), если у вас их еще нет.</li>
<li>Зарегистрируйте в эмуляторе новый отпечаток пальца разделе
<strong>Настройки &gt; Безопасность &gt; Отпечаток пальца</strong>) и следуйте дальнейшим инструкциям.</li>
<li>Воспользовавшись указанной ниже командой, сымитируйте в эмуляторе события касания для проверки отпечатка пальца.
С помощью этой же команды сымитируйте события касания для проверки отпечатка пальца на экране блокировки или в
своем приложении.
<pre class="no-prettyprint">
adb -e emu finger touch &lt;finger_id&gt;
</pre>
<p>В Windows, возможно, потребуется выполнить команду {@code telnet 127.0.0.1 &lt;emulator-id&gt;}, а затем
{@code finger touch &lt;finger_id&gt;}.
</p>
</li>
</ol>
<h3 id="confirm-credential">Подтверждение учетных данных</h3>
<p>Для авторизации пользователей ваше приложение может обратиться к сведениям о том, как давно они разблокировали свое устройство в последний раз. Эта функция
избавляет пользователя от необходимости запоминать отдельные пароли для каждого приложения, а вас — от необходимости
реализовывать собственный пользовательский интерфейс авторизации. В приложении эту функцию следует
использовать совместно с реализацией открытого или секретного ключа для авторизации пользователей.</p>
<p>Чтобы задать временя ожидания, в течение которого после успешной
авторизации можно использовать ключ повторно, вызовите новый метод
{@code android.security.keystore.KeyGenParameterSpec.setUserAuthenticationValidityDurationSeconds()}
при настройке {@link javax.crypto.KeyGenerator} или
{@link java.security.KeyPairGenerator}. На сегодняшний день эта функция совместима с симметричными криптографическими
операциями.</p>
<p>Не стоит слишком часто отображать диалоговое окно повторной авторизации — ваше
приложение должно сначала попробовать использовать криптографический объект и только потом, если окажется, что время ожидания истекло, обратиться к методу
{@link android.app.KeyguardManager#createConfirmDeviceCredentialIntent(java.lang.CharSequence, java.lang.CharSequence) createConfirmDeviceCredentialIntent()}
для повторной авторизации пользователя.
</p>
<p>Как можно реализовать эту функцию, показано в
<a href="https://github.com/googlesamples/android-ConfirmCredential" class="external-link">примерепроверки учетных данных</a>.
</p>
<h2 id="direct-share">Прямой обмен контентом</h2>
<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" />
<p>M Preview содержит API-интерфейсы для интуитивно понятного и быстрого обмена контентом между пользователями. Теперь вы можете
определить <em>целевые объекты прямого обмена</em>, которые будут запускать определенную операцию в приложении
и открываться в меню <em>Поделиться</em>. С помощью данной функции пользователи могут обмениваться контентом
с целевыми объектами, такими как контакты, в других приложениях. Например, целевой объект прямого обмена может запустить операцию
в другом приложении социальной сети, что позволит пользователю напрямую делиться контентом с другом
или членами сообщества через это приложение.</p>
<p>Чтобы включить использование целевых объектов прямого обмена, необходимо определить класс, который наследует класс
{@code android.service.} <br>
{@code chooser.ChooserTargetService}. Объявите
{@code ChooserTargetService} в манифесте. В этом объявлении укажите разрешение
{@code BIND_CHOOSER_TARGET_SERVICE} и фильтр намерений с помощью действия
{@code SERVICE_INTERFACE}.</p>
<p>В примере ниже показано, как объявить {@code ChooserTargetService}
в вашем манифесте.</p>
<pre>
&lt;service android:name=".ChooserTargetService"
android:label="&#64;string/service_name"
android:permission="android.permission.BIND_CHOOSER_TARGET_SERVICE"&gt;
&lt;intent-filter&gt;
&lt;action android:name="android.service.chooser.ChooserTargetService" /&gt;
&lt;/intent-filter&gt;
&lt;/service&gt;
</pre>
<p>Для каждого действия, которое необходимо сделать доступным для {@code ChooserTargetService}, добавьте в манифест вашего приложения элемент
{@code &lt;meta-data&gt;} с именем
{@code "android.service.chooser.chooser_target_service"}.
</p>
<pre>
&lt;activity android:name=".MyShareActivity”
android:label="&#64;string/share_activity_label"&gt;
&lt;intent-filter>
&lt;action android:name="android.intent.action.SEND" /&gt;
&lt;/intent-filter>
&lt;meta-data
android:name="android.service.chooser.chooser_target_service"
android:value=".ChooserTargetService" /&gt;
&lt;/activity>
</pre>
<h2 id="voice-interactions">Голосовой интерфейс</h2>
<p>
В M Preview представлен новый голосовой API-интерфейс, который, наряду с
<a href="https://developers.google.com/voice-actions/" class="external-link">голосовыми командами</a>,
позволяет встраивать в приложение диалоговое голосовое взаимодействие. Вызовите метод
{@code android.app.Activity.isVoiceInteraction()}, чтобы определить, была ли операция запущена
в ответ на голосовую команду. Если это так, ваше приложение может использовать класс
{@code android.app.VoiceInteractor}, чтобы получить голосовое подтверждение от пользователя, предложить ему список вариантов
на выбор и многое другое. Подробнее о реализации голосовых команд можно почитать в
<a href="https://developers.google.com/voice-actions/interaction/" class="external-link">руководстве к голосовому интерфейсу</a>.
</p>
<h2 id="assist">API-интерфейс помощника</h2>
<p>
M Preview предлагает новый способ взаимодействия пользователей с приложением взаимодействие посредством помощника. Для этого
пользователю необходимо разришить помощнику использовать текущий контекст, после чего он сможет вызывать помощника
в любом приложении, удерживая кнопку <strong>Домой</strong>.</p>
<p>Разработчик может также запретить приложению сообщать помощнику текущий контекст. Для этого установите флаг
{@link android.view.WindowManager.LayoutParams#FLAG_SECURE}. Кроме стандартного набора
информации, который платформа передает помощнику, ваше приложение может сообщать ему дополнительные
сведения посредством нового класса {@code android.app.Activity.AssistContent}.</p>
<p>Чтобы предоставить помощнику дополнительный контекст из вашего приложения, выполните следующие действия:</p>
<ol>
<li>Реализуйте интерфейс {@link android.app.Application.OnProvideAssistDataListener}.</li>
<li>Зарегистрируйте этот приемник с помощью
{@link android.app.Application#registerOnProvideAssistDataListener(android.app.Application.OnProvideAssistDataListener) registerOnProvideAssistDataListener()}.</li>
<li>Для предоставления контекста, относящего к конкретной операции, переопределите метод обратного вызова
{@link android.app.Activity#onProvideAssistData(android.os.Bundle) onProvideAssistData()},
а также, при желании, новый метод обратного вызова{@code Activity.onProvideAssistContent()}.
</ol>
<h2 id="notifications">Уведомления</h2>
<p>В API-интерфейс уведомлений внесены следующие изменения:</p>
<ul>
<li>{@code NotificationListenerService.INTERRUPTION_FILTER_ALARMS} новый уровень фильтрации,
соответствующий новому режиму «Не беспокоить» <em>Только будильник</em>.</li>
<li>{@code Notification.CATEGORY_REMINDER} новое значение категории, позволяющее отличить
установленные пользователем напоминания от других событий
({@link android.app.Notification#CATEGORY_EVENT}) и будильников
({@link android.app.Notification#CATEGORY_ALARM}).</li>
<li>{@code android.graphics.drawable.Icon} новый класс, который можно добавить к уведомлениям
с помощью методов {@code Notification.Builder.setSmallIcon(Icon)} и
{@code Notification.Builder.setLargeIcon(Icon)}.</li>
<li>{@code NotificationManager.getActiveNotifications()} новый метод, с помощью которого ваше приложение
может определить, какие из уведомлений в настоящее время активны. Если хотите взглянуть, как может быть реализовано приложение
с этой функцией, пройдите по ссылке: <a href="https://github.com/googlesamples/android-ActiveNotifications" class="external-link">Пример активных уведомлений</a>.</li>
</ul>
<h2 id="bluetooth-stylus">Поддержка пера Bluetooth</h2>
<p>В M Preview улучшена поддержка ввода с помощью пера Bluetooth. Пользователи могут подключить
совместимое перо Bluetooth к своему смартфону или планшету. Когда перо подключено, данные о его
положении объединяются со сведениями о степени нажима и нажатия кнопки на пере,
и таким образом при сенсорном вводе используются не только возможности сенсорного экрана. Ваше приложение может отслеживать
нажатия кнопки пера и выполнять дополнительные действия, регистрируя в операции новые методы обратного вызова
{@code View.onStylusButtonPressListener} и
{@code GestureDetector.OnStylusButtonPressListener}.</p>
<p>Для определения нажатий кнопок пера используйте методы и константы {@link android.view.MotionEvent}:
</p>
<ul>
<li>Если пользователь касается пером кнопки на экране приложения, метод
{@link android.view.MotionEvent#getToolType(int) getTooltype()} возвращает
{@link android.view.MotionEvent#TOOL_TYPE_STYLUS}.</li>
<li>В приложениях, разработанных для M Preview, при нажатии пользователем на основную кнопку на пере, метод
{@link android.view.MotionEvent#getButtonState() getButtonState()}
возвращает{@code MotionEvent.STYLUS_BUTTON_PRIMARY}.
Если перо оснащено дополнительной кнопкой, то при нажатии на нее этот метод возвращает
{@code MotionEvent.STYLUS_BUTTON_SECONDARY}. При нажатии пользователем
на обе кнопки одновременно, метод возвращает оба значения через оператор «OR»
({@code STYLUS_BUTTON_PRIMARY|STYLUS_BUTTON_SECONDARY}).</li>
<li>
В приложениях, разработанных для более ранних версий платформы, метод
{@link android.view.MotionEvent#getButtonState() getButtonState()} возвращает
{@link android.view.MotionEvent#BUTTON_SECONDARY} (при нажатии на основную кнопку на пере),
{@link android.view.MotionEvent#BUTTON_TERTIARY} (при нажатии дополнительной кнопки на пере) или оба этих значения.
</li>
</ul>
<h2 id="ble-scanning">Улучшенное сканирование Bluetooth с низким потреблением энергии</h2>
<p>
Если ваше приложение выполняет сканирование Bluetooth с низким потреблением энергии, вы можете при помощи нового метода
{@code android.bluetooth.le.ScanSettings.Builder.setCallbackType()} указать, что обратные вызовы следует уведомлять только в случае, если прежде обнаружен пакет объявления,
совпадающий с заданным фильтром
{@link android.bluetooth.le.ScanFilter}, или если он не обнаруживается в течение заданного периода времени.
Такой подход к сканированию обеспечивает еще большую экономию энергии, чем это было возможно в предыдущей
версии платформы.
</p>
<h2 id="hotspot">Поддержка Hotspot 2.0, выпуск 1</h2>
<p>
В M Preview включена поддержка Hotspot 2.0 (выпуск 1) для устройств Nexus 6 и Nexus 9. Для
предоставления учетных данных Hotspot 2.0 в вашем приложении используйте новые методы класса
{@link android.net.wifi.WifiEnterpriseConfig}, такие как {@code setPlmn()} и
{@code setRealm()}. В объекте {@link android.net.wifi.WifiConfiguration} можно задать поля
{@link android.net.wifi.WifiConfiguration#FQDN} и {@code providerFriendlyName}.
Новое свойство{@code ScanResult.PasspointNetwork} показывает, является ли обнаруженная
сеть точкой доступа Hotspot 2.0.
</p>
<h2 id="4K-display">Режим отображения в формате 4K</h2>
<p>Теперь платформа позволяет приложениям запрашивать увеличение разрешения экрана до 4K при обработке изображения
на совместимом устройстве. Чтобы запросить текущее физическое разрешение, используйте новые API-интерфейсы
{@code android.view.Display.Mode}. Если элементы пользовательского интерфейса, отрисованные в более низком логическом разрешении, масштабируются до
более высокого физического разрешения, обратите внимание, что метод физического разрешения
{@code Display.Mode.getPhysicalWidth()} возвращает результат, который может отличаться от результата выполнения метода логического разрешения
{@link android.view.Display#getSize(android.graphics.Point) getSize()} .</p>
<p>Можно отправить запрос системе на изменение физического разрешения в активном приложении, задав для окна вашего приложения свойство
{@code WindowManager.LayoutParams.preferredDisplayModeId}. Эта
функция особенно полезна в случаях, когда требуется переключиться на разрешение экрана 4K. В режиме отображения в формате 4K элементы
пользовательского интерфейса отрисовываются в исходном разрешении (например, 1080p) и масштабируются до 4K, однако содержимое
{@link android.view.SurfaceView} объектов может отображаться с использованием основного разрешения.</p>
<h2 id="behavior-themeable-colorstatelists">Метод ColorStateLists для работы с темами</h2>
<p>Теперь метод
{@link android.content.res.ColorStateList} для устройств под управлением M Preview поддерживает атрибуты темы. Методы
{@link android.content.res.Resources#getColorStateList(int) getColorStateList()} и
{@link android.content.res.Resources#getColor(int) getColor()} уже неактуальны. Если вы
вызываете эти API-интерфейсы, вызовите вместо них новые методы {@code Context.getColorStateList()} или
{@code Context.getColor()}, Доступные также в библиотеке v4 appcompat
посредством {@link android.support.v4.content.ContextCompat}.</p>
<h2 id="audio">Работа с аудио</h2>
<p>В M Preview реализован ряд улучшений в области обработки аудиофайлов системой Android, включая следующие: </p>
<ul>
<li>Новые API-интерфейсы {@code android.media.midi}, поддерживающие протокол <a href="http://en.wikipedia.org/wiki/MIDI" class="external-link">MIDI</a>
для отправки и получения событий
MIDI.</li>
<li>Новые классы: {@code android.media.AudioRecord.Builder} позволяет создавать объекты захвата цифрового аудио, а {@code android.media.AudioTrack.Builder} объекты воспроизведения,
а также осуществлять настройку источника
аудио и свойств приемника, переопределяя исходные системные настройки.</li>
<li>Обработчики API-интерфейсов предназначены для связывания аудиофайлов и устройств ввода. Это особенно полезно в случае, если ваше приложение
предоставляет возможность выполнять голосовой поиск с помощью игрового контроллера или пульта дистанционного управления, подключенного к Android
TV. Когда пользователь запустит поиск, система вызовет новый метод обратного вызова {@code android.app.Activity.onSearchRequested()}.
Чтобы определить, оснащено ли устройство ввода встроенным микрофоном, получите из этого метода обратного вызова объект
{@link android.view.InputDevice} и вызовите новый метод
{@code InputDevice.hasMic()}.</li>
<li>Новый класс {@code android.media.AudioDevicesManager}, позволяющий пользователю получить список всех
подключенных источников аудио и приемников. Также можно указать объект
{@code android.media.OnAudioDeviceConnectionListener}, если требуется, чтобы приложение
получало уведомления о подключении или отключении аудиоустройств.</li>
</ul>
<h2 id="video">Работа с видео</h2>
<p>В M Preview вы обнаружите новые возможности API-интерфейсов для обработки видео, в том числе:</p>
<ul>
<li>Новый класс {@code android.media.MediaSync} обеспечивает синхронную обработку потоков
аудио и видео. Буферы аудио отправляются неблокируемым способом и возвращаются посредством
обратного вызова. Также имеется поддержка динамической скорости воспроизведения.
</li>
<li>Новое событие {@code MediaDrm.EVENT_SESSION_RECLAIMED} указывает на то, что сеанс, запущенный
приложением, освобожден диспетчером ресурсов. Если в вашем приложении используются сеансы DRM, то это событие
необходимо обработать и убедиться в том, что освобожденный сеанс не используется.
</li>
<li>Новый код ошибки {@code MediaCodec.CodecException.ERROR_RECLAIMED} указывает на то, что
диспетчер ресурсов освободил ресурс мультимедиа, используемый кодеком. Во всех остальных случаях кодек должен
быть освобожден, поскольку его необходимо перевести в конечное состояние.
</li>
<li>Новый интерфейс {@code MediaCodecInfo.CodecCapabilities.getMaxSupportedInstances()} позволяет узнать максимальное количество
экземпляров кодека, которые могут выполняться одновременно.
</li>
<li>Новый {@code MediaPlayer.setPlaybackParams()} метод задает скорость при ускоренном или
замедленном воспроизведении мультимедиа. Он также позволяет автоматически замедлять или ускорять воспроизведение аудио синхронно с
видео.</li>
</ul>
<h2 id="camera">Возможности камеры</h2>
<p>В M Preview представлены следующие API-интерфейсы для вспышки камеры и повторной обработки
изображений камерой.</p>
<h3 id="flashlight">API-интерфейс вспышки</h3>
<p>Если камера оснащена вспышкой, вы можете вызвать метод{@code CameraManager.setTorchMode()},
чтобы включить или отключить режим фонарика, не запуская камеру. Приложение
не может заполучить вспышку или камеру в единоличное пользование. Режим фонарика отключается
и становится недоступен, когда камера недоступна или ресурсов камеры недостаточно для использования вспышки в качестве
фонарика. Кроме того, другие приложения могут вызывать метод {@code setTorchMode()}
для отключения режима фонарика. При закрытии приложения, которое включило режим фонарика, этот режим
отключается.</p>
<p>Чтобы зарегистрировать обратный вызов для уведомления о режиме фонарика, вызовите метод
{@code CameraManager.registerTorchCallback()}. При первой регистрации обратного вызова
он сразу же вызывается со сведениями о состоянии режима фонарика для всех известных к настоящему моменту устройств,
оснащенных вспышкой. При успешном включении или отключении фонарика вызывается метод
{@code CameraManager.TorchCallback.onTorchModeChanged()}.</p>
<h3 id="reprocessing">API-интерфейс повторной обработки</h3>
<p>API-интерфейс {@link android.hardware.camera2 Camera2} теперь поддерживает повторную обработку цветовых моделей YUV и изображений в собственном
формате непрозрачности. Чтобы определить, возможна ли повторная обработка, приложение использует метод
{@code CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES}. Если устройство поддерживает повторную обработку,
вы можете создать сеанс захвата изображения с камеры с возможностью повторной обработки, вызвав метод
{@code CameraDevice.createReprocessableCaptureSession()}, а затем создать запросы на повторную обработку буфера
входных данных.</p>
<p>Чтобы подключить поток буфера входных данных к модулю повторной обработки изображения с камеры, используйте класс
{@code ImageWriter}. Чтобы получить пустой буфер, выполните следующие действия:</p>
<ol>
<li>Вызовите метод {@code ImageWriter.dequeueInputImage()}.</li>
<li>Заполните буфер входными данными.</li>
<li>Отправьте буфер в камеру, вызвав метод {@code ImageWriter.queueInputImage()}.</li>
</ol>
<p>Если вы используете объект {@code ImageWriter} вместе с изображением
{@code android.graphics.ImageFormat.PRIVATE}, вашему приложению не удастся получить доступ к изображению
напрямую. Вместо этого передайте изображение {@code ImageFormat.PRIVATE} прямо в
{@code ImageWriter}, вызвав метод {@code ImageWriter.queueInputImage()} без копии
буфера.</p>
<p>Класс {@code ImageReader} теперь поддерживает потоки изображений в формате {@code android.graphics.ImageFormat.PRIVATE}.
Благодаря этому ваше приложение может организовать циклическую очередь выходных изображений
{@code ImageReader}, выбрать одно или несколько изображений и отправить их в
{@code ImageWriter} для повторной обработки камерой.</p>
<h2 id="afw">Возможности Android for Work</h2>
<p>В M Preview представлены новые API-интерфейсы для Android for Work:</p>
<ul>
<li><strong>Улучшенные элементы управления для корпоративных специализированных устройств.</strong> Владельцу устройства
теперь доступны новые возможности управления
корпоративными специализированными устройствами при помощие следующих настроек:
<ul>
<li>Отключение или повторное включение блокировки клавиатуры с помощью метода
{@code DevicePolicyManager.setKeyguardEnabledState()}.</li>
<li>Отключение или повторное включение строки состояния (включая быстрые настройки, уведомления и
запуск Google Now путем проведения пальцем по экрану) с помощью метода
{@code DevicePolicyManager.setStatusBarEnabledState()}.</li>
<li>Отключение и повторное включение безопасной загрузки с помощью константы
{@code DISALLOW_SAFE_BOOT} {@link android.os.UserManager}.</li>
<li>Предотвращение отключения экрана, если устройство питается от сети, с помощью константы
{@code STAY_ON_WHILE_PLUGGED_IN} {@link android.provider.Settings.Global}.</li>
</ul>
</li>
<li><strong>Автоматические установка и удаление приложений владельцами устройств.</strong> Владелец устройства теперь может автоматически
устанавливать и удалять приложения с помощью API-интерфейсов {@link android.content.pm.PackageInstaller},
независимо от Google Play for Work. Теперь вы можете подготавливать устройства с помощью компонента «Владелец устройства», который
получает и устанавливает приложения без участия пользователя. Такая возможность особенно полезна тем, что позволяет подготавливать
киоски или иные подобные устройства одним касанием, не активируя аккаунт Google.</li>
<li><strong>Автоматический доступ к корпоративному сертификату.</strong> Теперь, когда приложение вызывает метод
{@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()},
владелец профиля или устройства, прежде чем ему будет предложено выбрать сертификат, может вызывать метод
{@code DeviceAdminReceiver.onChoosePrivateKeyAlias()}, который автоматически предоставит предложению псевдоним.
С помощью этой возможности вы можете предоставлять управляемым приложениям доступ к сертификатам без
вмешательства пользователя.</li>
<li><strong>Автоматическое принятие обновлений системы.</strong> Настройка параметров обновления системы с помощью
{@code DevicePolicyManager.setSystemUpdatePolicy()} теперь позволяет компоненту «Владелец устройства» автоматически принять обновление системы
(например, в киоске) или отложить его на период до 30 дней, причем пользователь
тоже не сможет установить обновление до истечения этого срока. Более того, администратор может задать ежедневный временной интервал, когда устройство будет принимать
обновления (например, во те часы, когда киоск не используется). При наличии доступного
обновления система проверяет, заданы ли параметры обновления системы приложением «Параметры работы»
, и выполняет соответствующие действия.
</li>
<li>
<strong>Делегированная установка сертификата.</strong> Владелец профиля или устройства теперь может предоставлять
стороннему приложению возможность вызывать следующие API-интерфейсы управления сертификатом
{@link android.app.admin.DevicePolicyManager}:
<ul>
<li>{@link android.app.admin.DevicePolicyManager#getInstalledCaCerts(android.content.ComponentName)
getInstalledCaCerts()}</li>
<li>{@link android.app.admin.DevicePolicyManager#hasCaCertInstalled(android.content.ComponentName,byte[])
hasCaCertInstalled()}</li>
<li>{@link android.app.admin.DevicePolicyManager#installCaCert(android.content.ComponentName,byte[])
installCaCert()}</li>
<li>{@link android.app.admin.DevicePolicyManager#uninstallCaCert(android.content.ComponentName,byte[])
uninstallCaCert()}</li>
<li>{@link android.app.admin.DevicePolicyManager#uninstallAllUserCaCerts(android.content.ComponentName)
uninstallAllUserCaCerts()}</li>
<li>{@link android.app.admin.DevicePolicyManager#installKeyPair(android.content.ComponentName,java.security.PrivateKey,java.security.cert.Certificate,java.lang.String)
installKeyPair()}</li>
</ul>
</li>
<li><strong>Корпоративная настройка защиты от сброса параметров до заводских настроек.</strong> При подготовке компонента «Владелец устройства» теперь
имеется возможность настроить параметры разблокировки защиты от сброса параметров до заводских настроек (FRP) путем задания пакета
{@code DeviceManagerPolicy.EXTRA_PROVISIONING_RESET_PROTECTION_PARAMETERS}. Приложение NFC Programmer
может после перезагрузки устройства предоставить эти параметрыс целью разблокировки FRP и его подготовки
(без необходимости запрашивать ранее настроенную учетную запись Google). Если не изменить эти параметры,
заводские настройки сохранятся не позволят активировать устройство без ввода активированных ранее
учетных данных Google.
<p>Кроме того, задав ограничения на использование служб Google Play, компонент «Владелец устройства» может указать альтернативные учетные записи
Google для разблокировки FRP и замены учетных записей, активированных на устройстве.</p>
</li>
<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" />
<li><strong>Отслеживание использования данных.</strong> Владелец профиля или устройства теперь может запрашивать статистику использования
данных, которая отображается в разделе <strong>Настройки &gt; Использование данных</strong>, с помощью новых методов
{@code android.app.usage.NetworkStatsManager}. Владельцам профилей автоматически предоставляется
разрешение запрашивать данные профиля, которым они управляют, тогда как владельцам устройств предоставляется доступ к сведениям об использовании данных
основного управляемого пользователя.</li>
<li><strong>Управление разрешениями на выполнение.</strong>
<p>Владелец профиля или устройства может задавать политику разрешений
для всех запросов на использование среды выполнения любых приложений с помощью
{@code DevicePolicyManager.setPermissionPolicy()}. Это позволяет выбрать, будет ли система предлагать пользователю предоставить разрешение
как обычно, или она будет автоматически предоставлять разрешения или отказывать в них. В последнем случае
пользователю не удастся изменить выбор, сделанный владельцем профиля или устройства на экране
разрешений приложения в разделе <strong>Настройки</strong>.</p></li>
<li><strong>VPN в разделе «Настройки».</strong> Приложения VPN теперь отображаются в разделе
<strong>Настройки &gt; Другие сети &gtVPN</strong>.
Кроме того, сведения в уведомлениях об использовании VPN теперь зависят от настроек самой VPN.
Для владельца профиля уведомления зависят от того, настроена ли VPN для
управляемого профиля, личного профиля или же того и другого. Для владельца устройства уведомления зависят от того, настроена ли VPN для
всего устройства.</li>
<li><strong>Уведомление о состоянии «В работе».</strong> Теперь, когда приложения
из управляемого профиля выполняет операцию в фоновом режиме, в строке состояния появляется значок портфеля. Кроме того, если после разблокировки устройства
открывается операция приложения из управляемого профиля, отображается всплывающее уведомление о том,
что операция выполняется в рабочем профиле.
</li>
</ul>
<p class="note">
Подробные сведения обо всех изменениях в API-интерфейсах в версии M Developer Preview представлены в <a href="{@docRoot}preview/download.html">отчете о различиях между API-интерфейсами</a>.
</p>