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(); }