Zygote
API 30 · R

Android 11

Conversation notifications and bubbles

released
2020-09-08
runtime
ART
design
Material (Material You groundwork)
status
stable

The story

Android 11 was shaped by a year of remote work and a renewed focus on privacy.

The problem

Permissions had become routine grants that users did not revisit, and the kernel still varied wildly between devices.

Android 11 added one-time permissions, permission auto-reset, package visibility filtering, conversation notifications, and GKI, which made the kernel updatable.

The one thing to remember

The kernel became something Google could update.

What shipped

  • Conversation notifications and bubbles
  • One-time permissions
  • Power menu controls for smart home
  • Media controls in Quick Settings
  • Wireless Android Auto

Platform internals

What changed underneath the APIs. These are the changes this site's architecture modules explain in depth.

  • GKI: the Generic Kernel Image splits the kernel into core + vendor modules
  • App hibernation
  • Package visibility filtering
  • Incremental app installs

What developers had to deal with

  • Package visibility (<queries>)
  • Background location requires a second request
  • One-time permissions
  • Scoped storage enforced for targeting apps
  • Incremental installation
  • APK Signature Scheme v4

Behaviour changes

The full archive has every recorded change with its migration advice.

targetingstorage

Scoped storage is enforced

Apps targeting Android 11 cannot use requestLegacyExternalStorage; scoped storage applies.

What to doUse app-specific directories, MediaStore or the Storage Access Framework.

targetingpermissions

Background location is a separate grant

An app must request background location separately, and the system may show a second prompt.

What to doExplain the need and handle denial of background location independently of foreground location.

targetingpermissions

One-time permissions

Users can grant camera, microphone or location for one session only.

What to doCheck permission state each time and handle revocation between sessions.

targetingprivacy

Permission auto-reset

Permissions are reset for apps that go unused for a few months.

What to doCheck permissions at runtime rather than caching the result forever.

targetingother

Package visibility is filtered

Apps only see installed packages they declare an interest in through a <queries> element.

What to doDeclare <queries> for packages you need to discover, or use the intent-based APIs.

targetingbackground

Foreground service access to the camera and microphone

Foreground services have restricted access to camera and microphone while in the background.

What to doDo the work while visible, or use the appropriate foreground service type.

targetingnotifications

Bubbles and conversation notifications

Conversations must be marked as such to get the new notification treatment.

What to doSet the conversation shortcut and the notification category so conversations rank correctly.

targetingui

Display cutout and waterfall insets

The system enforces insets for cutouts and curved edges more strictly.

What to doUse WindowInsets APIs instead of hard-coded system bar heights.

all appsprivacy

Mic and camera toggles

The user can disable the microphone and camera system-wide.

What to doHandle unavailable sensors and inform the user what is happening.

all appsother

Incremental installation

Apps can be installed and launched before the download finishes.

What to doMake sure your app handles being launched with partial resources.

all appssecurity

APK Signature Scheme v4

Incremental installs use the v4 signature.

What to doUpdate the signing setup in CI so builds produce a v4 signature.

Permissions introduced here

  • BIND_CONTROLSunknown
  • BIND_QUICK_ACCESS_WALLET_SERVICEsignature
  • INTERACT_ACROSS_PROFILESunknown
  • LOADER_USAGE_STATSsignature|privileged|appop
  • MANAGE_EXTERNAL_STORAGEsignature|appop|preinstalled
  • NFC_PREFERRED_PAYMENT_INFOnormal
  • QUERY_ALL_PACKAGESnormal
  • READ_PRECISE_PHONE_STATEunknown

Where this sits

Release 30 of 37 API levels, by date
Headline features
5
Architecture changes
4
Developer changes
6
Sources cited
6

Kernel

This release shipped on Linux kernel versions 4.14, 4.19, 5.4. Kernel versions vary by device.