| 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 »</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> |
| <uses-permission |
| android:name="android.permission.USE_FINGERPRINT" /> |
| </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>Настройки > Безопасность > Отпечаток пальца</strong>) и следуйте дальнейшим инструкциям.</li> |
| <li>Воспользовавшись указанной ниже командой, сымитируйте в эмуляторе события касания для проверки отпечатка пальца. |
| С помощью этой же команды сымитируйте события касания для проверки отпечатка пальца на экране блокировки или в |
| своем приложении. |
| <pre class="no-prettyprint"> |
| adb -e emu finger touch <finger_id> |
| </pre> |
| <p>В Windows, возможно, потребуется выполнить команду {@code telnet 127.0.0.1 <emulator-id>}, а затем |
| {@code finger touch <finger_id>}. |
| </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> |
| <service android:name=".ChooserTargetService" |
| android:label="@string/service_name" |
| android:permission="android.permission.BIND_CHOOSER_TARGET_SERVICE"> |
| <intent-filter> |
| <action android:name="android.service.chooser.ChooserTargetService" /> |
| </intent-filter> |
| </service> |
| </pre> |
| |
| <p>Для каждого действия, которое необходимо сделать доступным для {@code ChooserTargetService}, добавьте в манифест вашего приложения элемент |
| {@code <meta-data>} с именем |
| {@code "android.service.chooser.chooser_target_service"}. |
| </p> |
| |
| <pre> |
| <activity android:name=".MyShareActivity” |
| android:label="@string/share_activity_label"> |
| <intent-filter> |
| <action android:name="android.intent.action.SEND" /> |
| </intent-filter> |
| <meta-data |
| android:name="android.service.chooser.chooser_target_service" |
| android:value=".ChooserTargetService" /> |
| </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>Настройки > Использование данных</strong>, с помощью новых методов |
| {@code android.app.usage.NetworkStatsManager}. Владельцам профилей автоматически предоставляется |
| разрешение запрашивать данные профиля, которым они управляют, тогда как владельцам устройств предоставляется доступ к сведениям об использовании данных |
| основного управляемого пользователя.</li> |
| <li><strong>Управление разрешениями на выполнение.</strong> |
| <p>Владелец профиля или устройства может задавать политику разрешений |
| для всех запросов на использование среды выполнения любых приложений с помощью |
| {@code DevicePolicyManager.setPermissionPolicy()}. Это позволяет выбрать, будет ли система предлагать пользователю предоставить разрешение |
| как обычно, или она будет автоматически предоставлять разрешения или отказывать в них. В последнем случае |
| пользователю не удастся изменить выбор, сделанный владельцем профиля или устройства на экране |
| разрешений приложения в разделе <strong>Настройки</strong>.</p></li> |
| <li><strong>VPN в разделе «Настройки».</strong> Приложения VPN теперь отображаются в разделе |
| <strong>Настройки > Другие сети > VPN</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> |