Floating media controls for Android.
A compact overlay bar that keeps previous, play/pause, and next within reach while you stay in other apps.
Android 10+ · Kotlin · Jetpack Compose
MediaFloat focuses on one job: giving Android media controls a small, movable surface that stays available above other apps. The app stays intentionally narrow so setup, runtime behavior, and recovery remain understandable.
- A floating overlay bar for
Previous,Play / pause, andNext - Saved overlay position, width presets, theme presets, and persistent runtime behavior
- Main, Settings, Advanced, Support, and hidden Debug surfaces inside the single-module app
- Widget controls for opacity, media artwork, media text, and left/right sidebar placement
- App-language support for
System default, English, Korean, Chinese, Japanese, Spanish, and French - Android resource-backed shell text for the shipped app surfaces and runtime-facing notices
- A foreground-service runtime with readiness checks for overlay, notification listener, and notification posture
- Launcher shortcuts for
Launch widget,Stop widget, andToggle widget - Triple-tap stop on the floating widget drag handle
- An exported automation action for launching the overlay flow from routines or shortcuts
- Clone the repository.
- Open it in Android Studio.
- Let Gradle sync.
- Run the
appconfiguration on an emulator or Android device.
Command line install:
./gradlew installDebugWindows:
gradlew.bat installDebugMediaFloat depends on Android system capabilities before the overlay can remain active:
- Open
MediaFloat. - Grant overlay access, also known as display over other apps.
- Grant notification-listener access so MediaFloat can observe active media sessions.
- Allow app notifications, especially on Android 13+, so the foreground-service notification stays visible.
- Start playback in a media app.
- Use
Main,Settings, orDebugto start the overlay.
If readiness is blocked, the app exposes shortcuts back to the relevant system settings screens.
| Permission or access | Why MediaFloat needs it |
|---|---|
SYSTEM_ALERT_WINDOW |
Shows the floating control bar above other apps |
FOREGROUND_SERVICE and FOREGROUND_SERVICE_SPECIAL_USE |
Keeps the overlay runtime visible and recoverable |
POST_NOTIFICATIONS |
Shows the required foreground-service notification |
| Notification listener access | Reads active media-session state and supported transport actions |
Main- start or stop the overlay quickly and see whether setup is readySettings- adjust visible buttons, size presets, width, opacity, and core widget behaviorAdvanced- choose app language, theme preset, sidebar side, persistent overlay mode, and Debug visibilitySupport- review setup guidance, runtime/media status, build details, product constraints, and license noticesDebug- inspect runtime readiness, inspect media readiness, send transport commands, start or stop the overlay, clear logs, and review recent events
MediaFloat uses the AppCompat app-language path so locale selection works on Android 13+ and older supported versions.
Available app languages:
System defaultEnglishKoreanChineseJapaneseSpanishFrench
The language picker lives in Advanced, and the current app language is reflected in Support.
MediaFloat includes an exported action for launching the overlay flow from automation tools:
sw2.io.mediafloat.action.SHOW_OVERLAY
The launcher shortcut set exposes Launch widget, Stop widget, and Toggle widget for quick control without opening the full app UI.
If readiness is blocked, the app falls back to the main interface so the missing access can be fixed.
This repository includes keystore.properties.example as the expected release-signing shape.
To wire a signed local release build:
- Copy
keystore.properties.exampletokeystore.properties. - Generate or place your release keystore at the configured path.
- Update the store password, key alias, and key password values.
- Run
gradlew.bat assembleReleaseon Windows or./gradlew assembleReleaseelsewhere.
keystore.properties and local keystore files are ignored by Git.
MediaFloat is distributed under the Apache License 2.0.
The app also includes a concise in-app notice summary for the main third-party libraries used in the shipped Android build, including AndroidX, Compose Material 3, Google Material Components, and Kotlin standard library components.

