diff options
Diffstat (limited to 'docs/html-intl/intl/ru/preview')
-rw-r--r-- | docs/html-intl/intl/ru/preview/api-overview.jd | 521 | ||||
-rw-r--r-- | docs/html-intl/intl/ru/preview/behavior-changes.jd | 402 | ||||
-rw-r--r-- | docs/html-intl/intl/ru/preview/features/runtime-permissions.jd | 794 | ||||
-rw-r--r-- | docs/html-intl/intl/ru/preview/overview.jd | 362 |
4 files changed, 2079 insertions, 0 deletions
diff --git a/docs/html-intl/intl/ru/preview/api-overview.jd b/docs/html-intl/intl/ru/preview/api-overview.jd new file mode 100644 index 0000000..ae30e09 --- /dev/null +++ b/docs/html-intl/intl/ru/preview/api-overview.jd @@ -0,0 +1,521 @@ +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> diff --git a/docs/html-intl/intl/ru/preview/behavior-changes.jd b/docs/html-intl/intl/ru/preview/behavior-changes.jd new file mode 100644 index 0000000..0623ea7 --- /dev/null +++ b/docs/html-intl/intl/ru/preview/behavior-changes.jd @@ -0,0 +1,402 @@ +page.title=Изменения в работе +page.keywords=предварительная версия,пакет sdk,совместимость +sdk.platform.apiLevel=MNC +@jd:body + +<div id="qv-wrapper"> +<div id="qv"> + +<h2>Содержание документа</h2> + +<ol id="toc44" class="hide-nested"> + <li><a href="#behavior-runtime-permissions">Разрешения на выполнение</a></li> + <li><a href="#behavior-power">Оптимизация экономии энергии</a> + <ol> + <li><a href="#behavior-doze">Режим «Doze»</a></li> + <li><a href="#behavior-app-standby">Ждущий режим для приложений</a></li> + </ol> + </li> + <li><a href="#behavior-adoptable-storage">Подключаемые устройства хранения</a></li> + <li><a href="#behavior-apache-http-client">Отказ от HTTP-клиента Apache</a></li> + <li><a href="#behavior-audiomanager-Changes">Изменения в классе AudioManager</a></li> + <li><a href="#behavior-test-selection">Выделение текста</a></li> + <li><a href="#behavior-keystore">Изменения в хранилище ключей Android</a></li> + <li><a href="#behavior-network">Изменения в работе с Wi-Fi и сетями</a></li> + <li><a href="#behavior-camera">Изменения в службе камеры</a></li> + <li><a href="#behavior-art-runtime">Среда выполнения ART</a></li> + <li><a href="#behavior-apk-validation">Проверка пакетов APK</a></li> + <li><a href="#behavior-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> + + +<h2>См. также:</h2> +<ol> +<li><a href="{@docRoot}preview/api-overview.html">Обзор API-интерфейсов M Developer Preview</a> </li> +</ol> + +</div> +</div> + +<p>Наряду с новыми функциями и возможностями, версия M Developer Preview также включает в себя ряд +системных изменений и изменений в работе API-интерфейсов. В этом документе рассматриваются +определенные ключевые изменения, о которых следует знать, чтобы учитывать их при разработке приложений.</p> + +<p>Если вы ранее публиковали приложения для Android, то примите во внимание, +что эти изменения в платформе могут повлиять на работу ваших уже опубликованных приложений.</p> + +<h2 id="behavior-runtime-permissions">Разрешения на выполнение</h1> +<p>В M Preview представлена новая модель разрешений: теперь пользователи могут управлять разрешениями приложений +напрямую во время работы с ними. Такая модель обеспечивает улучшенное управление +разрешениями и одновременно позволяет оптимизировать установку и автоматическое обновление для разработчиков. +Пользователи могут предоставлять разрешения или отзывать их отдельно для каждого установленного приложения. </p> + +<p>В ваших приложениях, предназначенных для M Preview, следует в обязательном порядке проверить такие разрешения и при необходимости +запросить их. Чтобы определить, было ли вашему приложению предоставлено разрешение, вызовите новый метод +{@code Context.checkSelfPermission()}. Чтобы запросить разрешение, вызовите новый метод +{@code Activity.requestPermission()}. Даже если ваше приложение не предназначено для использования в версии M, вам все равно следует +протестировать его с использованием новой модели разрешений.</p> + +<p>Подробные сведения о поддержке новой модели +разрешений вашим приложением представлены в статье +<a href="{@docRoot}preview/features/runtime-permissions.html">Разрешения</a>. Как можно проверить влияние новой модели на ваше приложение, читайте в +<a href="{@docRoot}preview/testing/guide.html#runtime-permissions">руководстве по тестированию</a></p> + +<h2 id="behavior-power">Оптимизация экономии энергии</h2> +<p>В M Preview реализован ряд новых функций оптимизации экономии энергии для неактивных устройств и приложений.</p> + +<h3 id="behavior-doze">Режим «Doze»</h3> +<p>Если устройство отключено от сети и остается неактивным (и с выключенным экраном) в течение определенного времени, +оно переходит в режим <em>Doze</em> и старается, чтобы система не выходила из спящего состояния. В этому режиме +устройство периодически возобновляет свою обычную работу на краткие промежутки времени, чтобы произвести +синхронизацию и позволить системе выполнить какие-либо отложенные операции.</p> + +<p>Когда устройство находится в режиме «Doze», к приложениям применяются следующие ограничения:</p> +<ul> +<li>Доступ к сети отключен до тех пор, пока от службы Google Cloud Messaging +не будет получен высокоприоритетный сигнал побуждения приложения к действию.</li> +<li>Механизмы <a href="{@docRoot}reference/android/os/PowerManager.WakeLock.html">WakeLock</a> игнорируются.</li> +<li>Будильники, установленные с помощью класса {@link android.app.AlarmManager}, отключаются, кроме +тех, которые установлены с помощью методов {@link android.app.AlarmManager#setAlarmClock setAlarmClock()} +и {@code AlarmManager.setAndAllowWhileIdle()}.</li> +<li>Поиск сетей Wi-Fi не производится.</li> +<li>Операции синхронизации и заданий для адаптеров синхронизации и {@link android.app.job.JobScheduler} блокируются. +</li> +</ul> +</p> +<p>После выхода из режима «Doze», устройство приступает к выполнению любых отложенных заданий и операций синхронизации.</p> +<p>Чтобы протестировать эту функцию, подключите устройство под управлением M Preview к своему компьютеру +для разработки и выполните следующие команды: +</p> +<pre class="no-prettyprint"> +$ adb shell dumpsys battery unplug +$ adb shell dumpsys deviceidle step +$ adb shell dumpsys deviceidle -h +</pre> +<p class="note"><strong>Примечание.</strong> В предстоящем выпуске службы +<a href="https://developers.google.com/cloud-messaging/" class="external-link">Google Cloud Messaging</a> +реализована возможность назначения сообщений +с высоким приоритетом. При получении вашим приложением сообщений GCM с высоким приоритетом ему на короткое время предоставляется +доступ к сети, даже если устройство находится в режиме «Doze». +</p> + +<p>Советы по тестированию работы приложений в режиме «Doze» представлены +в <a href="{@docRoot}preview/testing/guide.html#doze-standby">руководстве +по тестированию</a>. </p> + +<h3 id="behavior-app-standby">Ждущий режим для приложений</h3> +<p>В M Preview система может определять, что приложения неактивны, когда они +не используются. Приложение считается неактивным по прошествии определенного периода времени до тех пор, пока система +не обнаружит один из следующих сигналов:</p> + +<ul> +<li>приложение явным образом запущено пользователем;</li> +<li>у приложения имеется процесс, который в настоящее время выполняется на переднем плане (это может быть как сама операция или служба переднего плана, +так и процесс, используемый другой операцией или службой переднего плана).</li> +<li>приложение создает уведомление, которое пользователи видят на экране блокировки или в +области уведомлений.</li> +<li>пользователь явным образом исключает приложение из списка для оптимизации +в разделе <strong>Настройки</strong>.</li> +</ul> + +<p>Если устройство отключено от электросети, для приложений, которые считаются неактивными, закрывается доступ к Интернету, +а их операции синхронизации и задания приостанавливаются. После подключения устройства к электросети доступ к Интернету для приложений возобновится +и они смогут приступить к выполнению любых ожидающих заданий и операций синхронизации. Если устройство +неактивно в течение длительного времени, неактивным приложениям раз в день предоставляется доступ к сети.</p> + +<p>Чтобы протестировать эту функцию, подключите устройство под управлением M Preview к своему компьютеру +для разработки и выполните следующие команды: +</p> +<pre class="no-prettyprint"> +$ adb shell dumpsys battery unplug +$ adb shell am set-idle <packageName> true +$ adb shell am set-idle <packageName> false +$ adb shell am get-idle <packageName> +</pre> + +<p class="note"><strong>Примечание.</strong> В предстоящем выпуске службы +<a href="https://developers.google.com/cloud-messaging/" class="external-link">Google Cloud Messaging</a> (GCM) +реализована возможность назначения сообщений +с высоким приоритетом. При получении вашим приложением сообщений GCM с высоким приоритетом ему на короткий промежуток времени предоставляется +доступ к сети, даже если приложение находится в неактивном состоянии. +</p> + +<p>Советы по тестированию работы приложений в ждущем режиме представлены +в <a href="{@docRoot}preview/testing/guide.html#doze-standby">руководстве +по тестированию</a>. </p> + +<h2 id="behavior-adoptable-storage">Подключаемые устройства хранения</h2> +<p> +В M Preview пользователи могут <em>подключать</em> внешние устройства хранения, такие как SD-карты, и использовать их как внутреннее хранилище, +зашифровав и отформатировав требуемым образом. Благодаря этому + пользователи могут переносить как сами приложения, так свои файлы для этих приложений с одного устройства хранения на другое. При переносе +приложений система руководствуется настройкой +<a href="{@docRoot}guide/topics/manifest/manifest-element.html#install">{@code android:installLocation}</a> +в манифесте.</p> + +<p>Если ваше приложение работает с указанными ниже API-интерфейсами или полями, следует помнить, что возвращаемые ими пути к файлам +будут динамически изменяться при перемещении приложения с внутреннего хранилища на внешнее устройство или наоборот. +При создании путей к файлам настоятельно рекомендуется всегда вызывать эти API-интерфейсы динамическим образом. +Не используйте жестко запрограммированные пути к файлам и не указывайте созданные ранее полные пути к файлам.</p> + +<ul> +<li>Методы {@link android.content.Context}: + <ul> + <li>{@link android.content.Context#getFilesDir() getFilesDir()}</li> + <li>{@link android.content.Context#getCacheDir() getCacheDir()}</li> + <li>{@link android.content.Context#getCodeCacheDir() getCodeCacheDir()}</li> + <li>{@link android.content.Context#getDatabasePath(java.lang.String) getDatabasePath()}</li> + <li>{@link android.content.Context#getDir(java.lang.String,int) getDir()}</li> + <li>{@link android.content.Context#getNoBackupFilesDir() getNoBackupFilesDir()}</li> + <li>{@link android.content.Context#getFileStreamPath(java.lang.String) getFileStreamPath()}</li> + <li>{@link android.content.Context#getPackageCodePath() getPackageCodePath()}</li> + <li>{@link android.content.Context#getPackageResourcePath() getPackageResourcePath()}</li> + </ul> +</li> +<li>Поля {@link android.content.pm.ApplicationInfo}: + <ul> + <li>{@link android.content.pm.ApplicationInfo#dataDir dataDir}</li> + <li>{@link android.content.pm.ApplicationInfo#sourceDir sourceDir}</li> + <li>{@link android.content.pm.ApplicationInfo#nativeLibraryDir nativeLibraryDir}</li> + <li>{@link android.content.pm.ApplicationInfo#publicSourceDir publicSourceDir}</li> + <li>{@link android.content.pm.ApplicationInfo#splitSourceDirs splitSourceDirs}</li> + <li>{@link android.content.pm.ApplicationInfo#splitPublicSourceDirs splitPublicSourceDirs}</li> + </ul> +</li> +</ul> + +<p>Для отладки этой функции в Developer Preview подключите USB-устройство, + к устройству Android посредством USB-кабеля On-The-Go (OTG) и выполните следующую команду:</p> + +<pre class="no-prettyprint"> +$ adb shell sm set-force-adoptable true +</pre> + +<h2 id="behavior-apache-http-client">Отказ от HTTP-клиента Apache</h2> +<p>В M Preview удалена поддержка HTTP-клиента Apache. Если ваше приложение, разработанное для +Android 2.3 (уровень API 9) или более поздней версии, использует этот клиент, вам необходимо воспользоваться вместо него классом {@link java.net.HttpURLConnection}. + Этот API-интерфейс более эффективный, поскольку он сокращает использование сетевого трафика за счет прозрачного сжатия +и кэширования ответов, а также сводит к минимуму потребление энергии. Чтобы продолжить использовать API-интерфейсы HTTP Apache, +сначала объявите в своем файле {@code build.gradle} следующую зависимость compile-time: +</p> +<pre> +android { + useLibrary 'org.apache.http.legacy' +} +</pre> +<p>Вместо OpenSSL в Android теперь будет использоваться библиотека +<a href="https://boringssl.googlesource.com/boringssl/" class="external-link">BoringSSL</a> +. Если вы используете в ваших приложениях Android NDK, не связывайте его с криптографическими библиотеками, +которые не входят в состав API-интерфейса NDK, такими как {@code libcrypto.so} и {@code libssl.so}. Эти библиотеки +не являются общедоступными API-интерфейсами, и в разных выпусках или на разных устройствах они могут быть изменены или разбиты без предварительного уведомления. +Кроме того, этим вы можете создать уязвимости в системе безопасности вашего продукта. Вместо этого внесите изменения в +собственный код для вызова криптографических API-интерфейсов Java посредством JNI или статической ссылки на +библиотеку криптографии по своему выбору.</p> + +<h2 id="behavior-audiomanager-Changes">Изменения в классе AudioManager</h2> +<p>Теперь в платформе не поддерживается настройка уровня громкости напрямую или отключение звука определенных потоков с помощью класса {@link android.media.AudioManager}. + Метод {@link android.media.AudioManager#setStreamSolo(int,boolean) +setStreamSolo()} больше не используется. Вместо него следует вызывать метод +{@code AudioManager.requestAudioFocus()}. Также больше не используется метод +{@link android.media.AudioManager#setStreamMute(int,boolean) setStreamMute()}; +вместо него следует вызывать метод {@code AudioManager.adjustStreamVolume()} +и передавать в него значение направления {@code ADJUST_MUTE} или {@code ADJUST_UNMUTE}.</p> + +<h2 id="behavior-test-selection">Выделение текста</h2> + +<img src="{@docRoot}preview/images/text-selection.gif" style="float:right; margin:0 0 20px 30px" width="360" height="640" /> + +<p>Теперь, когда пользователь выделяет текст в приложении, такие дополнительные действия как +<em>Вырезать</em>, <em>Копировать</em> и <em>Вставить</em>, можно отображать на +<a href="http://www.google.com/design/spec/patterns/selection.html#selection-text-selection" class="external-link">перемещаемой панели инструментов</a>. Реализация взаимодействия пользователя с текстом аналогична той, которая используется для +контекстного меню, +как описано в статье +<a href="{@docRoot}guide/topics/ui/menus.html#CABforViews">Запуск контекстного меню для отдельных представлений</a>.</p> + +<p>Чтобы реализовать перемещаемую панель инструментов для выделения текста, внесите в ваши существующие приложения +следующие изменения.</p> +<ol> +<li>В объекте {@link android.view.View} или {@link android.app.Activity} измените вызовы +{@link android.view.ActionMode} с +{@code startActionMode(Callback)} на {@code startActionMode(Callback, ActionMode.TYPE_FLOATING)}.</li> +<li>Возьмите свою реализацию класса {@code ActionMode.Callback} и сделайте его наследуемой от класса +{@code ActionMode.Callback2}.</li> +<li>Переопределите метод {@code Callback2.onGetContentRect()} для указания координат объекта +{@link android.graphics.Rect} контента (например, прямоугольника выделения текста) в представлении.</li> +<li>Если расположение прямоугольника больше недействительно и это единственный элемент, который не подлежит пересчитыванию, +вызовите метод {@code ActionMode.invalidateContentRect()}.</li> +</ol> + +<p>Если вы используете +<a href="{@docRoot}tools/support-library/index.html">вспомогательную библиотеку Android</a> версии 22.2, то помните, что перемещаемым панелям инструментов +не свойственна обратная совместимость и по умолчанию для управления объектами {@link android.view.ActionMode} +используется библиотека appcompat. Это означает, что перемещаемые панели инструментов не будут отображаться. Чтобы включить поддержку +{@link android.view.ActionMode} в +{@link android.support.v7.app.AppCompatActivity}, вызовите метод +{@code android.support.v7.app.AppCompatActivity.getDelegate()}, затем вызовите +{@code android.support.v7.app.AppCompatDelegate.setHandleNativeActionModesEnabled()} для возвращенного объекта +{@link android.support.v7.app.AppCompatDelegate} и задайте для параметра input +значение {@code false}. Этот вызов возвращает управление объектами {@link android.view.ActionMode} +платформе. На устройствах под управлением M Preview платформа поддерживает как режимы +{@link android.support.v7.app.ActionBar}, так и режимы перемещаемых панелей инструментов, тогда как на устройствах под управлением более ранних версий +поддерживаются только режимы {@link android.support.v7.app.ActionBar}.</p> + +<h2 id="behavior-keystore">Изменения в хранилище ключей Android</h2> +<p>В M Preview +<a href="{@docRoot}training/articles/keystore.html">поставщик хранилища ключей Android</a> больше не поддерживает +DSA. ECDSA по-прежнему поддерживается.</p> + +<p>Ключи, для которых не требуется шифрование в хранилище, больше не будут удаляться при отключении или сбросе защищенного экрана блокировки +(например, пользователем или администратором устройства). Ключи, для которых требуется шифрование +в хранилище, во время таких событий будут удалены.</p> + +<h2 id="behavior-network">Изменения в работе с Wi-Fi и сетями</h2> + +<p>Ниже перечислены изменения в API-интерфейсах для работы с Wi-Fi и сетями, реализованные в M Preview.</p> +<ul> +<li>Теперь ваши приложения могут изменять состояние объектов {@link android.net.wifi.WifiConfiguration} +только в том случае, если эти объекты вы создали сами. Вам запрещено изменять или удалять объекты +{@link android.net.wifi.WifiConfiguration}, созданные пользователем или другими приложениями. +</li> +<li> +Ранее, если приложение принудительно подключало устройство к определенной сети Wi-Fi с помощью метода +{@link android.net.wifi.WifiManager#enableNetwork(int,boolean) enableNetwork()} и настройки +{@code disableAllOthers=true}, то устройство отключалось от других сетей, например, от +сотовой сети. В M Preview устройство больше не отключается от других сетей. Если +в вашем приложении для параметра {@code targetSdkVersion} выбрано значение {@code “20”} или меньше, оно закрепляется за выбранной сетью +Wi-Fi. Если же параметр {@code targetSdkVersion} имеет значение {@code “21”} или больше, следует использовать +API-интерфейсы для работы с несколькими сетями (такие как +{@link android.net.Network#openConnection(java.net.URL) openConnection()}, +{@link android.net.Network#bindSocket(java.net.Socket) bindSocket()} и новый метод +{@code ConnectivityManager.bindProcessToNetwork()}), чтобы обеспечить отправку +сетевого трафика приложения в выбранную сеть.</li> +</ul> + +<h2 id="behavior-camera">Изменения в службе камеры</h2> +<p>В M Preview изменена модель получения доступа к ресурсам в службе камеры. + Если раньше запросы доступа обрабатывались в порядке поступления, то теперь процессы с высоким приоритетом имеют преимущество. + В работе службы камеры произошли следующие изменения:</p> +<ul> +<li>Доступ к ресурсам подсистемы камеры, включая открытие и настройку устройства камеры, +предоставляется в зависимости от того, какой приоритет имеет процесс клиентского приложения. Процессы приложений с операциями, которые +видны пользователю или выполняются на переднем плане, обычно имеют более высокий приоритет, что повышает возможность доступа к ресурсам камеры и их +использования.</li> +<li>Когда приложение с более высоким приоритетом пытается использовать камеру, активные клиенты камеры для приложений с более низким приоритетом могут быть исключены из очереди доступа. + В устаревшем API-интерфейсе {@link android.hardware.Camera} +это приводит к вызову +{@link android.hardware.Camera.ErrorCallback#onError(int,android.hardware.Camera) onError()} +для исключенного клиента. В API-интерфейсе {@link android.hardware.camera2 Camera2} в таких случаях для исключенного клиента вызывается +{@link android.hardware.camera2.CameraDevice.StateCallback#onDisconnected(android.hardware.camera2.CameraDevice) onDisconnected()}. +</li> +<li>На устройствах, где камера позволяет такое, отдельным процессам +приложения предоставляется возможность одновременно и независимо друг от друга открывать и использовать ресурсы камеры. При этом служба камеры теперь отслеживает и исключает ситуации с использованием ресурсов несколькими процессами, +когда одновременный доступ вызывает значительное снижение производительности или негативно влияет на возможности +всех открытых камер. Это изменение +может привести к отключению доступа для клиентов с более низким приоритетом, даже если к этой же камере не пытаются получить доступ другие приложения. + +</li> +<li> +Смена пользователя приводит к исключению активных клиентов камеры в приложениях, относящихся к предыдущей учетной записи, +из очереди доступа. Доступ к камере предоставлен только профилям, которыми владеет активный пользователь устройства. +Фактически это означает, что если, например, пользователь переключился с гостевой учетной записи на другую, гостевой аккаунт не сможет покинуть запущенные процессы +, использующие ресурсы подсистемы камеры. +</li> +</ul> + +<h2 id="behavior-art-runtime">Среда выполнения ART</h2> +<p>Среда выполнения ART теперь должным образом реализует правила доступа для метода +{@link java.lang.reflect.Constructor#newInstance(java.lang.Object...) newInstance()}. Это +изменение позволило устранить проблему, связанную с тем, что в предыдущих версиях система Dalvik неправильно проверяла правила доступа. +Если ваше приложение использует метод +{@link java.lang.reflect.Constructor#newInstance(java.lang.Object...) newInstance()} и вы +хотите переопределить проверки доступа, вызовите метод +{@link java.lang.reflect.Constructor#setAccessible(boolean) setAccessible()}, присвоив параметру input +значение {@code true}. Если ваше приложение использует +<a href="{@docRoot}tools/support-library/features.html#v7-appcompat">библиотеку appcompat v7</a> или +<a href="{@docRoot}tools/support-library/features.html#v7-recyclerview">библиотеку recyclerview v7</a>, +вам необходимо установить актуальные версии этих библиотек. В противном случае убедитесь в том, +что любые настраиваемые классы, на которые имеются ссылки из XML, обновлены и их конструкторы классов доступны.</p> + +<p>В M Preview обновлено поведение динамического компоновщика. Теперь он распознает разницу между +{@code soname} библиотеки и путем к ней +(<a href="https://code.google.com/p/android/issues/detail?id=6670" class="external-link">ошибка 6670, о которой сообщалось в открытых источниках</a>), +и позволяет выполнять поиск по {@code soname}. + Приложения, которые ранее работали, но содержали неправильные записи {@code DT_NEEDED} +(обычно абсолютные пути в файловой системе компьютера для сборки), теперь при загрузке могут выдавать ошибки.</p> + +<p>В M Preview правильно реализован флаг {@code dlopen(3) RTLD_LOCAL}. Обратите внимание, что +{@code RTLD_LOCAL} используется по умолчанию, поэтому будут затронуты вызовы {@code dlopen(3)}, которые явно не используют +{@code RTLD_LOCAL} (за исключением случаев, когда ваше приложение явным образом использует{@code RTLD_GLOBAL}). Поскольку используется +{@code RTLD_LOCAL}, символы не будут доступны для библиотек, загруженных с использованием последующих вызовов +{@code dlopen(3)} (в противоположность ссылкам из записей {@code DT_NEEDED}).</p> +</p> + +<h2 id="behavior-apk-validation">Проверка пакетов APK</h2> +<p>Теперь платформа более строго подходит к проверке пакетов APK. Пакет APK считается поврежденным, если файл объявлен +в манифесте, но отсутствует в самом пакете APK. Пакет APK подлежит повторной подписи в случае удаления любого его +содержимого.</p> + +<h2 id="behavior-afw">Изменения в Android for Work</h2> +<p>В M Preview представлены следующие изменения работы Android for Work:</p> +<ul> +<li><strong>Рабочие контакты в контексте личных сведений.</strong> Теперь при просмотре пользователем прошлых звонков в журнале вызовов Google Dialer +в нем отображаются и рабочие контакты. +Чтобы скрыть эти сведения в журнале вызовов, установите для параметра {@code DevicePolicyManager.setCrossProfileCallerIdDisabled()} значение {@code true}. + Рабочие контакты могут отображаться на устройствах через Bluetooth вместе с +личными контактами только в том случае, если +для параметра {@code DevicePolicyManager.setBluetoothContactSharingDisabled()} задано значение {@code false}. По +умолчанию для этого параметра установлено значение {@code true}. +</li> +<li><strong>Удаление конфигурации Wi-Fi.</strong> Конфигурации Wi-Fi, добавленные владельцем профиля +(например, посредством вызова метода +{@link android.net.wifi.WifiManager#addNetwork(android.net.wifi.WifiConfiguration) +addNetwork()}), теперь удаляются при удалении соответствующего рабочего профиля.</li> +<li><strong>Блокировка конфигурации Wi-Fi.</strong> Пользователю больше не удастся изменить или удалить любые конфигурации Wi-Fi, созданные активным +владельцем устройства. Пользователь по-прежнему может создавать +и изменять свои собственные конфигурации Wi-Fi, если для этого пользователя не задана константа +{@link android.os.UserManager#DISALLOW_CONFIG_WIFI} {@link android.os.UserManager}.</li> +<li><strong>Загрузка приложения «Контроллер политики работы» путем добавления учетной записи Google.</strong> Теперь при добавлении на устройство учетной записи Google, +для управления которой требуется приложение «Контроллер политики работы», +вне управляемого контекста пользователю предлагается установить соответствующее приложение. +Это также применимо к учетным записям, добавляемым посредством мастера первоначальной настройки устройства в разделе +<strong>Настройки > Учетные записи</strong>.</li> +<li><strong>Изменения, касающиеся работы API-интерфейса DevicePolicyManager.</strong> +Вызов метода {@link android.app.admin.DevicePolicyManager#setCameraDisabled(android.content.ComponentName,boolean) setCameraDisabled()} +затрагивает только использование камеры пользователем, который его вызвал; вызов этого метода из управляемого профиля +не влияет на работу приложений камеры, выполняющихся для основного пользователя. Кроме того, метод +{@link android.app.admin.DevicePolicyManager#setKeyguardDisabledFeatures(android.content.ComponentName,int) setKeyguardDisabledFeatures()} +теперь доступен как для владельцев устройства, так и для владельцев профиля. Владелец профиля может задать +следующие ограничения для блокировки клавиатуры: +<ul> +<li>{@link android.app.admin.DevicePolicyManager#KEYGUARD_DISABLE_TRUST_AGENTS} и +{@link android.app.admin.DevicePolicyManager#KEYGUARD_DISABLE_FINGERPRINT}, которые влияют на настройки +блокировки клавиатуры для родительского пользователя профиля;</li> +<li>{@link android.app.admin.DevicePolicyManager#KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS}, которое +влияет только на уведомления, создаваемые приложениями в управляемом профиле.</li> +</ul> +</li> +</ul> diff --git a/docs/html-intl/intl/ru/preview/features/runtime-permissions.jd b/docs/html-intl/intl/ru/preview/features/runtime-permissions.jd new file mode 100644 index 0000000..7d12b2d --- /dev/null +++ b/docs/html-intl/intl/ru/preview/features/runtime-permissions.jd @@ -0,0 +1,794 @@ +page.title=Разрешения +page.tags=previewresources, androidm +page.keywords=разрешения, среда выполнения, предварительная версия +page.image={@docRoot}preview/features/images/permissions_check.png +@jd:body + + +<div id="qv-wrapper"> + <div id="qv"> + <h2>Краткое описание</h2> + <ul> + <li>Если ваше приложение предназначено для пакета SDK M Preview, пользователю будет предложено предоставить для него разрешения + не в процессе установки, а при работе с приложением.</li> + <li>Пользователь также может в любой момент отозвать разрешения, воспользовавшись экраном приложения «Настройки» +.</li> + <li>Ваше приложение должно проверять наличие соответствующих разрешений при каждом запуске. +</li> + </ul> + + <h2>Содержание документа</h2> + <ol> + <li><a href="#overview">Обзор</a></li> + <li><a href="#coding">Добавление в код разрешений на выполнение</a></li> + <li><a href="#testing">Тестирование разрешений на выполнение</a></li> + <li><a href="#best-practices">Советы и рекомендации</a></li> + </ol> + +<!-- + <h2>Related Samples</h2> + <ol> + <li></li> + </ol> +--> + +<!-- + <h2>See also</h2> + <ol> + <li></li> + </ol> +--> + </div> <!-- qv --> +</div> <!-- qv-wrapper --> + + +<p> + В версии M Developer Preview представлена новая модель разрешений для приложений, которая +оптимизирует для пользователей процесс установки и обновления приложений. Если приложение, +работающее в M Preview, поддерживает новую модель разрешений, пользователю не нужно предоставлять какие-либо +разрешения при установке приложения или его обновлении. Вместо этого приложение +запрашивает разрешения, когда в них возникает необходимость, — в таких случаях система отображает для пользователя диалоговое окно с просьбой предоставить +соответствующее разрешение. +</p> + +<p> + Если приложение поддерживает новую модель разрешений, его, тем не менее, можно установить и +запустить на устройстве под управлением одной из более ранних версий Android, и оно будет использовать старую модель +разрешений. +</p> + +<h2 id="overview"> + Обзор +</h2> + +<p> + В версии M Developer Preview представлена новая +модель разрешений. Ниже приводится краткий обзор ее ключевых компонентов: +</p> + +<ul> + <li> + <strong>Объявление разрешений.</strong> Все разрешения, которые требуются +приложению, объявляются в его манифесте, как и в более ранних версиях платформы Android. + </li> + + <li> + <strong>Группы разрешений.</strong> Разрешения +<em>группируются</em> по типу их функциональных возможностей. Например, в группе разрешений +<code>CONTACTS</code> находятся разрешения на чтение и запись +контактов пользователя и информации из его профиля. + </li> + + <li> + <p><strong>Ограниченные разрешения, предоставляемые во время установки.</strong> Когда +пользователь устанавливает или обновляет приложение, система предоставляет такому приложению все запрашиваемые им +разрешения, соответствующие константе {@link +android.content.pm.PermissionInfo#PROTECTION_NORMAL PROTECTION_NORMAL}. + Например, разрешения для будильника и подключения к Интернету соответствуют константе {@link +android.content.pm.PermissionInfo#PROTECTION_NORMAL PROTECTION_NORMAL}, +поэтому они предоставляются автоматически во время установки. + </p> + + <p>Система также может предоставить приложению подпись и системные разрешения, как описано в разделе +<a href="#system-apps">Предоставление приложениям системных разрешений и +подписи</a>. Пользователю <em>не предлагается</em> предоставить какие-либо разрешения +во время установки.</p> + </li> + + <li> + <strong>Предоставление пользователем разрешений во время выполнения.</strong> Когда приложение запрашивает разрешение, +система отображает для пользователя соответствующее диалоговое окно, а затем вызывает функцию обратного вызова приложения +с целью уведомить его о том, предоставлены ли необходимые разрешения. Если +пользователь предоставляет разрешение, приложение получает весь набор разрешений в рамках данной функциональной области +разрешения, который был объявлен в манифесте приложения. + </li> + +</ul> + +<p> + Новая модель разрешений влияет на поведение приложений при работе с функциями, для +которых требуются разрешения. При использовании этой модели в разработке + обратите внимание на следующие рекомендации: +</p> + +<ul> + + <li> + <strong>Всегда проверяйте наличие разрешений.</strong> Когда приложению необходимо выполнить +какое-либо действие, для которого требуется разрешение, оно должно сначала проверить, +имеется ли у него такое разрешение. Если разрешение отсутствует, приложение +должно запросить его. + </li> + + <li> + <strong>Если вам не дают разрешения, выходите из положения красиво.</strong> Если у приложения +нет нужного разрешения, оно должно обработать эту ошибку разумно. + Например, если разрешение требуется лишь для необязательной функции, приложение может +просто отключить ее. Если же приложение не может работать без данного разрешения, + оно может отключить все свои функциональные возможности и проинформировать пользователя, +что для работы ему требуется разрешение. + </li> + + <div class="figure" style="width:220px" id="fig-perms-screen"> + <img src="{@docRoot}preview/features/images/app-permissions-screen_2x.png" srcset="{@docRoot}preview/features/images/app-permissions-screen.png 1x, {@docRoot}preview/features/images/app-permissions-screen_2x.png 2x" alt="" width="220"> + <p class="img-caption"> + <strong>Рисунок 1.</strong> Экран разрешений в настройках приложения. + </p> + </div> + + <li> + <strong>Разрешения можно отзывать.</strong> Пользователи могут в любое время отозвать разрешения +приложения. Когда пользователь отзывает разрешения, +приложение <em>не</em> уведомляется об этом. Снова повторим, что приложение должно всегда проверять наличие +разрешений, прежде чем выполнять любые действия, для которых они необходимы. + </li> +</ul> + +<p class="note"> + <strong>Примечание.</strong> Если приложение предназначено для M Developer Preview, оно +<em>должно в обязательном порядке</em> использовать новую модель разрешений. +</p> + +<p> + На момент выпуска M Developer Preview не все приложения Google в полной мере реализуют + новую модель разрешений. Google обновляет эти приложения +по мере разработки M Developer Preview, чтобы они должным образом поддерживали настройки +разрешений. +</p> + +<p class="note"> + <strong>Примечание.</strong> Если у вашего приложения имеется собственная поверхность API-интерфейса, прежде чем проксировать +разрешения, убедитесь сначала в том, что у вызывающей операции имеются надлежащие +разрешения на доступ к данным. +</p> + +<h3 id="system-apps"> + Предоставление приложениям системных разрешений и подписи +</h3> + +<p> + Как правило, когда пользователь устанавливает приложение, система предоставляет такому приложению только те +разрешения, которые соответствуют константе {@link android.content.pm.PermissionInfo#PROTECTION_NORMAL +PROTECTION_NORMAL}. Однако в определенных ситуациях система предоставляет +приложению больше разрешений: +</p> + +<ul> + <li>если приложение является частью системного образа, ему автоматически предоставляются все +разрешения, обозначенные в его манифесте; + </li> + + <li>если в манифесте приложения запрашиваются разрешения, соответствующие константе {@link +android.content.pm.PermissionInfo#PROTECTION_SIGNATURE PROTECTION_SIGNATURE}, +а для подписи приложения использовался то же сертификат, что и для приложения, +объявившего эти разрешения, система предоставляет запрашивающему приложению необходимые разрешения при +установке. + </li> +</ul> + +<p> + В обоих случаях пользователь по-прежнему может в любое время отозвать разрешения, обратившись к +экрану <strong>Настройки</strong> и выбрав <strong>Приложения +></strong> <i>название_приложения</i> <strong>> Разрешения</strong>. Поэтому приложение все равноу +должно проверять наличие разрешений во время выполнения и при необходимости запрашивать их. + +</p> + +<h3 id="compatibility"> + Совместимость с предыдущими и последующими версиями +</h3> + +<p> + Если приложение не предназначено для M Developer Preview, оно +продолжает использовать старую модель разрешений даже на устройствах под управлением M Preview. В таком случае при установке приложения + система предлагает пользователю предоставить все разрешения, +указанные в манифесте приложения. +</p> + +<p class="note"> + <strong>Примечание.</strong> На устройствах под управлением M Developer Preview пользователь может отключить +разрешения для любого приложения (включая устаревшие приложения) на экране «Настройки». + Если пользователь решит отключить разрешения для устаревших приложений, система +автоматически отключит соответствующие функциональные возможности. Когда приложение пытается +выполнить операцию, для которой требуется такое разрешение, это +не обязательно приведет к возникновению исключения. Вместо этого оно может выдать пустой набор данных, +сигнал об ошибке или иным образом обозначить непредвиденное поведение. Например, если запросить +календарь, не имея соответствующего разрешения, метод возвратит пустой набор данных. +</p> + +<p> + При установке приложения с использованием новой модели разрешений на устройство +под управлением другой версии ОС, отличной от M Preview, +система рассматривает такое приложение как любое другое и предлагает +пользователю предоставить все объявленные разрешения уже во время установки. +</p> + +<p class="note"> + <strong>Примечание.</strong> В случае с предварительной версией в качестве минимальной версии пакета SDK +следует задать версию SDK M Preview, чтобы получить возможность компилировать код с помощью пакета SDK предварительной версии. Это означает, +что вы не сможете протестировать такие приложения на старых платформах +во время использования предварительной версии для разработчиков. +</p> + +<h3 id="perms-vs-intents">Разрешения и намерения</h3> + +<p> + Во многих случаях при разработке приложения у вас есть выбор между двумя способами выполнения задачи: + вы можете настроить приложение таким образом, чтобы оно самостоятельно запрашивало соответствующие разрешения на выполнение +операции, или же можно указать ему использовать намерение, чтобы задачу выполнило +другое приложение. +</p> + +<p> + Например, предположим, что вашему приложению требуется возможность делать снимки с помощью камеры устройства. + Ваше приложение может запросить разрешение +<code>android.permission.CAMERA</code>, которое позволит ему напрямую получить доступ +к камере. Затем ваше приложение использует API-интерфейсы камеры +для управления камерой и получения снимков. Благодаря такому подходу ваше приложение получает +полный контроль над процессом фотографирования. Кроме того, это позволяет вам вставить пользовательский интерфейс камеры +в свое приложение. +</p> + +<p> + Если же вам не требуется такой контроль, просто воспользуйтесь намерением {@link +android.provider.MediaStore#ACTION_IMAGE_CAPTURE ACTION_IMAGE_CAPTURE} +для запроса изображения. Когда вы запускаете намерение, пользователю предлагается выбрать +приложение камеры (если оно отличается от приложения камеры по умолчанию), после чего +это приложение делает снимок. Приложение камеры возвращает полученное изображение в метод {@link +android.app.Activity#onActivityResult onActivityResult()} вашего приложения. +</p> + +<p> + Аналогичным образом, если вам необходимо позвонить, получить доступ к контактам пользователя и так далее, +можно создать соответствующее намерение или запросить +разрешение и напрямую получить доступ к нужным объектам. У каждого подхода есть +как преимущества, так и недостатки. +</p> + +<p> + При использовании разрешений: +</p> + +<ul> + <li>Ваше приложение получает полный контроль над взаимодействием пользователя с интерфейсом во время выполнения +операции. Однако такой широкий контроль усложняет вашу задачу, +требуя разработать подходящий пользовательский интерфейс. + </li> + + <li>Пользователю предлагается предоставить разрешения только один раз, при первом +выполнении операции. После этого ваше приложение может выполнять операцию без вмешательства +со стороны пользователя. Однако если пользователь не +предоставит разрешение (или отзовет его позже), ваше приложение не сможет выполнить +операцию. + </li> +</ul> + +<p> + При использовании намерений: +</p> + +<ul> + <li>Вам не нужно разрабатывать пользовательский интерфейс для выполнения операции, его предоставляет приложение, которое обрабатывает +намерение. Однако это также означает, что у вас отсутствует контроль над +взаимодействием пользователя с интерфейсом. Возможно, пользователю придется взаимодействовать с +приложением, которое вы даже не видели. + </li> + + <li>Если у пользователя нет приложения по умолчанию для выполнения операции, система +предлагает ему выбрать приложение. Если пользователь не назначит обработчик +по умолчанию, то при каждом выполнении операции для него может +отображаться дополнительное диалоговое окно. + </li> +</ul> + +<h2 id="coding">Добавление в код разрешений на выполнение</h2> + +<p> + Если ваше приложение предназначено для новой версии M Developer Preview, вы должны в обязательном порядке использовать +новую модель разрешений. Это означает, что кроме объявления требуемых разрешений +в манифесте, вам следует проверять наличие этих разрешений +во время выполнения, а также запрашивать их, если у вас +еще нет необходимых разрешений. +</p> + +<h3 id="enabling"> + Активация новой модели разрешений +</h3> + +<p> + Чтобы активировать новую модель разрешений M Developer Preview, задайте для атрибута +<code>targetSdkVersion</code> приложения значение <code>"MNC"</code>, а для атрибута +<code>compileSdkVersion</code> – значение <code>"android-MNC"</code>. Это позволит +включить все функции новой модели разрешений. +</p> + +<p> + В случае с предварительной версией необходимо задать для параметра <code>minSdkVersion</code> значение +<code>"MNC"</code>, чтобы получить возможность компилировать код с помощью пакета SDK предварительной версии. +</p> + +<h3 id="m-only-perm"> + Назначение разрешений только для M Preview +</h3> + +<p> + В манифесте приложения можно использовать новый элемент <code><uses-permission-sdk-m></code>, +чтобы указать, что разрешение требуется только для M Developer Preview. Если объявить +разрешение таким способом, то при установке приложения на устройство с более старой версией платформы +система не будет отправлять запрос пользователю или предоставлять разрешение приложению. +С помощью элемента <code><uses-permission-sdk-m></code> +вы можете добавлять новые разрешения +в обновленные версии вашего приложения без принудительного запроса у пользователей разрешений при +установке обновления. +</p> + +<p> + Если приложение запущено на устройстве под управлением M Developer Preview, +поведение элемента <code><uses-permission-sdk-m></code> аналогично поведению +<code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code>. + Система не запрашивает у пользователей предоставление каких-либо разрешений, когда они устанавливают +приложение. Вместо этого приложение само запрашивает разрешения, когда они требуются. +</p> + +<h3 id="prompting"> + Запрос разрешений +</h3> + +<p> + Если ваше приложение использует новую модель разрешений M Developer Preview, то при первом запуске приложения +на устройстве под управлением +M Preview пользователю не предлагается предоставить все разрешения. Вместо этого приложение само запрашивает разрешения, когда они +требуются. Когда приложение запрашивает разрешение, система отображает для пользователя соответствующее диалоговое +окно. +</p> + +<p> + Если ваше приложение запущено на устройстве с пакетом SDK уровня 22 или более низкого, то приложение использует старую +модель разрешений. То есть при каждой устновке приложения пользователю будет предложено предоставить приложению все разрешения, +запрашиваемые в манифесте приложения, кроме +отмеченных элементом <code><uses-permission-sdk-m></code>. +</p> + +<h4 id="check-platform">Проверка платформы, на которой выполняется приложение</h4> + +<p> + Новая модель разрешений поддерживается только на устройствах под управлением M Developer +Preview. Прежде чем вызывать любые из этих методов, приложению следует проверить, +на какой платформе оно выполняется, +обратившись к значению параметра {@link android.os.Build.VERSION#CODENAME +Build.VERSION.CODENAME}. Если устройство работает под управлением M Developer Preview, +то значение параметра{@link android.os.Build.VERSION#CODENAME CODENAME} будет <code>"MNC"</code>. +</p> + +<h4 id="check-for-permission">Проверка наличия у приложения необходимого разрешения</h4> + +<p>Когда пользователи пытаются выполнить какое-либо действие, для которого требуется разрешение, приложение +проверяет, имеется ли у него в настоящее время разрешение на выполнение этой операции. Для этого +приложение вызывает метод +<code>Context.checkSelfPermission(<i>permission_name</i>)</code>. Приложению +следует выполнять такую проверку даже в том случае, если ему известно, что пользователь уже предоставил +необходимое разрешение, +поскольку пользователь может в любое время отозвать разрешения приложения. Например, если пользователь +хочет получить снимок с помощью приложения, то приложение вызывает метод +<code>Context.checkSelfPermission(Manifest.permission.CAMERA)</code>.</p> + +<p class="table-caption" id="permission-groups"> + <strong>Таблица 1.</strong> Разрешения и группы разрешений.</p> +<table> + <tr> + <th scope="col">Группа разрешений</th> + <th scope="col">Разрешения</th> + </tr> + + <tr> + <td><code>android.permission-group.CALENDAR</code></td> + <td> + <ul> + <li> + <code>android.permission.READ_CALENDAR</code> + </li> + </ul> + <ul> + <li> + <code>android.permission.WRITE_CALENDAR</code> + </li> + </ul> + </td> + </tr> + + <tr> + <td><code>android.permission-group.CAMERA</code></td> + <td> + <ul> + <li> + <code>android.permission.CAMERA</code> + </li> + </ul> + </td> + </tr> + + <tr> + <td><code>android.permission-group.CONTACTS</code></td> + <td> + <ul> + <li> + <code>android.permission.READ_CONTACTS</code> + </li> + <li> + <code>android.permission.WRITE_CONTACTS</code> + </li> + <li> + <code>android.permission.READ_PROFILE</code> + </li> + <li> + <code>android.permission.WRITE_PROFILE</code> + </li> + </ul> + </td> + </tr> + + <tr> + <td><code>android.permission-group.LOCATION</code></td> + <td> + <ul> + <li> + <code>android.permission.ACCESS_FINE_LOCATION</code> + </li> + <li> + <code>android.permission.ACCESS_COARSE_LOCATION</code> + </li> + </ul> + </td> + </tr> + + <tr> + <td><code>android.permission-group.MICROPHONE</code></td> + <td> + <ul> + <li> + <code>android.permission.RECORD_AUDIO</code> + </li> + </ul> + </td> + </tr> + + <tr> + <td><code>android.permission-group.PHONE</code></td> + <td> + <ul> + <li> + <code>android.permission.READ_PHONE_STATE</code> + </li> + <li> + <code>android.permission.CALL_PHONE</code> + </li> + <li> + <code>android.permission.READ_CALL_LOG</code> + </li> + <li> + <code>android.permission.WRITE_CALL_LOG</code> + </li> + <li> + <code>com.android.voicemail.permission.ADD_VOICEMAIL</code> + </li> + <li> + <code>android.permission.USE_SIP</code> + </li> + <li> + <code>android.permission.PROCESS_OUTGOING_CALLS</code> + </li> + </ul> + </td> + </tr> + + <tr> + <td><code>android.permission-group.SENSORS</code></td> + <td> + <ul> + <li> + <code>android.permission.BODY_SENSORS</code> + </li> + </ul> + <ul> + <li> + <code>android.permission.USE_FINGERPRINT</code> + </li> + </ul> + </td> + </tr> + + <tr> + <td><code>android.permission-group.SMS</code></td> + <td> + <ul> + <li> + <code>android.permission.SEND_SMS</code> + </li> + <li> + <code>android.permission.RECEIVE_SMS</code> + </li> + <li> + <code>android.permission.READ_SMS</code> + </li> + <li> + <code>android.permission.RECEIVE_WAP_PUSH</code> + </li> + <li> + <code>android.permission.RECEIVE_MMS</code> + </li> + <li> + <code>android.permission.READ_CELL_BROADCASTS</code> + </li> + </ul> + </td> + </tr> + +</table> + +<h4 id="request-permissions">Запрос разрешений при необходимости</h4> + +<p>Если у приложения нет требуемого разрешения, оно вызывает метод +<code>Activity.requestPermissions(String[], int)</code>, чтобы запросить его. + Приложение передает в него +требуемые разрешения, а также целочисленный код запроса. + Этот метод выполняется асинхронно: он возвращает результат сразу же, а после того как пользователь +предоставляет ответ в диалоговом окне, система вызывает метод обратного вызова +приложения с результатами и передает в него тот же код запроса, который приложение передало в метод +<code>requestPermissions()</code>.</p> + + <p>Ниже представлен пример кода для проверки наличия у приложения разрешения на чтение контактов +пользователя и запроса соответствующего разрешения при необходимости.</p> + +<pre> +if (checkSelfPermission(Manifest.permission.READ_CONTACTS) + != PackageManager.PERMISSION_GRANTED) { + requestPermissions(new String[]{Manifest.permission.READ_CONTACTS}, + MY_PERMISSIONS_REQUEST_READ_CONTACTS); + + // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an + // app-defined int constant + + return; +} +</pre> + +<h4 id="handle-response">Обработка ответа на запрос разрешений</h4> + +<p> + Когда приложение запрашивает разрешения, система отображает для пользователя соответствующее диалоговое +окно. После получения ответа от пользователя система вызывает метод +<code>Activity.onRequestPermissionsResult(int, String[], int[])</code> +вашего приложения и передает в него ответ пользователя. Вашему приложению необходимо переопределить этот метод. В обратном +вызове передается тот же код запроса, который вы передали в метод +<code>requestPermissions()</code>. Например, если приложение запрашивает доступ на +<code>READ_CONTACTS</code>, то метод обратного вызова +может быть следующим: +</p> + +<pre> +@Override +public void onRequestPermissionsResult(int requestCode, + String permissions[], int[] grantResults) { + switch (requestCode) { + case MY_PERMISSIONS_REQUEST_READ_CONTACTS: { + if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { + + // permission was granted, yay! do the + // calendar task you need to do. + + } else { + + // permission denied, boo! Disable the + // functionality that depends on this permission. + } + return; + } + + // other 'switch' lines to check for other + // permissions this app might request + } +} +</pre> + + <p>Если пользователь предоставляет разрешение, система, в свою очередь, представляет все разрешения, +запрашиваемые в манифесте приложения для обозначенной функциональной области. Если пользователь +отказывает в предоставлении разрешения, вам необходимо принять меры. Например, вы можете отключить любые пункты меню +, для использования которых требуется это разрешение. + </li> +</p> + +<p> + Когда система предлагает пользователю предоставить разрешение, он может указать системе, +чтобы она больше не запрашивала это разрешение. В этом случае, +когда приложение использует метод <code>requestPermissions()</code> для запроса такого разрешения, +система сразу же отклоняет запрос. При этом система вызывает ваш метод +<code>onRequestPermissionsResult()</code> так же, как если бы пользователь повторно +отклонил ваш запрос. Поэтому ваше приложение +не считает, что имело место прямое взаимодействие с пользователем. +</p> + +<h2 id="testing">Тестирование разрешений на выполнение</h2> + + +<p> + Если ваше приложение предназначено для новой версии M Developer Preview, то вы должны протестировать +его и убедиться в том, что оно должным образом обрабатывает разрешения. Не надо исходить из того, что к началу работы ваше приложение уже имеет +любые определенные разрешения. При первом запуске приложения оно, +скорее всего, не будет обладать разрешениями, а в дальнейшем пользователь может в любой момент отозвать или восстановить +разрешения. +</p> + +<p> + Вам следует протестировать ваше приложение и убедиться в том, что оно ведет себя должным образом в +любых ситуациях, касающихся разрешений. Мы включили в состав пакета SDK M Preview SDK новые команды +<a href="{@docRoot}tools/help/adb.html">Android +Debug Bridge (ADB)</a>, чтобы вы могли протестировать ваше приложение с любыми настройками разрешений, +которые вы хотите попробовать в действии. +</p> + +<h3> + Новые команды и параметры ADB +</h3> + +<p> + В состав пакета инструментов SDK M Preview входит ряд новых команд, позволяющих протестировать обработку разрешений +вашим приложением. +</p> + +<h4> + Установка с разрешениями +</h4> + +<p> + Можно воспользоваться новым параметром <code>-g</code> команды <a href="{@docRoot}tools/help/adb.html#move"><code>adb + install</code></a>, который служит для установки +приложения и предоставления всех разрешений, указанных в его манифесте: +</p> + +<pre class="no-pretty-print"> +$ adb install -g <path_to_apk> +</pre> + +<h4> + Предоставление разрешений и их отзыв +</h4> + +<p> + Для предоставления разрешений установленному приложению и их отзыва можно использовать новые команды <a href="{@docRoot}tools/help/adb.html#pm">диспетчера пакетов</a> +ADB. +Такая функциональная возможность может быть полезна для автоматизированного тестирования. +</p> + +<p> + Для представления разрешения используйте команду <code>grant</code> диспетчера пакетов: +</p> + +<pre class="no-pretty-print"> +$ adb pm grant <package_name> <permission_name> +</pre> + +<p> + Например, чтобы представить пакету com.example.myapp разрешение на запись +аудио, воспользуйтесь следующей командой: +</p> + +<pre class="no-pretty-print"> +$ adb pm grant com.example.myapp android.permission.RECORD_AUDIO +</pre> + +<p> + Чтобы отозвать разрешение, используйте команду <code>revoke</code> диспетчера пакетов: +</p> + +<pre class="no-pretty-print"> +$ adb pm revoke <package_name> <permission_name> +</pre> + +<h2 id="best-practices">Советы и рекомендации</h2> + +<p> + Новая модель разрешений делает работу пользователей удобнее, +упрощает для них процесс установки приложений и позволяет лучше понимать, +что делает то или иное приложение. Чтобы использовать все преимущества +этой модели, примите во внимание следующие рекомендации: +</p> + + +<h3 id="bp-what-you-need">Запрашивайте только те разрешения, которые необходимы</h3> + +<p> + Каждый раз, когда вы запрашиваете разрешение, вы заставляете пользователя делать выбор. + Если пользователь отклоняет запрос, соответствующая функциональная возможность приложения отключается. + Вам следует сократить количество таких запросов. +</p> + +<p> + Например, во многих случаях можно предоставить приложению доступ к нужной функции посредством +<a href="{@docRoot}guide/components/intents-filters.html">намерения</a> вместо +запроса разрешений. Если вашему приложению необходимо получить снимки с камеры +телефона, можно использовать намерение {@link +android.provider.MediaStore#ACTION_IMAGE_CAPTURE +MediaStore.ACTION_IMAGE_CAPTURE}. Когда ваше приложение выполняет намерение, система +предлагает пользователю выбрать уже установленное приложение камеры для +получения снимков. +</p> + +<h3 id="bp-dont-overwhelm"> + Не перегружайте пользователя запросами +</h3> + +<p> + Если на пользователя обрушивается сразу много запросов разрешений, он может +решить, что все это слишком сложно, и просто закрыть приложение. Поэтому разрешения следует +запрашивать только тогда, когда это необходимо. +</p> + +<p> + Иногда приложению жизненно необходимы одно или несколько разрешений. +В таких случаях имеет смысл запросить все разрешения +сразу при запуске приложения. Например, если вы разрабатываете приложение для фотографирования, то ему +однозначно потребуется доступ к камере устройства. Когда пользователь в первый раз запускает приложение, +он не удивится, если приложение запросит у него разрешение на +использование камеры. Однако если в этом же приложении имеется функция обмена фотографиями с +контактами пользователя, возможно, <em>не следует</em> запрашивать соответствующее разрешение при +первом запуске приложения. Лучше дождаться, когда пользователю потребуется функция обмена контентом, +и уже тогда запросить разрешение. +</p> + +<p> + Если в вашем приложении имеются обучающие материалы, может оказаться целесообразным запросить необходимые разрешения +после того, как пользователь изучит материалы. +</p> + +<h3 id="bp-explain"> + Всегда поясняйте, для чего требуются те или иные разрешения +</h3> + +<p> + В диалоговом окне запроса разрешений, которое система отображает при вызове вами метода +<code>requestPermissions()</code>, обозначается требуемое для приложения разрешение, +однако не указывается, для чего оно необходимо. В некоторых случаях это может озадачить пользователя. + Поэтому, прежде чем вызывать метод +<code>requestPermissions()</code>, стоит пояснить пользователю, для чего вашему приложению требуются разрешения. +</p> + +<p> + Например, приложению для фотографирования может потребоваться доступ к службам геолокации, чтобы фотографии можно было снабдить +геотегами. Не все пользователи знают, что +фотография может содержать данные о месте съемки, и им может показаться странным, что приложение для фотографирования запрашивает данные +о местоположении. В этом случае полезно +рассказать пользователю о такой возможности, <em>прежде</em> чем вызывать метод +<code>requestPermissions()</code>. +</p> + +<p> + Это можно сделать, в частности, внедрив такие запросы в обучающие материалы приложения. В обучающих +материалах могут содержаться описания каждой из функций приложения с пояснением, +какие разрешения необходимы для их использования. Например, в обучающий материал по работе с приложением для фотографирования +можно включить описание функции обмена контентом с контактами, после чего +пояснить, что для этого пользователю следует предоставить приложению доступ к его контактам. + После этого приложение может вызвать метод <code>requestPermissions()</code> для запроса +доступа. Конечно, не все пользователи обращаются к обучающим материалам, +поэтому вам по-прежнему следует проверять наличие разрешений и при необходимости запрашивать +их во время обычной работы приложения. +</p> diff --git a/docs/html-intl/intl/ru/preview/overview.jd b/docs/html-intl/intl/ru/preview/overview.jd new file mode 100644 index 0000000..6ed1d20 --- /dev/null +++ b/docs/html-intl/intl/ru/preview/overview.jd @@ -0,0 +1,362 @@ +page.title=Обзор программы +page.metaDescription=Добро пожаловать в программу Android M Developer Preview, участники которой получают всё необходимое для тестирования и оптимизации своих приложений для следующей версии платформы Android. +page.image=images/cards/card-preview_16-9_2x.png +page.tags="preview", "developer", "android" + +@jd:body + +<p> + Добро пожаловать в программу <strong>Android M Developer Preview</strong>, участники которой получают всё необходимоедля тестирования и оптимизации своих приложений для следующей версии платформы Android. + + Это бесплатная программа, и приступить к ее использованию можно прямо сейчас, загрузив +инструменты M Developer Preview. +</p> + +<div style="background-color:#eceff1;padding:1em;"> +<div class="wrap"> + <div class="cols"> + <div class="col-4of12"> + <h5> + Системные образы эмулятора и оборудования + </h5> + + <p> + Запускайте и тестируйте ваши приложения на устройствах Nexus 5, 6, 9 и Player (для Android TV), а также в эмуляторе. + + </p> + </div> + + <div class="col-4of12"> + <h5> + Самый актуальный код платформы + </h5> + + <p> + Во время знакомства с предварительной версией платформы мы будем предоставлять различные обновления, поэтому вы сможете протестировать самые актуальные изменения в платформе. + + </p> + </div> + + <div class="col-4of12"> + <h5> + Получение обновлений по беспроводной связи + </h5> + + <p> + После прошивки своего устройства для работы с предварительной версией платформы вы сможете получать обновления по беспроводной связи. + + </p> + </div> + </div> + + <div class="cols"> + + + <div class="col-4of12"> + <h5> + Новые возможности и новые функции + </h5> + + <p> + Начните уже заранее реализовывать в своих приложениях поддержку расширенной функциональности платформы, например, новую модель разрешений на выполнение и функции сбережения энергии. + + </p> + </div> + + <div class="col-4of12"> + <h5> + Приоритетная обработка отчетов об ошибках от разработчиков + </h5> + + <p> + В течение первых нескольких недель мы будем рассматривать отчеты об ошибках, поступающие от разработчиков, в приоритетном порядке, поэтому не теряйте времени и приступайте к тестированию и составлению отзывов как можно раньше. + + </p> + </div> + + <div class="col-4of12"> + <h5> + Отзывы и поддержка + </h5> + + <p> + Отправляйте нам отчеты об ошибках и предоставляйте свои отзывы с помощью нашей <a href="https://code.google.com/p/android-developer-preview/">системы отслеживания проблем</a>. + Обменивайтесь идеями и предложениями с другими разработчиками в <a href="http://g.co/dev/AndroidMDevPreview">сообществе разработчиков Android M</a>. + + </p> + </div> + </div> +</div> +</div> + +<!-- +<p> + With the M Developer Preview, you'll get an early start on testing your apps, + with enough time to make adjustments before the public platform release later + in the year. We'll provide several updates to the Preview tools in the weeks + ahead, so you can keep in sync with the latest changes as the platform moves + toward launch. +</p> +<img src="{@docRoot}preview/images/m-preview-timeline.png" alt= +"Preview program timeline" id="timeline"> +<p> + You can help us improve the platform by <a href= + "https://code.google.com/p/android-developer-preview/">reporting issues</a> + through our feedback channels. This is especially + critical in the first month of the preview, when we’ll be giving priority to + developer-reported issues and feedback. +</p> --> + + +<h2 id="timeline"> + График и обновления +</h2> +<img src="{@docRoot}preview/images/m-preview-timeline-crop.png" alt="Preview program timeline" id="timeline"> +<p> + Тестирование версии M Developer Preview запланировано на период с 28 мая до выпуска окончательной версии пакета SDK Android M, который +состоится незадолго до публикации новой платформы в открытом доступе в +третьем квартале 2015 г. +</p> + +<p> + На ключевых этапах разработки платформы мы предоставим обновления для тестовых устройств. + Ниже перечислены предварительные даты этих ключевых этапов. +</p> + +<ul> + <li> + <strong>Preview 1</strong> (первоначальный выпуск версии Preview, конец мая) + </li> + + <li> + <strong>Preview 2</strong> (конец июня/начало июля) + </li> + + <li> + <strong>Preview 3</strong> (почти окончательный выпуск, конец июля) + </li> +</ul> + +<p> + Завершающим этапом обновлений станет выход <strong>окончательной версии пакета SDK</strong> (в третьем квартале), +где будут представлены официальные API-интерфейсы для новой версии Android, а также +окончательные версии функций и поведений системы. +</p> + +<p> + Мы настоятельно рекомендуем вам в ходе тестирования и разработки приложений для Android M <strong>постоянно +обновлять вашу среду разработки</strong> по мере выхода обновлений для версии Preview. + Чтобы упростить этот процесс, мы будем отправлять на устройства, которые уже прошиты для работы с предварительной версией платформы, <strong>обновления по беспроводной сети</strong>. +Мы также будем предоставлять вам системные образы, которые можно +загрузить и использовать для прошивки устройства вручную. +</p> +<p class="note"> + <strong>Примечание.</strong> Окончательные версии пакета SDK и системных образов не будут отправляться по беспроводной сети, +их придется <strong>вручную установить</strong> на +тестовые устройства.</strong> +</p> + +<p> + Мы будем сообщать о появлении обновлений для версии Preview в <a href="http://android-developers.blogspot.com/">блоге разработчиков Android</a>, а +также на этом сайте и в +<a href="http://g.co/dev/AndroidMDevPreview">сообществе разработчиков Android M</a>. +</p> + +<h2 id="preview_tools"> + Что входит в состав Preview? +</h2> + +<p> + M Developer Preview содержит всё, что вам необходимо для тестирования ваших существующих приложений на экранах различных размеров, +тестирования с использованием различных сетевых технологий, чипсетов ЦП и графических процессоров, + а также на различных архитектурах оборудования. +</p> + +<h4> + Инструменты SDK +</h4> + +<p> + С помощью менеджера SDK в <a href="{@docRoot}sdk/installing/adding-packages.html">Android Studio</a> вы можете загрузить следующие компоненты: +</p> + +<ul> + <li><strong>Инструменты SDK</strong> для M Developer Preview. + </li> + + <li><strong>Системный образ эмулятора</strong> (32- и +64-разрядная версии) для M Developer Preview. + </li> + + <li><strong>Системный образ эмулятора для Android TV</strong> (32- и +32-разрядная версии) + </li> +</ul> + +<h4> + Системные образы оборудования +</h4> + +<p> + На странице +<a href="download.html">Загрузки</a> можно скачать следующие системные образы оборудования: +</p> + +<ul> + <li> + Системный образ устройства <strong>Nexus 5</strong> (GSM/LTE) («hammerhead») + </li> + + <li> + Системный образ устройства <strong>Nexus 6</strong> («shamu») + </li> + + <li> + Системный образ устройства <strong>Nexus 9</strong> (Wi-Fi) («volantis») + </li> + + <li> + Системный образ устройства <strong>Nexus Player</strong> (Android TV) («fugu») + </li> +</ul> + +<h4> + Документация и примеры кода +</h4> + +<p> + Здесь вы можете найти документацию, где представлены подробные сведения о версии Preview: +</p> + +<ul> + <li> + Документ, посвященный <a href="setup-sdk.html">настройке пакета SDK</a>, с пошаговыми инструкциями +по началу работы. + </li> + + <li> + <a href="{@docRoot}preview/testing/guide.html">Руководство по тестированию</a> и <a href="behavior-changes.html">обзор изменений в работе</a> с указанием ключевых областей для тестирования. + </li> + + <li>Документация по новым API-интерфейсам, включая <a href="api-overview.html">обзор API-интерфейсов</a>, +<a href="{@docRoot}preview/download.html#docs">справочник по API-интерфейсам</a> для загрузки и подробные руководства для разработчиков, +в которых освещаются такие ключевые функции платформы, +как <a href="{@docRoot}preview/features/runtime-permissions.html">разрешения</a>, +<a href="{@docRoot}preview/backup/index.html">резервное копирование приложений</a> и многое другое. + </li> + + <li> + <a href="{@docRoot}preview/samples.html">Примеры кода</a>, где можно посмотреть реализацию поддержки +разрешений и других новых функций. + </li> + + <li> + <a href="{@docRoot}preview/support.html#release-notes">Примечания к выпуску</a> для текущей версии +M Developer Preview, включая информацию об изменениях и различные отчеты. + </li> +</ul> + +<h4> + Ресурсы поддержки +</h4> + +<p> + При тестировании и разработке приложений для M +Developer Preview рекомендуем пользоваться следующими ресурсами поддержки: +</p> + +<ul> + <li><a href="https://code.google.com/p/android-developer-preview/">Система отслеживания проблем M +Developer Preview</a> — это ваш <strong>основной канал для предоставления своих +отзывов.</strong> С ее помощью вы можете сообщать нам об обнаруженных ошибках, проблемах производительности, а также предоставлять общие отзывы. + Также можно ознакомиться с <a href="https://code.google.com/p/android-developer-preview/wiki/KnownIssues">известными проблемами</a> +и действиями по их устранению. + </li> + + <li><a href="http://g.co/dev/AndroidMDevPreview">Сообщество разработчиков Android +M</a> — это сообщество Google+, где можно <strong>общаться с другими +разработчиками</strong>, работающими с Android M. Делитесь в сообществе своими наблюдениями +и идеями, а также находите ответы на вопросы об Android M. + </li> +</ul> + + +<h2 id="preview_apis_and_publishing"> + Выбор целевого уровня, предварительные версии API-интерфейсов и публикация приложений +</h2> + +<p> + Выпуск Android M Developer Preview предназначен исключительно для разработки и +<strong>не имеет стандартного уровня API</strong>. Если вы не хотите +проверять свое приложение на совместимость (хотя мы настоятельно рекомендуем делать это), +выберите целевой уровень M Developer Preview, задав для параметра <code><a href= + "/guide/topics/manifest/uses-sdk-element.html">targetSdkVersion</a></code> +своего приложения значение <code>“MNC”</code>. +</p> + +<p> + В Android M Developer Preview представлены <strong>предварительные версии API-интерфейсов</strong> +—. Такие API-интерфейсы не будут официально опубликованы до выпуска окончательной версии пакета SDK, + намеченого на третий квартал 2015 г. Это означает, что в будущем можно +<strong>ожидать незначительных изменений в API-интерфейсах</strong>, особенно в +первые недели действия программы. Каждое обновление +Android M Developer Preview будет включать обзор изменений. +</p> + +<p class="note"> + Обратите внимание, что несмотря на возможные изменения в предварительных версиях API-интерфейсов, соответствующие расширения функциональности системы, +такие как разрешения на выполнение и функции сбережения энергии, работают стабильно и уже готовы для +тестирования. +</p> + +<p> + Что касается публикации приложений, то политика Google Play <strong>однозначно запрещает публикацию приложений, +разработанных для M Developer Preview</strong>. После выхода окончательной версии пакета SDK Android M +вы сможете выбрать официальный целевой уровень API Android M и приступить +к публикации ваших приложений в магазине Google Play. Тем временем, если вы хотите распространить приложение, предназначенное для +тестировщиков Android M, то используйте для этого электронную почту или разместите такие приложения на своем сайте +для прямой загрузки. +</p> + +<h2 id="get_started"> + Начало работы +</h2> + +<p> + Чтобы приступить к тестированию своего приложения, выполните указанные ниже действия. +</p> + +<ol> + <li>Ознакомьтесь с <a href="{@docRoot}preview/api-overview.html">обзором API-интерфейсов</a> +и сведениями об <a href="{@docRoot}preview/behavior-changes.html">изменениях в работе</a>, чтобы получить +представление о новых возможностях платформы и о том, как это может повлиять на ваши приложения. В частности, узнайте подробнее о новой модели +<a href="{@docRoot}preview/features/runtime-permissions.html">разрешений на +выполнение</a>, функциях сбережения энергии и автоматическом резервном копировании. + </li> + + <li>Настройте свою среду, руководствуясь инструкциями по +<a href="{@docRoot}preview/setup-sdk.html">настройке пакета SDK Preview</a> +и конфигурированию тестовых устройств. + </li> + + <li>Выполните +<a href="https://developers.google.com/android/nexus/images">инструкции по прошивке</a>, чтобы прошить устройства +Nexus 5, 6, 9 и Player с использованием последнего системного образа M Developer Preview. После прошивки вашего устройства для разработки +обновления Preview на него будут приходить по беспроводной сети.</a> + </li> + + <li>Загрузите <a href="{@docRoot}preview/download.html#docs">справочник по API-интерфейсам M Preview</a> +и <a href="{@docRoot}preview/samples.html">примеры кода M Preview</a> +, чтобы узнать больше о новых возможностях API-интерфейсов и о том, как использовать их в ваших +приложениях. + </li> + + <li>Присоединяйтесь к <a href="http://g.co/dev/AndroidMDevPreview">сообществу разработчиков Android +M</a>, чтобы всегда быть в курсе последних новостей и общаться с другими +разработчиками, работающими с новой платформой. + </li> +</ol> + +<p> + Благодарим за участие в программе Android M Developer! +</p> |