Example #1
0
  private void createPlayer() {
    if (_player == null) {
      _player = new PodcastPlayer(this);

      // handle errors so the onCompletionListener doens't get called
      _player.setOnErrorListener(
          new OnErrorListener() {
            @Override
            public boolean onError(MediaPlayer player, int what, int extra) {
              String message =
                  String.format(Locale.US, "mediaplayer error - what: %d, extra: %d", what, extra);
              PodaxLog.log(PlayerService.this, message);
              return true;
            }
          });

      _player.setOnCompletionListener(
          new PodcastPlayer.OnCompletionListener() {
            @Override
            public void onCompletion() {
              QueueManager.moveToNextInQueue(PlayerService.this);
              prepareNextPodcast();
            }
          });

      _player.setOnPlayListener(
          new PodcastPlayer.OnPlayListener() {
            @Override
            public void onPlay(int duration) {
              // set this podcast as active
              ContentValues values = new ContentValues(1);
              if (duration > 0 && duration < 1000 * 60 * 60 * 6)
                values.put(PodcastProvider.COLUMN_DURATION, duration);
              values.put(PodcastProvider.COLUMN_ID, _currentPodcastId);
              getContentResolver().update(PodcastProvider.ACTIVE_PODCAST_URI, values, null, null);

              // listen for changes to the podcast
              getContentResolver()
                  .registerContentObserver(
                      PodcastProvider.PLAYER_UPDATE_URI, false, _podcastChangeObserver);

              // grab the media button
              AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
              ComponentName eventReceiver =
                  new ComponentName(PlayerService.this, MediaButtonIntentReceiver.class);
              audioManager.registerMediaButtonEventReceiver(eventReceiver);

              PlayerStatus.updateState(PlayerService.this, PlayerStates.PLAYING);
              _lockscreenManager.setLockscreenPlaying();
            }
          });

      _player.setOnPauseListener(
          new PodcastPlayer.OnPauseListener() {
            @Override
            public void onPause(int position) {
              updateActivePodcastPosition(position);
              PlayerStatus.updateState(PlayerService.this, PlayerStatus.PlayerStates.PAUSED);
              _lockscreenManager.setLockscreenPaused();
              showNotification();
            }
          });

      _player.setOnStopListener(
          new PodcastPlayer.OnStopListener() {
            @Override
            public void onStop(int position) {
              updateActivePodcastPosition(position);

              removeNotification();

              if (_lockscreenManager != null) _lockscreenManager.removeLockscreenControls();

              getContentResolver().unregisterContentObserver(_podcastChangeObserver);

              PlayerStatus.updateState(PlayerService.this, PlayerStatus.PlayerStates.STOPPED);

              stopSelf();
            }
          });

      _player.setOnSeekListener(
          new PodcastPlayer.OnSeekListener() {
            @Override
            public void onSeek(int position) {
              updateActivePodcastPosition(position);
            }
          });

      _player.setOnUnpreparedListener(
          new PodcastPlayer.OnUnpreparedListener() {
            @Override
            public void onUnprepared() {
              prepareNextPodcast();
            }
          });
    }

    if (_lockscreenManager == null) _lockscreenManager = new LockscreenManager();
  }