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 AudioManager audioManager;
|
||||||
private RemoteControlClient remoteControlClient;
|
private RemoteControlClient remoteControlClient;
|
||||||
private Future remoteControlClientAlbumArtTask;
|
private Future remoteControlClientAlbumArtTask;
|
||||||
|
private PowerManager.WakeLock wakeLock;
|
||||||
|
|
||||||
public MusicService() {
|
public MusicService() {
|
||||||
}
|
}
|
||||||
|
|
@ -95,6 +96,10 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe
|
||||||
shuffleMode = PreferenceManager.getDefaultSharedPreferences(this).getInt(AppKeys.SP_SHUFFLE_MODE, 0);
|
shuffleMode = PreferenceManager.getDefaultSharedPreferences(this).getInt(AppKeys.SP_SHUFFLE_MODE, 0);
|
||||||
repeatMode = PreferenceManager.getDefaultSharedPreferences(this).getInt(AppKeys.SP_REPEAT_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();
|
registerEverything();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -269,6 +274,7 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe
|
||||||
remoteControlClient.setPlaybackState(RemoteControlClient.PLAYSTATE_STOPPED);
|
remoteControlClient.setPlaybackState(RemoteControlClient.PLAYSTATE_STOPPED);
|
||||||
notifyOnMusicRemoteEventListeners(MusicRemoteEvent.STOP);
|
notifyOnMusicRemoteEventListeners(MusicRemoteEvent.STOP);
|
||||||
} else {
|
} else {
|
||||||
|
acquireWakeLock(30000);
|
||||||
playNextSong(false);
|
playNextSong(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -289,7 +295,6 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe
|
||||||
registerEverything();
|
registerEverything();
|
||||||
isPlayerPrepared = false;
|
isPlayerPrepared = false;
|
||||||
player.reset();
|
player.reset();
|
||||||
player.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK);
|
|
||||||
if (position != -1) {
|
if (position != -1) {
|
||||||
try {
|
try {
|
||||||
Uri trackUri = getCurrentPositionTrackUri();
|
Uri trackUri = getCurrentPositionTrackUri();
|
||||||
|
|
@ -470,6 +475,7 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe
|
||||||
remoteControlClient.setPlaybackState(RemoteControlClient.PLAYSTATE_PLAYING);
|
remoteControlClient.setPlaybackState(RemoteControlClient.PLAYSTATE_PLAYING);
|
||||||
notifyOnMusicRemoteEventListeners(MusicRemoteEvent.PLAY);
|
notifyOnMusicRemoteEventListeners(MusicRemoteEvent.PLAY);
|
||||||
savePosition();
|
savePosition();
|
||||||
|
releaseWakeLock();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void openQueue(final ArrayList<Song> playingQueue, final int startPosition, final boolean startPlaying) {
|
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();
|
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 class MusicBinder extends Binder {
|
||||||
public MusicService getService() {
|
public MusicService getService() {
|
||||||
return MusicService.this;
|
return MusicService.this;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue