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

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:sound_mode_advanced/sound_mode_advanced.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  RingerModeStatus _soundMode = RingerModeStatus.unknown;
  String? _permissionStatus;

  @override
  void initState() {
    super.initState();
    _getCurrentSoundMode();
    _getPermissionStatus();
  }

  Future<void> _getCurrentSoundMode() async {
    RingerModeStatus ringerStatus = RingerModeStatus.unknown;

    Future.delayed(const Duration(seconds: 1), () async {
      try {
        ringerStatus = await SoundMode.ringerModeStatus;
      } catch (err) {
        ringerStatus = RingerModeStatus.unknown;
      }

      if (mounted) {
        setState(() {
          _soundMode = ringerStatus;
        });
      }
    });
  }

  Future<void> _getPermissionStatus() async {
    bool? permissionStatus = false;
    try {
      permissionStatus = await PermissionHandler.permissionsGranted;
    } catch (err) {
      debugPrint('$err');
    }

    if (mounted) {
      setState(() {
        _permissionStatus = permissionStatus == true
            ? 'Permissions Enabled'
            : 'Permissions not granted';
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text('Running on: $_soundMode'),
              Text('Permission status: $_permissionStatus'),
              const SizedBox(height: 20),
              ElevatedButton(
                onPressed: _getCurrentSoundMode,
                child: const Text('Get current sound mode'),
              ),
              ElevatedButton(
                onPressed: _setNormalMode,
                child: const Text('Set Normal mode'),
              ),
              ElevatedButton(
                onPressed: _setSilentMode,
                child: const Text('Set Silent mode'),
              ),
              ElevatedButton(
                onPressed: _setVibrateMode,
                child: const Text('Set Vibrate mode'),
              ),
              ElevatedButton(
                onPressed: _openDoNotDisturbSettings,
                child: const Text('Open Do Not Access Settings'),
              ),
            ],
          ),
        ),
      ),
    );
  }

  Future<void> _setSilentMode() async {
    try {
      final status = await SoundMode.setSoundMode(RingerModeStatus.silent);
      setState(() {
        _soundMode = status;
      });
    } on PlatformException {
      debugPrint('Do Not Disturb access permissions required!');
    }
  }

  Future<void> _setNormalMode() async {
    try {
      final status = await SoundMode.setSoundMode(RingerModeStatus.normal);
      setState(() {
        _soundMode = status;
      });
    } on PlatformException {
      debugPrint('Do Not Disturb access permissions required!');
    }
  }

  Future<void> _setVibrateMode() async {
    try {
      final status = await SoundMode.setSoundMode(RingerModeStatus.vibrate);
      setState(() {
        _soundMode = status;
      });
    } on PlatformException {
      debugPrint('Do Not Disturb access permissions required!');
    }
  }

  Future<void> _openDoNotDisturbSettings() async {
    await PermissionHandler.openDoNotDisturbSetting();
  }
}
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