示例#1
0
    /// <summary>
    /// Updates the metadata on the lock screen
    /// </summary>
    private void UpdateMediaMetadataCompat(MediaMetadataRetriever metaRetriever = null)
    {
        if (mediaSession == null)
        {
            return;
        }

        MediaMetadata.Builder builder = new MediaMetadata.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, mediaSession.Controller.Metadata.GetString(MediaMetadata.MetadataKeyAlbum))
            .PutString(MediaMetadata.MetadataKeyArtist, mediaSession.Controller.Metadata.GetString(MediaMetadata.MetadataKeyArtist))
            .PutString(MediaMetadata.MetadataKeyTitle, mediaSession.Controller.Metadata.GetString(MediaMetadata.MetadataKeyTitle));
        }
        builder.PutBitmap(MediaMetadata.MetadataKeyAlbumArt, Cover as Bitmap);

        mediaSession.SetMetadata(builder.Build());
    }
示例#2
0
        void UpdateMetadata()
        {
            if (!QueueHelper.isIndexPlayable(currentIndexOnQueue, playingQueue))
            {
                LogHelper.Error(Tag, "Can't retrieve current metadata.");
                UpdatePlaybackState(Resources.GetString(Resource.String.error_no_metadata));
                return;
            }
            var queueItem = playingQueue [currentIndexOnQueue];
            var musicId   = MediaIDHelper.ExtractMusicIDFromMediaID(
                queueItem.Description.MediaId);
            var track   = musicProvider.GetMusic(musicId);
            var trackId = track.GetString(MediaMetadata.MetadataKeyMediaId);

            if (musicId != trackId)
            {
                var e = new InvalidOperationException("track ID should match musicId.");
                LogHelper.Error(Tag, "track ID should match musicId.",
                                " musicId=", musicId, " trackId=", trackId,
                                " mediaId from queueItem=", queueItem.Description.MediaId,
                                " title from queueItem=", queueItem.Description.Title,
                                " mediaId from track=", track.Description.MediaId,
                                " title from track=", track.Description.Title,
                                " source.hashcode from track=", track.GetString(
                                    MusicProvider.CustomMetadataTrackSource).GetHashCode(),
                                e);
                throw e;
            }
            LogHelper.Debug(Tag, "Updating metadata for MusicID= " + musicId);
            session.SetMetadata(track);

            // Set the proper album artwork on the media session, so it can be shown in the
            // locked screen and in other places.
            if (track.Description.IconBitmap == null &&
                track.Description.IconUri != null)
            {
                var albumUri = track.Description.IconUri.ToString();
                AlbumArtCache.Instance.Fetch(albumUri, new AlbumArtCache.FetchListener {
                    OnFetched = (artUrl, bitmap, icon) => {
                        var qItem     = playingQueue [currentIndexOnQueue];
                        var trackItem = musicProvider.GetMusic(trackId);
                        trackItem     = new MediaMetadata.Builder(trackItem)
                                        .PutBitmap(MediaMetadata.MetadataKeyAlbumArt, bitmap)
                                        .PutBitmap(MediaMetadata.MetadataKeyDisplayIcon, icon)
                                        .Build();

                        musicProvider.UpdateMusic(trackId, trackItem);

                        // If we are still playing the same music
                        var currentPlayingId = MediaIDHelper.ExtractMusicIDFromMediaID(
                            qItem.Description.MediaId);
                        if (trackId == currentPlayingId)
                        {
                            session.SetMetadata(trackItem);
                        }
                    }
                });
            }
        }
