🤖Android 16 QPR2: системный шаринг наконец стал интерактивным
Раньше системный шузер для шаринга был «односторонним»: вы собрали Intent, отдали его в Intent.createChooser(...) — и дальше всё полностью контролирует система.
После открытия sharesheet вы уже не можете:
👉 обновить текст или вложения;
👉 убрать/добавить таргеты;
👉 синхронизировать состояние с продолжающимся действием в приложении.
Если пользователь что-то поменял (например, отредактировал текст или выбор вложений), приходилось закрывать шузер и открывать его заново.
Не так давно была возможность изменить контент для шаринга из шузера (сделали похожим как в iOS), а также добавить действия.
В Android 16 QPR2 / API 36.1 появился новый механизм — Interactive Chooser Sessions. Теперь приложение может держать живую сессию шаринга, обновлять её и получать события, пока открыт системный sharesheet. Для этого используются ChooserManager и ChooserSession.
// Базовый пример: запуск интерактивной сессии (Kotlin)
val chooserManager: ChooserManager = context.getSystemService()
val shareIntent = Intent(Intent.ACTION_SEND).apply {
type = "text/plain"
putExtra(Intent.EXTRA_TEXT, "This is a message that will be shared.")
}
val chooserIntent = Intent.createChooser(shareIntent, null)
val session: ChooserSession = chooserManager.startSession(context, chooserIntent)
val token: ChooserSessionToken = session.token
token можно сохранить в ViewModel или savedStateHandle, чтобы потом восстановить сессию после поворота экрана или пересоздания Activity.
val existingToken: ChooserSessionToken = /* restore from state */
val existingSession: ChooserSession = chooserManager.getSession(existingToken) ?: return
Управление сессией через ChooserSession API
val executor: Executor = ContextCompat.getMainExecutor(context)
session.addStateListener(executor, object : ChooserSession.StateListener {
override fun onStateChanged(state: Int) { }
override fun onBoundsChanged(bounds: Rect) { }
})
Временное отключение таргетов на время долгой операции:
session.setTargetsEnabled(false)
val updatedShareIntent = Intent(Intent.ACTION_SEND).apply {
type = "text/plain"
putExtra(Intent.EXTRA_TEXT, "Updated message generated in runtime")
}
val updatedChooserIntent = Intent.createChooser(updatedShareIntent, null)
session.updateIntent(updatedChooserIntent)
session.setTargetsEnabled(true)
// Завершение сессии, когда шаринг больше не нужен:
session.endSession()
#Android#Android16
Принудительные монохромные иконки в действии. ChatGPT у меня установлен как PWA и пока их автоматический монохром не задевает, вот Shortcut приложений перекрасился
#android#android16
Вот так рабоnает принудительный режим темной темы в Android 16 QRP 2
Google Maps имеют свою тёмную тему, но в настройках приложения я поставил принудительно только светлую тему. Расширенный темный режим не берет ресурсы для темной темы, а инвертирует светлую.
#android#android16
🤯 В Android 16 квоты на выполнение фоновой работы через JobScheduler (его обёрткой является WorkManager) привязали к механизму App Standby bucket. Также это коснется и DownloadManager
Теперь, то как регулярно вы пользуете приложением будет влиять на то как много фоновой работы можно будет выполнить. Подробнее про квоты можно читать тут.
Всё шлифуют систему, чтобы приоритизировать её на основании популярности приложения для пользователя. Я вообще не открываю часть приложений и рассчитываю, что они в фоне сделают работу, а сейчас лучше сразу наверняка идти в настройки и отключать ограничения на работу в фоне (спасибо, что не убрали совсем). И я как разработчик знаю про это. Как жить простым пользователям?
С одной стороны решение правильное - оптимизация идет с упором на интересны пользователя и сохранение батарейки, но с другой стороны разработчикам теперь надо больше объяснять алгоритм действий для включения ожидаемой пользователем работы всегда.
Что вы думаете про совершествование формата фоновой работы в Android? Делитесь своими болями и предложениями.
#android#android16
🤖 Появилась официальное руководство по реализации Live Update уведомлений в Android
Live Update уведомление - новый формат нотификаций для отслеживания прогресса операции, ограниченного по времени, в реальном времени: доставки, таймера, поездки на такси и другого.
Обычно все такие крутые фичи быстро приходят в приложение пиццы с птицей. Пока его не видел там, но очень очень жду. Да как и в такси. Разработчики, пожалуйста, расскажите ПМам, что теперь на Android можно как на iOS сделать
#android#android16
❗️Незаметное изменение Android 16, которое стоит проверить
После обновления моего Pixel 9 Pro заметил что в лаунчере отключили растягивание старого формата иконок приложения на весь его размер в лаунчере. Заметил, потому что банковское приложение, которым я пользовался перестало растягиваться 😞
Напомню, что Android иконки имеют свою историю и по хорошему надо поддерживать несколько форматов в зависимости от minSdk вашего приложения:
👉 Обычное лого (Android 7.0 и ниже)
👉 Круглое лого (Android 7.1)
👉Адаптивное лого (Android 8.0)
👉Themed лого (Android 13). Расширение формат Adaptive Icon из Android 8.0
Какое поведение на других стандартных лаунчерах приложения у смартфонов с Android 16 я не знаю, но можете скинуть скриншоты в комментариях.
#Android#Android16