Android 17 can suppress playback and volume calls without throwing. A foreground service is necessary, but apps targeting API 37 also need the right while-in-use path.
The player looks healthy. The process is alive. No exception reaches crash reporting. Yet after the app leaves the screen, sound never starts. Android 17 makes this failure plausible by design: playback and volume APIs can be suppressed without an exception when the app is outside a valid lifecycle. Audio focus at least returns AUDIOFOCUS_REQUEST_FAILED.
This is not another “best audio apps” article and does not touch Neyrotex’s Mobile review queue. It is a developer troubleshooting guide for podcasts, music, meditation, navigation, fitness, and other apps that intentionally continue audio after the activity disappears. The test plan below is derived from Google’s current documentation; no hands-on device result is claimed.
The rule has two layers
For every app running on Android 17, background playback, focus, or volume work needs a visible activity or a foreground service that is not SHORT_SERVICE. That applies even when the app has not moved its target SDK to 37.
Apps targeting Android 17 face a second gate. A background foreground service must have while-in-use (WIU) capability. A service started while the app is visible, or from a clearly user-initiated route such as a notification or media control, can receive that capability. A service started opportunistically from the background often cannot. The documented exception is narrow: exact-alarm permission combined with an audio stream using USAGE_ALARM.
| State | Expected status | Diagnostic signal |
|---|---|---|
| User taps Play while the activity is visible | Start or bind the playback foreground service while WIU is available | Media notification and active session appear |
| Activity moves to background | Service and media session continue the user-initiated operation | dumpsys audio shows the active client; playback remains audible |
| Transient buffering or focus loss under ten minutes | Keep the service active while intent to play remains | Session stays controllable and can recover |
| Content ends, permanent focus loss, or unrecoverable error | Stop playback, session, and foreground service | No leaked notification or later surprise resume |
| Background job tries to start audio without valid intent | Framework suppresses the operation | AudioHardening log shows partial or full |
Use Media3 as the default repair path
Google recommends placing the player and media session inside a MediaSessionService. The service separates playback from the activity, exposes controls to the system, and manages the foreground notification. Apps serving a browsable catalog should use MediaLibraryService with the same lifecycle pattern.
The manifest still matters. A playback service needs FOREGROUND_SERVICE, FOREGROUND_SERVICE_MEDIA_PLAYBACK, and android:foregroundServiceType="mediaPlayback". The system notification is part of the contract: Android 17’s rule is built around an operation the user can see and stop.
Turn silent suppression into a loud lab failure
Android’s dedicated test command is more useful than waiting for a user report:
adb shell cmd audio set-enable-hardening throw
adb logcat | grep AudioHardening
adb shell dumpsys audio
The throw mode enables restrictions and converts volume and focus misuse into loud failures. Native playback writes return errors, and some playback paths crash. Use it only in a test environment. The enable mode matches silent production behavior; disable gives a negative control.
Google documents two log levels. partial means no foreground service is running. full means a service exists but lacks WIU capability. That distinction prevents the common half-fix: adding a service while still starting it from an invalid background path.
Cases that need their own branch
Picture-in-picture remains a visible activity state, so a foreground-only video app may not be affected until it offers screen-off playback. VoIP apps should already use the recommended telecom stack and foreground patterns. Alarm apps cannot generalize from their exception: it requires exact-alarm permission and the alarm usage attribute, not any timed audio feature.
Do not keep a playback service alive indefinitely after a permanent stop. Google recommends retaining it through a transient failure shorter than ten minutes, then ending it when playback intent is gone. The repair is a lifecycle, not a daemon.
Official sources
- Android 17 — Background audio hardening, checked August 18, 2026.
- Android 17 — Behavior changes for all apps, checked August 18, 2026.
- Android 17 — Changes for apps targeting API 37, checked August 18, 2026.
- Media3 — Background playback with MediaSessionService, checked August 18, 2026.