Manifest & Permissions

POST_NOTIFICATIONS on Android: Permission, Channels and Delivery

On Android versions requiring POST_NOTIFICATIONS, notification delivery involves more than a manifest entry. The app's runtime permission, notification channel settings and the actual posting logic can each prevent a notification from appearing.

By Updated 2 min read

Declare and request in context

For the applicable platform path, declare:

XML · REFERENCE EXAMPLE
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />

Use the current notification-permission guidance for behavior by Android and target-SDK version. Explain the kind of notification the user is enabling rather than asking before the app has demonstrated its purpose.

A notification permission is not required on every older Android version, so guard version-specific requests appropriately.

Diagnose three independent layers

Layer Check
App-level access Is notification permission currently granted where required?
Channel Does the channel exist, and has the user disabled or changed it?
Delivery code Was the notification actually posted with the correct channel and content?

A successful push-message receipt does not prove a visible notification was posted. Conversely, a foreground data message may be intentionally handled without showing one.

Respect denial and settings changes

Keep the app usable when notifications are optional and declined. Provide a clear settings entry for users who later change their mind, but do not open settings repeatedly without an action from the user.

The runtime-permission model requires checking current access rather than trusting a past grant. Test returning to the app after access is revoked.

Test install and upgrade paths

Fresh installations, app upgrades and device upgrades can have different initial states. Test each relevant path on controlled devices. Include blocked channels, denied permission and a notification posted while the app is in the foreground and background.

Do not infer universal behavior from a development phone that already granted access months ago.

Review with APKLint

The Manifest Checker can verify the declaration and highlight related permission concerns. It cannot inspect a user's channel settings or guarantee delivery through a push service. Keep server receipt, client handling and visible presentation as separate diagnostics so the failure is fixed at the correct layer.

Sources and further reading

  1. Android Developers: Notification runtime permission
  2. Android Developers: Request runtime permissions

Reference review: 22 September 2026. Examples illustrate the workflow; check your installed versions, release artifact and account-specific Console requirements before applying them. This guide is not a claim that APKLint executed your project or verified your private account.

APKLint

Android inspection tools and practical release guides. About APKLint · Report a correction