コード例 #1
0
        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());
                });
            }
        }
コード例 #2
0
        /// <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());
        }
コード例 #3
0
        /// <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());
        }
コード例 #4
0
        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());
        }
コード例 #5
0
        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;
        }
コード例 #6
0
        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());
        }
コード例 #7
0
        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);
        }
コード例 #8
0
        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);
        }
コード例 #9
0
        /// <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());
        }
コード例 #10
0
        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);
        }
コード例 #11
0
        /// <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());
        }