system_ringtone

A production-ready Flutter plugin to fetch and play Android system ringtones, alarms, and notification sounds bypassing the limitations of the standard MediaPlayer using RingtoneManager.

Features

  • Fetch Ringtones: Get all notification, alarm, and ringtone sounds available on the Android device.
  • Play Sounds: Directly play the ringtone URI bypassing the generic MediaPlayer to correctly resolve content:// URIs.
  • Volume Control: Change playback volume easily.
  • Stop Sounds: Ensure only one ringtone plays at a time and stop them programmaticly.
  • Duplicates Removal: Automatically deduplicates sounds that fall under multiple categories.
  • Sorted: Returns an alphabetically sorted list of ringtones.

Platform Support

Currently, this plugin only supports Android. iOS support is not included since Apple restricts access to system ringtones directly.

Installation

Add system_ringtone to your pubspec.yaml:

dependencies:
  system_ringtone: ^0.0.1

Usage

Fetch Ringtones

Returns a list of RingtoneItem containing the sound title and URI.

import 'package:system_ringtone/system_ringtone.dart';

// Fetch all available sounds
final List<RingtoneItem> sounds = await AndroidRingtonePlayer.getRingtones(
  notification: true,
  alarm: true,
  ringtone: true,
);

Play and Stop Sounds

import 'package:system_ringtone/system_ringtone.dart';

// Play a specific sound by passing its URI
await AndroidRingtonePlayer.play(
  sounds.first.uri, 
  volume: 1.0, // range 0.0 to 1.0
);

// Stop the currently playing sound
await AndroidRingtonePlayer.stop();

Example App

See the example directory for a complete sample app demonstrating how to fetch, list, and play system ringtones.

Libraries

system_ringtone