예제 #1
0
        private bool InitPlayerStates(string mediaId)
        {
            Logger.Debug("GetAudioFocus");
            _playOnFocusGain = true;

            if (_audioFocusState != AudioFocusState.Focused)
            {
                var result = _audioManager.RequestAudioFocus(this, Android.Media.Stream.Music,
                                                             AudioFocus.Gain);
                if (result == AudioFocusRequest.Granted)
                {
                    _audioFocusState = AudioFocusState.Focused;
                }
            }

            bool mediaHasChanged = mediaId != _currentMediaId;

            if (mediaHasChanged)
            {
                _currentPosition = 0;
                _currentMediaId  = mediaId;
            }

            return(mediaHasChanged);
        }
예제 #2
0
 private void GiveUpAudioFocus()
 {
     Logger.Debug("GiveUpAudioFocus");
     if (_audioFocusState == AudioFocusState.Focused)
     {
         if (_audioManager.AbandonAudioFocus(this) == AudioFocusRequest.Granted)
         {
             _audioFocusState = AudioFocusState.NoFocusAndNoHide;
         }
     }
 }
예제 #3
0
        public void OnAudioFocusChange(AudioFocus focusChange)
        {
            Logger.Debug($"OnAudioFocusChange. focusChange={focusChange}");
            if (focusChange == AudioFocus.Gain)
            {
                _audioFocusState = AudioFocusState.Focused;
            }
            else if (focusChange == AudioFocus.Loss ||
                     focusChange == AudioFocus.LossTransient ||
                     focusChange == AudioFocus.LossTransientCanDuck)
            {
                bool canDuck = focusChange == AudioFocus.LossTransientCanDuck;
                _audioFocusState = canDuck ? AudioFocusState.NoFocusAndCanHide : AudioFocusState.NoFocusAndNoHide;

                _playOnFocusGain |= MusicPlayerState == PlaybackStateCode.Playing && !canDuck;
            }
            ConfigMediaPlayerState();
        }
예제 #4
0
        public MusicPlayer(MusicService service, MusicProvider musicProvider)
        {
            MusicPlayerState = PlaybackStateCode.None;
            _audioFocusState = AudioFocusState.NoFocusAndNoHide;
            _musicService    = service;
            _musicProvider   = musicProvider;
            _audioManager    = (AudioManager)service.GetSystemService(Context.AudioService);
            _wifiLock        = ((WifiManager)service.GetSystemService(Context.WifiService))
                               .CreateWifiLock(WifiMode.Full, "mywifilock");
            if (_mediaPlayer == null)
            {
                _mediaPlayer = new MediaPlayer();

                _mediaPlayer.SetWakeMode(_musicService.ApplicationContext,
                                         Android.OS.WakeLockFlags.Partial);
                _mediaPlayer.SetOnPreparedListener(this);
                _mediaPlayer.SetOnCompletionListener(this);
                _mediaPlayer.SetOnErrorListener(this);
                _mediaPlayer.SetOnSeekCompleteListener(this);
            }
        }