Getting Started
Shiny.Music provides a unified API for accessing the device music library on Android and iOS. It supports permission management, querying track metadata, playing music files, and copying tracks (where platform restrictions allow).
Features
Section titled “Features”- Request and check music library permissions on both platforms
- Query all music tracks or search by title, artist, or album
- Play, pause, resume, stop, and seek within tracks
- Copy music files to app storage (non-DRM content only on iOS)
- Event-driven playback state changes and completion notifications
Platform Support
Section titled “Platform Support”| Feature | Android | iOS |
|---|---|---|
| Permission Request | ✅ | ✅ |
| Query Tracks | ✅ | ✅ |
| Search Tracks | ✅ | ✅ |
| Playback | ✅ | ✅ |
| Copy Track | ✅ | ✅ (non-DRM only) |
| Album Art URI | ✅ | ❌ (use MPMediaItem.Artwork) |
| Explicit Flag | ❌ | ✅ (via MPMediaItem.IsExplicitItem) |
Installation
Section titled “Installation”Add a project reference to Shiny.Music in your .NET MAUI or platform-specific project.
Register the services in your MauiProgram.cs:
using Shiny.Music;
public static class MauiProgram{ public static MauiApp CreateMauiApp() { var builder = MauiApp.CreateBuilder(); builder.UseMauiApp<App>();
builder.Services.AddShinyMusic();
return builder.Build(); }}Quick Example
Section titled “Quick Example”public class MyPage{ readonly IMediaLibrary _library; readonly IMusicPlayer _player;
public MyPage(IMediaLibrary library, IMusicPlayer player) { _library = library; _player = player; }
async Task PlayFirstTrack() { // 1. Request permission var status = await _library.RequestPermissionAsync(); if (status != PermissionStatus.Granted) return;
// 2. Get all tracks var tracks = await _library.GetAllTracksAsync(); if (tracks.Count == 0) return;
// 3. Play the first track await _player.PlayAsync(tracks[0]);
// 4. Listen for completion _player.PlaybackCompleted += (s, e) => { Console.WriteLine("Track finished!"); }; }}