native_alarm 1.0.0 copy "native_alarm: ^1.0.0" to clipboard
native_alarm: ^1.0.0 copied to clipboard

A Flutter alarm plugin that uses the native alarm volume stream instead of the media volume stream.

native_alarm #

A Flutter alarm plugin for iOS and Android that plays alarm sounds using the native alarm volume stream instead of the media volume stream.

This ensures that alarm sounds respect the device's alarm volume setting, not the media volume — making it behave like a real alarm clock.

Why native_alarm? #

The popular alarm package plays audio using the media stream (STREAM_MUSIC on Android). This means:

  • If the user turns down media volume, the alarm is silent
  • The alarm volume slider in settings has no effect

native_alarm fixes this by using STREAM_ALARM on Android (AudioAttributes.USAGE_ALARM) and the correct audio session on iOS.

Features #

  • Uses alarm volume stream on Android (AudioAttributes.USAGE_ALARM)
  • Falls back to system default alarm sound if asset file is not found
  • Loop audio support
  • Vibration support
  • Custom notification support
  • Background execution support

Installation #

Add native_alarm to your pubspec.yaml:

dependencies:
  native_alarm: ^1.0.0

Android #

In your android/app/src/main/AndroidManifest.xml, add the following permissions:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.USE_EXACT_ALARM"/>
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK"/>

Also register the plugin services inside <application>:

<service
    android:name="com.nativealarm.alarm.AlarmService"
    android:exported="false"
    android:foregroundServiceType="mediaPlayback"/>
<receiver
    android:name="com.nativealarm.alarm.AlarmReceiver"
    android:exported="false"/>
<receiver
    android:name="com.nativealarm.alarm.BootReceiver"
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"/>
    </intent-filter>
</receiver>
<service
    android:name="com.nativealarm.services.NotificationOnKillService"
    android:exported="false"/>

iOS #

Add the following to your Info.plist:

<key>UIBackgroundModes</key>
<array>
    <string>audio</string>
    <string>fetch</string>
</array>

Usage #

import 'package:native_alarm/alarm.dart';

// Initialize
await Alarm.init();

// Set an alarm
final alarmSettings = AlarmSettings(
  id: 42,
  dateTime: DateTime.now().add(const Duration(seconds: 30)),
  assetAudioPath: 'assets/alarm.mp3',
  loopAudio: true,
  vibrate: true,
  notificationSettings: const NotificationSettings(
    title: 'Alarm',
    body: 'Your alarm is ringing!',
    stopButton: 'Stop',
  ),
);

await Alarm.set(alarmSettings: alarmSettings);

// Stop an alarm
await Alarm.stop(42);

// Cancel all alarms
await Alarm.stopAll();

License #

MIT

0
likes
150
points
0
downloads

Publisher

unverified uploader

Weekly Downloads

A Flutter alarm plugin that uses the native alarm volume stream instead of the media volume stream.

Homepage

Documentation

API reference

License

MIT (license)

Dependencies

collection, equatable, flutter, flutter_fgbg, json_annotation, logging, plugin_platform_interface, rxdart, shared_preferences

More

Packages that depend on native_alarm

Packages that implement native_alarm