Example #1
0
        void UpdateSession()
        {
            var stateBuilder = new PlaybackStateCompat.Builder().SetActions(AvailableActions);



            Console.WriteLine("************");
            Console.WriteLine("***************");
            Console.WriteLine($"Media player: Playback State: {StateIsPlaying}/{IsPlaying} - position {Position}");
            Console.WriteLine("***************");
            Console.WriteLine("******");

            var favIcon            = Parent.CurrentSong?.Rating > 1 ? Resource.Drawable.ic_star_on : Resource.Drawable.ic_star_off;
            var customActionExtras = new Bundle();

            //TODO: run through wearables
            stateBuilder.AddCustomAction(
                new PlaybackStateCompat.CustomAction.Builder("THUMBSUP", "FAVORITE", favIcon).SetExtras(customActionExtras).Build());
            stateBuilder.SetState(State, Position, 1f, SystemClock.ElapsedRealtime());

            MusicService.Shared.Session.SetPlaybackState(stateBuilder.Build());

            if (State == PlaybackStateCompat.StatePlaying || State == PlaybackStateCompat.StatePaused)
            {
                MusicService.Shared.MediaNotificationManager.StartNotification();
            }
        }
Example #2
0
        /// <summary>
        /// Updates the state of the player.
        /// </summary>
        /// <param name="state">The state.</param>
        /// <param name="position"></param>
        public void UpdatePlaybackState(int state, int position = 0)
        {
            if (CurrentSession == null && (_binder?.IsBinderAlive).GetValueOrDefault(false) && !string.IsNullOrWhiteSpace(_packageName))
            {
                InitMediaSession(_packageName, _binder);
            }

            PlaybackStateCompat.Builder stateBuilder = new PlaybackStateCompat.Builder()
                                                       .SetActions(PlaybackStateCompat.ActionPlay
                                                                   | PlaybackStateCompat.ActionPlayPause
                                                                   | PlaybackStateCompat.ActionPause
                                                                   | PlaybackStateCompat.ActionSkipToNext
                                                                   | PlaybackStateCompat.ActionSkipToPrevious
                                                                   | PlaybackStateCompat.ActionStop);

            stateBuilder.SetState(state, position, 0, SystemClock.ElapsedRealtime());
            CurrentSession?.SetPlaybackState(stateBuilder.Build());
            OnStatusChanged?.Invoke(CurrentSession, state);

            //Used for backwards compatibility
            if ((Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop) &&
                (CurrentSession?.RemoteControlClient == null ||
                 (bool)!CurrentSession?.RemoteControlClient.Equals(typeof(RemoteControlClient))))
            {
                return;
            }

            RemoteControlClient remoteControlClient = (RemoteControlClient)CurrentSession?.RemoteControlClient;

            RemoteControlFlags flags = RemoteControlFlags.Play
                                       | RemoteControlFlags.Pause
                                       | RemoteControlFlags.PlayPause;

            remoteControlClient?.SetTransportControlFlags(flags);
        }
Example #3
0
 private void SetMediaPlaybackState(int state)
 {
     PlaybackStateCompat.Builder playbackstateBuilder = new PlaybackStateCompat.Builder();
     if (state == PlaybackStateCompat.StatePlaying)
     {
         playbackstateBuilder.SetActions(PlaybackStateCompat.ActionPlayPause | PlaybackStateCompat.ActionPause | PlaybackStateCompat.ActionSkipToNext | PlaybackStateCompat.ActionSkipToPrevious |
                                         PlaybackStateCompat.ActionPlayFromMediaId |
                                         PlaybackStateCompat.ActionPlayFromSearch | PlaybackStateCompat.ActionPlayFromUri | PlaybackStateCompat.ActionPlay);
         playbackstateBuilder.SetState(state, PlaybackStateCompat.PlaybackPositionUnknown, 1.0f);
     }
     else
     {
         playbackstateBuilder.SetActions(PlaybackStateCompat.ActionPlayPause | PlaybackStateCompat.ActionPlay | PlaybackStateCompat.ActionSkipToNext | PlaybackStateCompat.ActionSkipToPrevious |
                                         PlaybackStateCompat.ActionPlayFromMediaId |
                                         PlaybackStateCompat.ActionPlayFromSearch | PlaybackStateCompat.ActionPlayFromUri | PlaybackStateCompat.ActionPause);
         playbackstateBuilder.SetState(state, PlaybackStateCompat.PlaybackPositionUnknown, 0);
     }
     mediaSessionCompat.SetPlaybackState(playbackstateBuilder.Build());
 }