示例#3
0
        void LoadChildrenImpl(string parentId, Result result)
        {
            LogHelper.Debug(Tag, "OnLoadChildren: parentMediaId=", parentId);

            var mediaItems = new JavaList <MediaBrowser.MediaItem> ();

            if (MediaIDHelper.MediaIdRoot == parentId)
            {
                LogHelper.Debug(Tag, "OnLoadChildren.ROOT");
                mediaItems.Add(new MediaBrowser.MediaItem(
                                   new MediaDescription.Builder()
                                   .SetMediaId(MediaIDHelper.MediaIdMusicsByGenre)
                                   .SetTitle(GetString(Resource.String.browse_genres))
                                   .SetIconUri(Android.Net.Uri.Parse("android.resource://" +
                                                                     "com.example.android.mediabrowserservice/drawable/ic_by_genre"))
                                   .SetSubtitle(GetString(Resource.String.browse_genre_subtitle))
                                   .Build(), MediaItemFlags.Browsable
                                   ));
            }
            else if (MediaIDHelper.MediaIdMusicsByGenre == parentId)
            {
                LogHelper.Debug(Tag, "OnLoadChildren.GENRES");
                foreach (var genre in musicProvider.Genres)
                {
                    var item = new MediaBrowser.MediaItem(
                        new MediaDescription.Builder()
                        .SetMediaId(MediaIDHelper.CreateBrowseCategoryMediaID(MediaIDHelper.MediaIdMusicsByGenre, genre))
                        .SetTitle(genre)
                        .SetSubtitle(GetString(Resource.String.browse_musics_by_genre_subtitle, genre))
                        .Build(), MediaItemFlags.Browsable
                        );
                    mediaItems.Add(item);
                }
            }
            else if (parentId.StartsWith(MediaIDHelper.MediaIdMusicsByGenre))
            {
                var genre = MediaIDHelper.GetHierarchy(parentId) [1];
                LogHelper.Debug(Tag, "OnLoadChildren.SONGS_BY_GENRE  genre=", genre);
                foreach (var track in musicProvider.GetMusicsByGenre(genre))
                {
                    var hierarchyAwareMediaID = MediaIDHelper.CreateMediaID(
                        track.Description.MediaId, MediaIDHelper.MediaIdMusicsByGenre, genre);
                    var trackCopy = new MediaMetadata.Builder(track)
                                    .PutString(MediaMetadata.MetadataKeyMediaId, hierarchyAwareMediaID)
                                    .Build();
                    var bItem = new MediaBrowser.MediaItem(
                        trackCopy.Description, MediaItemFlags.Playable);
                    mediaItems.Add(bItem);
                }
            }
            else
            {
                LogHelper.Warn(Tag, "Skipping unmatched parentMediaId: ", parentId);
            }
            LogHelper.Debug(Tag, "OnLoadChildren sending ", mediaItems.Count,
                            " results for ", parentId);
            result.SendResult(mediaItems);
        }
        private void LoadChildrenImpl(string parentId, Result result)
        {
            var mediaItems = new JavaList <MediaBrowser.MediaItem>();

            if (HierarchyHelper.PodcastRoot == parentId)
            {
                Logger.Debug("Load ROOT");
                mediaItems.Add(new MediaBrowser.MediaItem(
                                   new MediaDescription.Builder()
                                   .SetMediaId(HierarchyHelper.PodcastsByMonth)
                                   .SetTitle("All Playlists")
                                   .SetIconUri(Android.Net.Uri.Parse("android.resource://com.henry.mypodcast/drawable/ic_by_genre"))
                                   .SetSubtitle("Bursts By Playlist")
                                   .Build(), MediaItemFlags.Browsable));
            }
            else if (HierarchyHelper.PodcastsByMonth == parentId)
            {
                Logger.Debug("Load BYMONTH List");
                foreach (var playlist in _musicProvider._playlists)
                {
                    var item = new MediaBrowser.MediaItem(
                        new MediaDescription.Builder()
                        .SetMediaId(HierarchyHelper.PodcastsByMonth + HierarchyHelper.CategorySeparator + playlist.Id.ToString())
                        .SetTitle(playlist.Name)
                        .SetSubtitle($"{playlist.Name} Bursts")
                        .Build(), MediaItemFlags.Browsable);
                    mediaItems.Add(item);
                }
            }
            else if (parentId.StartsWith(HierarchyHelper.PodcastsByMonth))
            {
                var playlistId = int.Parse(HierarchyHelper.GetHierarchy(parentId)[1]);
                Logger.Debug("Load List of Podcasts for Month");
                foreach (var track in _musicProvider.GetMusicsByPlaylist(playlistId))
                {
                    var hierarchyAwareMediaID = HierarchyHelper.EncodeMediaID(
                        track.Description.MediaId, HierarchyHelper.PodcastsByMonth, playlistId.ToString());
                    var trackCopy = new MediaMetadata.Builder(track)
                                    .PutString(MediaMetadata.MetadataKeyMediaId, hierarchyAwareMediaID)
                                    .Build();
                    var bItem = new MediaBrowser.MediaItem(
                        trackCopy.Description, MediaItemFlags.Playable);
                    mediaItems.Add(bItem);
                }
            }
            result.SendResult(mediaItems);
        }
        static List <MediaSession.QueueItem> ConvertToQueue(IEnumerable <MediaMetadata> tracks, params string[] categories)
        {
            var queue = new List <MediaSession.QueueItem>();
            int count = 0;

            foreach (var track in tracks)
            {
                string        hierarchyAwareMediaID = MediaIDHelper.CreateMediaID(track.Description.MediaId, categories);
                MediaMetadata trackCopy             = new MediaMetadata.Builder(track)
                                                      .PutString(MediaMetadata.MetadataKeyMediaId, hierarchyAwareMediaID)
                                                      .Build();

                var item = new MediaSession.QueueItem(trackCopy.Description, count++);
                queue.Add(item);
            }
            return(queue);
        }
		static List<MediaSession.QueueItem> ConvertToQueue(
			IEnumerable<MediaMetadata> tracks, params string[] categories) {
			var queue = new List<MediaSession.QueueItem>();
			var count = 0;
			foreach (var track in tracks) {
				var hierarchyAwareMediaID = MediaIDHelper.CreateMediaID(
					track.Description.MediaId, categories);

				var trackCopy = new MediaMetadata.Builder(track)
					.PutString(MediaMetadata.MetadataKeyMediaId, hierarchyAwareMediaID)
					.Build();

				var item = new MediaSession.QueueItem(trackCopy.Description, count++);
				queue.Add(item);
			}
			return queue;

		}
		void UpdateMetadata ()
		{
			if (!QueueHelper.isIndexPlayable (currentIndexOnQueue, playingQueue)) {
				LogHelper.Error (Tag, "Can't retrieve current metadata.");
				UpdatePlaybackState (Resources.GetString (Resource.String.error_no_metadata));
				return;
			}
			MediaSession.QueueItem queueItem = playingQueue [currentIndexOnQueue];
			string musicId = MediaIDHelper.ExtractMusicIDFromMediaID (
				              queueItem.Description.MediaId);
			MediaMetadata track = musicProvider.GetMusic (musicId);
			string trackId = track.GetString (MediaMetadata.MetadataKeyMediaId);
			if (musicId != trackId) {
				var e = new InvalidOperationException ("track ID should match musicId.");
				LogHelper.Error (Tag, "track ID should match musicId.",
					" musicId=", musicId, " trackId=", trackId,
					" mediaId from queueItem=", queueItem.Description.MediaId,
					" title from queueItem=", queueItem.Description.Title,
					" mediaId from track=", track.Description.MediaId,
					" title from track=", track.Description.Title,
					" source.hashcode from track=", track.GetString (
					MusicProvider.CustomMetadataTrackSource).GetHashCode (),
					e);
				throw e;
			}
			LogHelper.Debug (Tag, "Updating metadata for MusicID= " + musicId);
			session.SetMetadata (track);

			// Set the proper album artwork on the media session, so it can be shown in the
			// locked screen and in other places.
			if (track.Description.IconBitmap == null &&
			    track.Description.IconUri != null) {
				string albumUri = track.Description.IconUri.ToString ();
				AlbumArtCache.Instance.Fetch (albumUri, new AlbumArtCache.FetchListener {
					OnFetched = (artUrl, bitmap, icon) => {
						MediaSession.QueueItem qItem = playingQueue [currentIndexOnQueue];
						MediaMetadata trackItem = musicProvider.GetMusic (trackId);
						trackItem = new MediaMetadata.Builder (trackItem)
							.PutBitmap (MediaMetadata.MetadataKeyAlbumArt, bitmap)
							.PutBitmap (MediaMetadata.MetadataKeyDisplayIcon, icon)
							.Build ();

						musicProvider.UpdateMusic (trackId, trackItem);

						// If we are still playing the same music
						string currentPlayingId = MediaIDHelper.ExtractMusicIDFromMediaID (
							                       qItem.Description.MediaId);
						if (trackId == currentPlayingId) {
							session.SetMetadata (trackItem);
						}
					}
				});
			}
		}
		void LoadChildrenImpl (string parentId, Result result)
		{
			LogHelper.Debug (Tag, "OnLoadChildren: parentMediaId=", parentId);

			var mediaItems = new JavaList<MediaBrowser.MediaItem> ();

			if (MediaIDHelper.MediaIdRoot == parentId) {
				LogHelper.Debug (Tag, "OnLoadChildren.ROOT");
				mediaItems.Add (new MediaBrowser.MediaItem (
					new MediaDescription.Builder ()
					.SetMediaId (MediaIDHelper.MediaIdMusicsByGenre)
					.SetTitle (GetString (Resource.String.browse_genres))
					.SetIconUri (Android.Net.Uri.Parse ("android.resource://" +
					"com.example.android.mediabrowserservice/drawable/ic_by_genre"))
					.SetSubtitle (GetString (Resource.String.browse_genre_subtitle))
					.Build (), MediaItemFlags.Browsable
				));

			} else if (MediaIDHelper.MediaIdMusicsByGenre == parentId) {
				LogHelper.Debug (Tag, "OnLoadChildren.GENRES");
				foreach (var genre in musicProvider.Genres) {
					var item = new MediaBrowser.MediaItem (
						           new MediaDescription.Builder ()
						.SetMediaId (MediaIDHelper.CreateBrowseCategoryMediaID (MediaIDHelper.MediaIdMusicsByGenre, genre))
						.SetTitle (genre)
						.SetSubtitle (GetString (Resource.String.browse_musics_by_genre_subtitle, genre))
						.Build (), MediaItemFlags.Browsable
					           );
					mediaItems.Add (item);
				}
			} else if (parentId.StartsWith (MediaIDHelper.MediaIdMusicsByGenre)) {
				var genre = MediaIDHelper.GetHierarchy (parentId) [1];
				LogHelper.Debug (Tag, "OnLoadChildren.SONGS_BY_GENRE  genre=", genre);
				foreach (var track in musicProvider.GetMusicsByGenre(genre)) {
					var hierarchyAwareMediaID = MediaIDHelper.CreateMediaID (
						                            track.Description.MediaId, MediaIDHelper.MediaIdMusicsByGenre, genre);
					var trackCopy = new MediaMetadata.Builder (track)
						.PutString (MediaMetadata.MetadataKeyMediaId, hierarchyAwareMediaID)
						.Build ();
					var bItem = new MediaBrowser.MediaItem (
						            trackCopy.Description, MediaItemFlags.Playable);
					mediaItems.Add (bItem);
				}
			} else {
				LogHelper.Warn (Tag, "Skipping unmatched parentMediaId: ", parentId);
			}
			LogHelper.Debug (Tag, "OnLoadChildren sending ", mediaItems.Count,
				" results for ", parentId);
			result.SendResult (mediaItems);
		}