/flutter_ringtone_player

Simple Flutter plugin to play ringtone, alarm & notification sounds

Primary LanguageJavaMIT LicenseMIT

flutter_ringtone_player

A simple ringtone, alarm & notification player plugin.

pub package

Usage

Register service and add permission to AndroidManifest.xml:

<service android:name="io.inway.ringtone.player.FlutterRingtonePlayerService"/>

<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>

Add following import to your code:

import 'package:flutter_ringtone_player/flutter_ringtone_player.dart';

Then simply call this to play system default notification sound:

FlutterRingtonePlayer.playNotification();

There's also this generic method allowing you to specify in detail what kind of ringtone should be played:

FlutterRingtonePlayer.play(
  android: AndroidSounds.notification,
  ios: IosSounds.glass,
  looping: true, // Android only - API >= 28
  volume: 0.1, // Android only - API >= 28
  asAlarm: false, // Android only - all APIs
);

.play*() optional attributes

Attribute Description
bool looping Enables looping of ringtone. Requires FlutterRingtonePlayer.stop(); to stop ringing.
double volume Sets ringtone volume in range 0 to 1.0.
bool asAlarm Allows to ignore device's silent/vibration mode and play given sound anyway. Because this will run the service in foreground you also have to set alarmNotificationMeta.
AlarmNotificationMeta alarmNotificationMeta Sets further attributes for the alarm notification which will be created if the sound will be played as alarm.

To stop looped ringtone please use:

FlutterRingtonePlayer.stop();

Above works only on Android, and please note that by default Alarm & Ringtone sounds are looped.

Default sounds

Method Android iOS
playAlarm System#DEFAULT_ALARM_ALERT_URI IosSounds.alarm
playNotification System#DEFAULT_NOTIFICATION_URI IosSounds.triTone
playRingtone System#DEFAULT_RINGTONE_URI IosSounds.electronic

Note on iOS sounds

If you want to use any other sound on iOS you can always specify a valid Sound ID and manually construct [IosSound]:

FlutterRingtonePlayer.play(
  android: AndroidSounds.notification,
  ios: const IosSound(1023),
  looping: true,
  volume: 0.1,
);