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:
parent
38efe37b1a
commit
2231027934
1 changed files with 17 additions and 1 deletions
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue