| 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> |