Volimiter is an Android utility app that limits media volume while the device is using the built-in speaker. It lets the user choose a maximum media volume, start a foreground service that enforces that limit, and protect stopping the limiter with a PIN.
Current status: early Android project / pre-release. The app is not yet published on Google Play.
- Set a maximum allowed media volume with a simple slider
- Runs as a foreground service while active
- Restarts after device boot when previously enabled
- Allows higher volume when wired, Bluetooth, or USB headphones are connected
- PIN protection for stopping the limiter
- Optional Device Admin activation for uninstall protection
- Optional launcher icon hiding/restoring from inside the app
Volimiter monitors the device's STREAM_MUSIC volume while the service is running. If no supported headset device is detected and the current media volume exceeds the configured maximum, the app lowers it back to the selected limit.
The app stores the selected volume locally using Android SharedPreferences. The PIN is encrypted using the Android Keystore with AES/GCM before being saved locally.
- Kotlin
- Android Studio
- Gradle Kotlin DSL
- Android foreground service
- Android Device Admin API
- Android Keystore
- SharedPreferences
Volimiter/
├── app/
│ ├── src/main/
│ │ ├── java/com/example/volimiter/
│ │ │ ├── MainActivity.kt
│ │ │ ├── VolimiterService.kt
│ │ │ ├── BootReceiver.kt
│ │ │ ├── PinManager.kt
│ │ │ ├── IconManager.kt
│ │ │ └── VolimiterDeviceAdmin.kt
│ │ ├── res/
│ │ └── AndroidManifest.xml
│ ├── build.gradle.kts
│ └── proguard-rules.pro
├── build.gradle.kts
├── settings.gradle.kts
└── gradle/libs.versions.toml
- Android Studio
- Android SDK installed through Android Studio
- JDK configured for Android development
- Android emulator or physical Android device
git clone https://github.com/ZJDavis/Volimiter.git
cd Volimiter- Open Android Studio.
- Choose Open.
- Select the
Volimiterproject folder. - Let Gradle sync.
- Run the app on an emulator or physical device.
- Open Volimiter.
- Choose the maximum media volume using the slider.
- Tap Start Volimiter.
- Set a PIN when prompted.
- Grant Device Admin access if you want uninstall protection.
- Tap Stop Volimiter and enter the PIN to stop the limiter.
Volimiter currently uses the following Android capabilities:
FOREGROUND_SERVICEFOREGROUND_SERVICE_MEDIA_PLAYBACKRECEIVE_BOOT_COMPLETED- Device Admin receiver
The Device Admin behavior and app icon hiding feature should be clearly explained to users before release. These features affect user control and may require careful policy review before publishing on Google Play.
- Current UI is functional but minimal.
- Tests are still the default Android Studio sample tests.
- The service checks volume every 500ms using a
Handler; this is simple but may be optimized later. - Device Admin and hidden-icon behavior may create Google Play policy risk if not handled transparently.
- The current package name is still the default-style
com.example.volimiter.
- Improve UI design and onboarding
- Add a clear explanation screen before Device Admin activation
- Add a PIN reset/recovery strategy
- Add tests for PIN storage and volume-limiting behavior
- Add notification action to open the app
- Add settings screen
- Add Play Store screenshots and listing text
- Review Google Play policy risk around uninstall protection and icon hiding
Once the app is ready, take screenshots of:
- Main screen with the volume slider.
- First-run onboarding dialog.
- PIN setup dialog.
- Running state / notification.
- Device Admin permission explanation.
- Privacy policy dialog.
No license has been selected yet.
If this project will be public, consider adding a license such as MIT, Apache-2.0, or keeping it as All Rights Reserved.