diff --git a/app/src/main/java/com/kabouzeid/gramophone/service/MusicService.java b/app/src/main/java/com/kabouzeid/gramophone/service/MusicService.java index a262b4cb..99b0dc53 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/service/MusicService.java +++ b/app/src/main/java/com/kabouzeid/gramophone/service/MusicService.java @@ -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 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;