Example #4
0
        private void UpdatePlaybackState(int state)
        {
            if (mediaSessionCompat == null || mediaPlayer == null)
            {
                return;
            }

            try
            {
                PlaybackStateCompat.Builder stateBuilder = new PlaybackStateCompat.Builder()
                                                           .SetActions(PlaybackStateCompat.ActionPlay
                                                                       | PlaybackStateCompat.ActionPlayPause
                                                                       | PlaybackStateCompat.ActionPause
                                                                       | PlaybackStateCompat.ActionSkipToNext
                                                                       | PlaybackStateCompat.ActionSkipToPrevious
                                                                       | PlaybackStateCompat.ActionStop);

                stateBuilder.SetState(state, mediaPlayer.CurrentPosition, 0, SystemClock.ElapsedRealtime());

                mediaSessionCompat.SetPlaybackState(stateBuilder.Build());

                //Used for backwards compatibility
                if (Build.VERSION.SdkInt < BuildVersionCodes.Lollipop)
                {
                    if (mediaSessionCompat.RemoteControlClient != null && mediaSessionCompat.RemoteControlClient.Equals(typeof(RemoteControlClient)))
                    {
                        RemoteControlClient remoteControlClient = (RemoteControlClient)mediaSessionCompat.RemoteControlClient;

                        RemoteControlFlags flags = RemoteControlFlags.Play
                                                   | RemoteControlFlags.Pause
                                                   | RemoteControlFlags.PlayPause;

                        remoteControlClient.SetTransportControlFlags(flags);
                    }
                }

                OnStatusChanged(EventArgs.Empty);

                if (state == PlaybackStateCompat.StatePlaying || state == PlaybackStateCompat.StatePaused)
                {
                    StartNotification();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
        }
Example #5
0
        public void UpdatePlaybackState(string error)
        {
            LogHelper.Debug(Tag, "updatePlaybackState, playback state=" + Playback.State);
            long position = PlaybackStateCompat.PlaybackPositionUnknown;

            if (Playback != null && Playback.IsConnected)
            {
                position = Playback.CurrentStreamPosition;
            }

            //noinspection ResourceType
            PlaybackStateCompat.Builder stateBuilder = new PlaybackStateCompat.Builder()
                                                       .SetActions(GetAvailableActions());

            //setCustomAction(stateBuilder);
            int state = Playback.State;

            // If there is an error message, send it to the playback state:
            if (error != null)
            {
                // Error states are really only supposed to be used for errors that cause playback to
                // stop unexpectedly and persist until the user takes action to fix it.
                stateBuilder.SetErrorMessage(error);
                state = PlaybackStateCompat.StateError;
            }
            //noinspection ResourceType
            stateBuilder.SetState(state, position, 1.0f, SystemClock.ElapsedRealtime());

            // Set the activeQueueItemId if the current index is valid.
            MediaSessionCompat.QueueItem currentMusic = queueManager.CurrentMusic;
            if (currentMusic != null)
            {
                stateBuilder.SetActiveQueueItemId(currentMusic.QueueId);
            }

            serviceCallback.OnPlaybackStateUpdated(stateBuilder.Build());

            if (state == PlaybackStateCompat.StatePlaying ||
                state == PlaybackStateCompat.StatePaused)
            {
                serviceCallback.OnNotificationRequired();
            }
        }
        /// <summary>
        /// Updates the state of the player.
        /// </summary>
        /// <param name="state">The state.</param>
        /// <param name="position"></param>
        public void UpdatePlaybackState(int state, int position = 0, string errorMessage = "")
        {
            if(CurrentSession == null && (_binder?.IsBinderAlive).GetValueOrDefault(false) && !string.IsNullOrWhiteSpace(_packageName))
                InitMediaSession(_packageName, _binder);

            PlaybackStateCompat.Builder stateBuilder = new PlaybackStateCompat.Builder()
                    .SetActions(PlaybackStateCompat.ActionPlay
                        | PlaybackStateCompat.ActionPlayPause
                        | PlaybackStateCompat.ActionPause
                        | PlaybackStateCompat.ActionSkipToNext
                        | PlaybackStateCompat.ActionSkipToPrevious
                        | PlaybackStateCompat.ActionStop);

            stateBuilder.SetState(state, position, 0, SystemClock.ElapsedRealtime());
            if (state == PlaybackStateCompat.StateError)
                stateBuilder.SetErrorMessage(errorMessage);
            CurrentSession?.SetPlaybackState(stateBuilder.Build());
            OnStatusChanged?.Invoke(CurrentSession, state);

            //Used for backwards compatibility
            if ((Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop)
                && (CurrentSession?.RemoteControlClient == null
                || (bool) !CurrentSession?.RemoteControlClient.Equals(typeof(RemoteControlClient)))) return;

            RemoteControlClient remoteControlClient = (RemoteControlClient)CurrentSession?.RemoteControlClient;

            RemoteControlFlags flags = RemoteControlFlags.Play
                                       | RemoteControlFlags.Pause
                                       | RemoteControlFlags.PlayPause 
                                       | RemoteControlFlags.FastForward;

            remoteControlClient?.SetTransportControlFlags(flags);
            
        }
        private void UpdatePlaybackState(int state) {

            if (mediaSessionCompat == null || mediaPlayer == null)
                return;

            try
            {
                PlaybackStateCompat.Builder stateBuilder = new PlaybackStateCompat.Builder()
                    .SetActions(PlaybackStateCompat.ActionPlay 
                        | PlaybackStateCompat.ActionPlayPause
                        | PlaybackStateCompat.ActionPause 
                        | PlaybackStateCompat.ActionStop);

                stateBuilder.SetState(state, mediaPlayer.CurrentPosition, 0, SystemClock.ElapsedRealtime());

                mediaSessionCompat.SetPlaybackState(stateBuilder.Build());

                //Used for backwards compatibility
                if (Build.VERSION.SdkInt < BuildVersionCodes.Lollipop) {
                    if (mediaSessionCompat.RemoteControlClient != null && mediaSessionCompat.RemoteControlClient.Equals(typeof(RemoteControlClient))) {
                        RemoteControlClient remoteControlClient = (RemoteControlClient) mediaSessionCompat.RemoteControlClient;

                        RemoteControlFlags flags = RemoteControlFlags.Play
                            | RemoteControlFlags.Pause
                            | RemoteControlFlags.PlayPause;

                        remoteControlClient.SetTransportControlFlags(flags);
                    }
                }

                OnStatusChanged (EventArgs.Empty);

                if (state == PlaybackStateCompat.StatePlaying || state == PlaybackStateCompat.StatePaused) {
                    StartNotification ();
                }
            }
            catch (Exception ex){
                Console.WriteLine(ex);
            }
        }