Added temporary wakelock in the gap between MediaPlayers onCompletion() and start() to finally fix the issue where the player stops after a track is finished on some devices.

This commit is contained in:
Karim Abou Zeid 2015-04-20 19:50:01 +02:00
commit 2231027934

View file

@ -80,6 +80,7 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe
private AudioManager audioManager;
private RemoteControlClient remoteControlClient;
private Future remoteControlClientAlbumArtTask;
private PowerManager.WakeLock wakeLock;
public MusicService() {
}
@ -95,6 +96,10 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe
shuffleMode = PreferenceManager.getDefaultSharedPreferences(this).getInt(AppKeys.SP_SHUFFLE_MODE, 0);
repeatMode = PreferenceManager.getDefaultSharedPreferences(this).getInt(AppKeys.SP_REPEAT_MODE, 0);
final PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, getClass().getName());
wakeLock.setReferenceCounted(false);
registerEverything();
}
@ -269,6 +274,7 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe
remoteControlClient.setPlaybackState(RemoteControlClient.PLAYSTATE_STOPPED);
notifyOnMusicRemoteEventListeners(MusicRemoteEvent.STOP);
} else {
acquireWakeLock(30000);
playNextSong(false);
}
}
@ -289,7 +295,6 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe
registerEverything();
isPlayerPrepared = false;
player.reset();
player.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK);
if (position != -1) {
try {
Uri trackUri = getCurrentPositionTrackUri();
@ -470,6 +475,7 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe
remoteControlClient.setPlaybackState(RemoteControlClient.PLAYSTATE_PLAYING);
notifyOnMusicRemoteEventListeners(MusicRemoteEvent.PLAY);
savePosition();
releaseWakeLock();
}
public void openQueue(final ArrayList<Song> playingQueue, final int startPosition, final boolean startPlaying) {
@ -774,6 +780,16 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe
return player.getAudioSessionId();
}
private void releaseWakeLock() {
if (wakeLock.isHeld()) {
wakeLock.release();
}
}
private void acquireWakeLock(long milli) {
wakeLock.acquire(milli);
}
public class MusicBinder extends Binder {
public MusicService getService() {
return MusicService.this;