sound_mode_advanced 4.0.0
sound_mode_advanced: ^4.0.0 copied to clipboard
A plugin to manage a device's sound mode on Android and detect ringer mode on iOS. Supports Do Not Disturb permission handling on Android API 24+.
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.