sound_mode_advanced
A Flutter plugin for detecting and controlling the ringer mode (Normal, Silent, Vibrate) on Android devices. Also supports detecting ringer mode status on iOS (read-only).
Community-maintained fork of TryingOutSomething/sound_mode, republished as sound_mode_advanced on pub.dev because the upstream maintainer is no longer accepting pull requests.
Installation
Add sound_mode_advanced to your pubspec.yaml:
dependencies:
sound_mode_advanced: ^4.0.0
Then run:
flutter pub get
Android Setup
Permissions
To allow the app to change ringer mode on Android 6.0+, you need to request Do Not Disturb access. Add the following permission to your AndroidManifest.xml:
<uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY" />
Place this inside the <manifest> tag, not inside <application>.
Usage
Get current ringer mode
import 'package:sound_mode_advanced/sound_mode_advanced.dart';
RingerModeStatus ringerStatus = await SoundMode.ringerModeStatus;
print(ringerStatus);
Change ringer mode (Android only)
import 'package:sound_mode_advanced/sound_mode_advanced.dart';
try {
await SoundMode.setSoundMode(RingerModeStatus.silent);
} on PlatformException {
print('Please enable the required permissions');
}
Handling Do Not Disturb Access (Android 6.0+)
import 'package:sound_mode_advanced/sound_mode_advanced.dart';
bool? isGranted = await PermissionHandler.permissionsGranted;
if (isGranted != true) {
await PermissionHandler.openDoNotDisturbSetting();
}
iOS Support
Warning: iOS support is currently experimental and unreliable. Reading the ringer mode status may not work consistently across all devices and OS versions. This feature also does not work on iOS simulators — only real devices.
A short delay is recommended before reading the ringer status for more reliable results:
import 'package:sound_mode_advanced/sound_mode_advanced.dart';
RingerModeStatus ringerStatus = RingerModeStatus.unknown;
Future.delayed(const Duration(seconds: 1), () async {
try {
ringerStatus = await SoundMode.ringerModeStatus;
} catch (err) {
ringerStatus = RingerModeStatus.unknown;
}
print(ringerStatus);
});
RingerModeStatus Values
| Value | Description |
|---|---|
RingerModeStatus.unknown |
Unknown or unsupported status |
RingerModeStatus.normal |
Device is in Normal mode |
RingerModeStatus.silent |
Device is in Silent mode |
RingerModeStatus.vibrate |
Device is in Vibrate mode |
Issues
Please file issues on GitHub.
License
MIT — see LICENSE. Original work Copyright (c) 2020 Jan Owyeong Guo Yong.