private void UpdateMediaMetadataCompat(MediaMetadataRetriever metaRetriever = null) { if (_mediaSessionCompat != null) { MainActivity.Instance.RunOnUiThread(() => { MediaMetadataCompat.Builder builder = new MediaMetadataCompat.Builder(); var item = _mediaSessionCompat.SessionToken; if (metaRetriever != null) { builder .PutString(MediaMetadata.MetadataKeyAlbum, metaRetriever.ExtractMetadata(MetadataKey.Album)) .PutString(MediaMetadata.MetadataKeyArtist, metaRetriever.ExtractMetadata(MetadataKey.Artist)) .PutString(MediaMetadata.MetadataKeyDisplayTitle, metaRetriever.ExtractMetadata(MetadataKey.Title)); } else { builder .PutString(MediaMetadata.MetadataKeyAlbum, _queue[_pos].Album) .PutString(MediaMetadata.MetadataKeyArtist, _queue[_pos].Artist) .PutString(MediaMetadata.MetadataKeyDisplayTitle, _queue[_pos].Title); } if (!String.IsNullOrEmpty(_queue[_pos].Image.ToString())) { Bitmap artwork = BitmapFactory.DecodeFile(_queue[_pos].Image.ToString()); builder.PutBitmap(MediaMetadataCompat.MetadataKeyAlbumArt, artwork); builder.PutBitmap(MediaMetadataCompat.MetadataKeyArt, artwork); } _mediaSessionCompat.SetMetadata(builder.Build()); }); } }
/// <summary> /// Updates the metadata on the lock screen /// </summary> /// <param name="currentTrack"></param> internal void UpdateMetadata(IMediaFile currentTrack) { MediaMetadataCompat.Builder builder = new MediaMetadataCompat.Builder(); if (currentTrack != null) { builder .PutString(MediaMetadata.MetadataKeyAlbum, currentTrack.Metadata.Artist) .PutString(MediaMetadata.MetadataKeyArtist, currentTrack.Metadata.Artist) .PutString(MediaMetadata.MetadataKeyTitle, currentTrack.Metadata.Title); } else { builder .PutString(MediaMetadata.MetadataKeyAlbum, CurrentSession?.Controller?.Metadata?.GetString(MediaMetadata.MetadataKeyAlbum)) .PutString(MediaMetadata.MetadataKeyArtist, CurrentSession?.Controller?.Metadata?.GetString(MediaMetadata.MetadataKeyArtist)) .PutString(MediaMetadata.MetadataKeyTitle, CurrentSession?.Controller?.Metadata?.GetString(MediaMetadata.MetadataKeyTitle)); } builder.PutBitmap(MediaMetadata.MetadataKeyAlbumArt, currentTrack?.Metadata.AlbumArt as Bitmap); CurrentSession?.SetMetadata(builder.Build()); }
/// <summary> /// Updates the metadata on the lock screen /// </summary> private void UpdateMediaMetadataCompat(MediaMetadataRetriever metaRetriever = null) { if (mediaSessionCompat == null) { return; } MediaMetadataCompat.Builder builder = new MediaMetadataCompat.Builder(); if (metaRetriever != null) { builder .PutString(MediaMetadata.MetadataKeyAlbum, metaRetriever.ExtractMetadata(MetadataKey.Album)) .PutString(MediaMetadata.MetadataKeyArtist, metaRetriever.ExtractMetadata(MetadataKey.Artist)) .PutString(MediaMetadata.MetadataKeyTitle, metaRetriever.ExtractMetadata(MetadataKey.Title)); } else { builder .PutString(MediaMetadata.MetadataKeyAlbum, mediaSessionCompat.Controller.Metadata.GetString(MediaMetadata.MetadataKeyAlbum)) .PutString(MediaMetadata.MetadataKeyArtist, mediaSessionCompat.Controller.Metadata.GetString(MediaMetadata.MetadataKeyArtist)) .PutString(MediaMetadata.MetadataKeyTitle, mediaSessionCompat.Controller.Metadata.GetString(MediaMetadata.MetadataKeyTitle)); } builder.PutBitmap(MediaMetadata.MetadataKeyAlbumArt, Cover as Bitmap); mediaSessionCompat.SetMetadata(builder.Build()); }
public void UpdateMetadata(IMediaFile currentTrack) { MediaMetadataCompat.Builder builder = new MediaMetadataCompat.Builder(); if (currentTrack != null) { builder .PutString(MediaMetadata.MetadataKeyAlbum, currentTrack.Metadata.Album) .PutString(MediaMetadata.MetadataKeyArtist, currentTrack.Metadata.Artist) .PutString(MediaMetadata.MetadataKeyTitle, currentTrack.Metadata.Title); } else { builder .PutString(MediaMetadata.MetadataKeyAlbum, Session?.Controller?.Metadata?.GetString(MediaMetadata.MetadataKeyAlbum)) .PutString(MediaMetadata.MetadataKeyArtist, Session?.Controller?.Metadata?.GetString(MediaMetadata.MetadataKeyArtist)) .PutString(MediaMetadata.MetadataKeyTitle, Session?.Controller?.Metadata?.GetString(MediaMetadata.MetadataKeyTitle)); } var resources = _applicationContext.Resources; //TODO add option to use either PVL, Poniverse, Station or Album art to Options (and here) //builder.PutBitmap(MediaMetadata.MetadataKeyAlbumArt, currentTrack?.Metadata.AlbumArt as Bitmap); // Uncomment these lines and replace the "splash" with your own drawable resource to use a lock screen pic //var id = Resource.Drawable.ic_vol_type_tv_dark; //var art = BitmapFactory.DecodeResource(resources, id); //builder.PutBitmap(MediaMetadata.MetadataKeyAlbumArt, art); Session?.SetMetadata(builder.Build()); }
public void UpdateMusicArt(string musicId, Bitmap albumArt, Bitmap icon) { var metadata = GetMusic(musicId); metadata = new MediaMetadataCompat.Builder(metadata) // set high resolution bitmap in METADATA_KEY_ALBUM_ART. This is used, for // example, on the lockscreen background when the media session is active. .PutBitmap(MediaMetadataCompat.MetadataKeyAlbumArt, albumArt) // set small version of the album art in the DISPLAY_ICON. This is used on // the MediaDescription and thus it should be small to be serialized if // necessary .PutBitmap(MediaMetadataCompat.MetadataKeyDisplayIcon, icon) .Build(); var mutableMetadata = musicListById[musicId]; if (mutableMetadata == null) { throw new Exception("Unexpected error: Inconsistent data structures in " + "MusicProvider"); } mutableMetadata.Metadata = metadata; }
public void SetMetadata(string artist, string title, Action <MediaMetadataCompat.Builder> build = null) { var builder = new MediaMetadataCompat.Builder() .PutString(MediaMetadata.MetadataKeyArtist, artist) .PutString(MediaMetadata.MetadataKeyTitle, title); build?.Invoke(builder); _session.SetMetadata(builder.Build()); }
public RadioStationMediaSession SetMetadata(string artist, string title, TimeSpan duration, Action <MediaMetadataCompat.Builder> build = null) { var builder = new MediaMetadataCompat.Builder() .PutString(MediaMetadata.MetadataKeyArtist, artist) .PutString(MediaMetadata.MetadataKeyTitle, title) .PutLong(MediaMetadata.MetadataKeyDuration, (long)Math.Ceiling(duration.TotalMilliseconds)); build?.Invoke(builder); _session.SetMetadata(builder.Build()); return(this); }
static List <MediaSessionCompat.QueueItem> ConvertToQueue(IEnumerable <MediaMetadataCompat> tracks, params string[] categories) { var queue = new List <MediaSessionCompat.QueueItem>(); int count = 0; foreach (var track in tracks) { var trackCopy = new MediaMetadataCompat.Builder(track) .PutString(MediaMetadataCompat.MetadataKeyMediaId, track.Description.MediaId) .Build(); var item = new MediaSessionCompat.QueueItem(trackCopy.Description, count++); queue.Add(item); } return(queue); }
public void RetrieveMediaAsync(Context context, Action <bool> callback) { LogHelper.Debug(Tag, "retrieveMediaAsync called"); if (currentState == State.Initialized) { callback?.Invoke(true); return; } Task.Run(() => { try { if (currentState == State.NonInitialized) { currentState = State.Initializing; var projection = new string[] { MediaStore.Audio.Media.InterfaceConsts.Id, MediaStore.Audio.Media.InterfaceConsts.Artist, MediaStore.Audio.Media.InterfaceConsts.Title, MediaStore.Audio.Media.InterfaceConsts.Duration, MediaStore.Audio.Media.InterfaceConsts.Data, MediaStore.Audio.Media.InterfaceConsts.MimeType }; var selection = MediaStore.Audio.Media.InterfaceConsts.IsMusic + "!= 0"; var sortOrder = MediaStore.Audio.Media.InterfaceConsts.DateAdded + " DESC"; var cursor = context.ContentResolver.Query(MediaStore.Audio.Media.ExternalContentUri, projection, selection, null, sortOrder); if (cursor != null && cursor.MoveToFirst()) { do { int idColumn = cursor.GetColumnIndex(MediaStore.Audio.Media.InterfaceConsts.Id); int artistColumn = cursor.GetColumnIndex(MediaStore.Audio.Media.InterfaceConsts.Artist); int titleColumn = cursor.GetColumnIndex(MediaStore.Audio.Media.InterfaceConsts.Title); int durationColumn = cursor.GetColumnIndex(MediaStore.Audio.Media.InterfaceConsts.Duration); int filePathIndex = cursor.GetColumnIndexOrThrow(MediaStore.Audio.Media.InterfaceConsts.Data); var id = cursor.GetLong(idColumn).ToString(); var item = new MediaMetadataCompat.Builder() .PutString(MediaMetadataCompat.MetadataKeyMediaId, id) .PutString(CustomMetadataTrackSource, cursor.GetString(filePathIndex)) .PutString(MediaMetadataCompat.MetadataKeyArtist, cursor.GetString(artistColumn)) .PutString(MediaMetadataCompat.MetadataKeyTitle, cursor.GetString(titleColumn)) .PutLong(MediaMetadataCompat.MetadataKeyDuration, cursor.GetInt(durationColumn)) .Build(); musicListById.Add(id, new MutableMediaMetadata(id, item)); } while (cursor.MoveToNext()); } currentState = State.Initialized; } } finally { if (currentState != State.Initialized) { // Something bad happened, so we reset state to NON_INITIALIZED to allow // retries (eg if the network connection is temporary unavailable) currentState = State.NonInitialized; } } }).ContinueWith((antecedent) => { callback?.Invoke(currentState == State.Initialized); }, TaskContinuationOptions.OnlyOnRanToCompletion); }
/// <summary> /// Updates the metadata on the lock screen /// </summary> private void UpdateMediaMetadataCompat (MediaMetadataRetriever metaRetriever = null) { if (mediaSessionCompat == null) return; MediaMetadataCompat.Builder builder = new MediaMetadataCompat.Builder (); if (metaRetriever != null) { builder .PutString (MediaMetadata.MetadataKeyAlbum, metaRetriever.ExtractMetadata (MetadataKey.Album)) .PutString (MediaMetadata.MetadataKeyArtist, metaRetriever.ExtractMetadata (MetadataKey.Artist)) .PutString (MediaMetadata.MetadataKeyTitle, metaRetriever.ExtractMetadata (MetadataKey.Title)); } else { builder .PutString (MediaMetadata.MetadataKeyAlbum, mediaSessionCompat.Controller.Metadata.GetString (MediaMetadata.MetadataKeyAlbum)) .PutString (MediaMetadata.MetadataKeyArtist, mediaSessionCompat.Controller.Metadata.GetString (MediaMetadata.MetadataKeyArtist)) .PutString (MediaMetadata.MetadataKeyTitle, mediaSessionCompat.Controller.Metadata.GetString (MediaMetadata.MetadataKeyTitle)); } builder.PutBitmap (MediaMetadata.MetadataKeyAlbumArt, Cover as Bitmap); mediaSessionCompat.SetMetadata(builder.Build()); }