sound_mode_advanced 4.0.0 copy "sound_mode_advanced: ^4.0.0" to clipboard
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 #

pub package License: MIT

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.

2
likes
160
points
44
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

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+.

Repository (GitHub)
View/report issues

License

MIT (license)

Dependencies

flutter

More

Packages that depend on sound_mode_advanced

Packages that implement sound_mode_advanced