media_notification_service 0.0.2 copy "media_notification_service: ^0.0.2" to clipboard
media_notification_service: ^0.0.2 copied to clipboard

A Flutter plugin for accessing Android media notifications

Media Notification Service #

A Flutter plugin for Android and Windows that allows you to access and control media playing from other apps through the system media APIs.

Supported Platforms #

Platform Status
Android ✅ Fully supported
Windows ✅ Supported (with some limitations)

Features #

  • Access currently playing media information (title, artist, album, album art)
  • Control playback (play, pause, skip, stop, seek)
  • Real-time playback position tracking
  • Queue information (Android only)
  • Skip to queue item (Android only)
  • Stream-based updates for media changes
  • Album art retrieval

Requirements #

Android #

  • Flutter SDK: >=3.0.0
  • Kotlin support enabled in your Android project

Windows #

  • Flutter SDK: >=3.0.0
  • Windows 10 or later

Setup #

Android #

1. Update AndroidManifest.xml

Add the notification listener service to your app's AndroidManifest.xml:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.yourapp">

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

    <application
        android:label="your_app"
        android:icon="@mipmap/ic_launcher">

        <!-- Add this service -->
        <service
            android:name="com.example.media_notification_service.MediaNotificationListener"
            android:label="Media Notification Listener"
            android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"
            android:exported="true">
            <intent-filter>
                <action android:name="android.service.notification.NotificationListenerService" />
            </intent-filter>
        </service>

        <activity
            android:name=".MainActivity"
            ...>
        </activity>
    </application>
</manifest>

2. Request Notification Listener Permission

Users must grant notification listener permission to your app. You can check and request this permission:

final service = MediaNotificationService();

// Check if permission is granted
bool hasPermission = await service.hasPermission();

if (!hasPermission) {
  // Open system settings to grant permission
  // openSettings() waits for the user to return from settings
  await service.openSettings();

  // Check again after opening settings
  hasPermission = await service.hasPermission();
}

Windows #

No special setup required. Windows uses the System Media Transport Controls (SMTC) API which doesn't require any permissions.

API Reference #

see example app for more details.

MediaNotificationService #

Main service class for interacting with media sessions.

Methods

Method Return Type Description Android Windows
mediaStream Stream<MediaInfoWithQueue?> Stream of media information updates
positionStream Stream<PositionInfo?> Stream of playback position updates
queueStream Stream<List<QueueItem?>?> Stream of queue updates
getCurrentMedia() Future<MediaInfo?> Get current media information
getQueue() Future<List<QueueItem?>?> Get current queue
hasPermission() Future<bool> Check if notification listener permission is granted
openSettings() Future<void> Open system settings for notification listener permission
playPause() Future<bool> Toggle play/pause
skipToNext() Future<bool> Skip to next track
skipToPrevious() Future<bool> Skip to previous track
stop() Future<bool> Stop playback
seekTo(Duration position) Future<bool> Seek to specific position
skipToQueueItem(int id) Future<bool> Skip to specific queue item

Legend: ✅ Supported | ❌ Not supported (returns empty/false) | ⚪ Not applicable (always returns true)

PlaybackState #

Enum representing the current playback state:

  • none
  • stopped
  • paused
  • playing
  • fastForwarding
  • rewinding
  • buffering
  • error
  • connecting
  • skippingToPrevious
  • skippingToNext
  • skippingToQueueItem

Based on Android PlaybackState

Important Notes #

Permissions #

  • Users must manually grant Notification Listener permission in system settings
  • The app cannot programmatically grant this permission
  • Always check hasPermission() before using media controls

Limitations #

Android

  • Requires the media app to properly implement MediaSession
  • Some apps may not provide complete metadata
  • Album art size depends on the source app (may be large)

Windows

  • Queue-related features are not supported (queueStream, getQueue(), skipToQueueItem())
  • Permission methods (hasPermission(), openSettings()) always return true / do nothing as no permission is required
  • Requires the media app to use Windows System Media Transport Controls (SMTC)
  • positionStream stability depends on the media app's SMTC implementation
    • ✅ Works correctly: Spotify (desktop app)
    • ⚠️ Unstable: YouTube Music (browser version)

License #

This project is licensed under the MIT License - see the LICENSE file for details.

1
likes
150
points
112
downloads

Publisher

unverified uploader

Weekly Downloads

A Flutter plugin for accessing Android media notifications

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

Dependencies

flutter, plugin_platform_interface

More

Packages that depend on media_notification_service

Packages that implement media_notification_service