Google выпустила вторую бета-версию Android 17. Она предлагает ряд новых возможностей, включая API EyeDropper и средство выбора контактов с сохранением конфиденциальности.

Обновления Android 17 Beta 2:

  • Bubbles — функция многооконного режима, которая позволяет запускать любые приложения в плавающих окнах, напоминающих отображаемые поверх другого контента уведомления для отправки сообщений, не привязанные к специализированному API. Чтобы открыть приложение в плавающем окне, нужно удерживать его пиктограмму. Такие окна можно группировать, перемещать и закреплять на экране;

  • системный API EyeDropper API — теперь приложение может получить информацию о цвете любого пикселя на экране без необходимости получения полномочий на захват экрана. Пользователь сам выбирать область для определения цвета через управляемый платформой интерфейс c пипеткой;

val eyeDropperLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
  result -> if (result.resultCode == Activity.RESULT_OK) {
    val color = result.data?.getIntExtra(Intent.EXTRA_COLOR, Color.BLACK)
    // Use the picked color in your app
  }
}

fun launchColorPicker() {
  val intent = Intent(Intent.ACTION_OPEN_EYE_DROPPER)
  eyeDropperLauncher.launch(intent)
}
  • системный инструмент выбора контактов, доступный через ACTION_PICK_CONTACTS, который предоставляет временный, основанный на сессии, доступ на чтение только к конкретным полям данных, запрошенным пользователем. Это снижает необходимость в широких разрешениях READ_CONTACTS. Он также позволяет выбирать контакты из личного или рабочего профиля устройства;

val contactPicker = rememberLauncherForActivityResult(StartActivityForResult()) {
    if (it.resultCode == RESULT_OK) {
        val uri = it.data?.data ?: return@rememberLauncherForActivityResult
        // Handle result logic
        processContactPickerResults(uri)
    }
}

val dataFields = arrayListOf(Email.CONTENT_ITEM_TYPE, Phone.CONTENT_ITEM_TYPE)
val intent = Intent(ACTION_PICK_CONTACTS).apply {
    putStringArrayListExtra(EXTRA_PICK_CONTACTS_REQUESTED_DATA_FIELDS, dataFields)
    putExtra(EXTRA_ALLOW_MULTIPLE, true)
    putExtra(EXTRA_PICK_CONTACTS_SELECTION_LIMIT, 5)
}

contactPicker.launch(intent)
  • унифицирована обработка событий от мыши и тачпада — теперь по умолчанию события тачпада, связанные с перемещением указателя и жестами прокрутки, преобразуются в формат с относительными координатами, как для мыши. Доступ к абсолютным координатам предоставляется при явном указании режима POINTER_CAPTURE_MODE_ABSOLUTE;

// To request the new default relative mode (mouse-like events)
// This is the same as requesting with View.POINTER_CAPTURE_MODE_RELATIVE
view.requestPointerCapture()

// To request the legacy absolute mode (raw touch coordinates)
view.requestPointerCapture(View.POINTER_CAPTURE_MODE_ABSOLUTE)
  • добавлен вызов метода getInitialRestingBounds в ChooserSession Android, чтобы приложение могло определить целевую позицию диалога выбора (Chooser) после завершения анимации и загрузки данных;

  • новый API Handoff позволяет указать состояние приложения для возобновления работы на другом устройстве, например на планшете Android. При включении этой функции система синхронизирует состояние через CompanionDeviceManager и отображает предложение о передаче приложения в меню запуска ближайших устройств. Handoff поддерживает как переходы между нативными приложениями, так и резервный переход из приложения в веб-версию;

  • расширенные API для определения расстояния — UWB DL-TDOA (позволяет приложениям использовать UWB для навигации внутри помещений с сохранением конфиденциальности) и API Proximity Detection (позволяет приложениям использовать новую спецификацию определения расстояния, принятую WFA);

  • использование getStreamingAppMaxDownlinkKbps и getStreamingAppMaxUplinkKbps для оптимизации качества мультимедиа в приложении, чтобы получать максимальную скорость передачи данных, выделенную оператором;

  • новое полномочие ACCESS_LOCAL_NETWORK для ограничения доступа приложений к локальной сети. Это позволяет приложениям определять и подключаться к устройствам в локальной сети, например к устройствам умного дома и мультимедийным системам. Полномочие добавлено, чтобы блокировать сканирование вредоносными приложениями локальной сети для скрытого отслеживания пользователей;

  • расширена защита от перехвата одноразовых паролей (OTP) и кодов подтверждения через SMS. Прямой доступ к подобным сообщениям теперь открывается большинству приложений лишь спустя три часа после поступления сообщения. В штатном приложении для чтения SMS подобные сообщения показываются сразу;

  • интент ACTION_TIMEZONE_OFFSET_CHANGED, который срабатывает при изменении смещения часового пояса системы, например, во время перехода на летнее время. Он дополняет существующие интенты ACTION_TIME_CHANGED и ACTION_TIMEZONE_CHANGED, которые срабатывают при изменении метки времени Unix и при изменении идентификатора часового пояса соответственно;

  • приложения, ориентированные на Android 17, которым необходимо напрямую обращаться к NPU, должны объявить FEATURE_NEURAL_PROCESSING_UNIT в своем манифесте, чтобы избежать блокировки доступа;

  • основные библиотеки интернационализации обновлены до ICU 78, что расширяет поддержку новых шрифтов, символов и блоков эмодзи, а также позволяет напрямую форматировать объекты времени.

Сборки прошивки подготовлены для устройств Pixel 6/6a/6 Pro, Pixel 7/7a/7 Pro, Pixel 8/8a/8 Pro, Pixel 9/9a/9 Pro/9 Pro XL/9 Pro Fold, Pixel 10/10 Pro/10 Pro XL/10 Pro Fold, Pixel Fold и Pixel Tablet. 

В феврале Google начала распространять первую бета-версию Android 17. В новой ОС убрали ранее действовавшие опции для отключения нового поведения на устройствах с экранами шириной более 600 условных пикселей, связанного с игнорированием некоторых API для управления изменением размера и ориентацией экрана (screenOrientation, resizeableActivity, [min|max]AspectRatio), а также адаптивным размещением приложений в окнах, допускающих изменение размера и перемещение по экрану.