From 4c3e1398029670586a4d4bb12b97804ae7636441 Mon Sep 17 00:00:00 2001 From: Christopher Eby Date: Fri, 19 Feb 2010 18:19:30 -0600 Subject: [PATCH] Maintain a partial wake lock in MusicPlayer Previously the CPU might shut down after a song finished playing. This meant no more music. A wake lock prevents this. --- AndroidManifest.xml | 3 +-- src/org/kreed/tumult/MusicPlayer.java | 18 ++++++++++++++++-- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index e7c33017..6644c9c5 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -19,6 +19,5 @@ - - + \ No newline at end of file diff --git a/src/org/kreed/tumult/MusicPlayer.java b/src/org/kreed/tumult/MusicPlayer.java index d77b30f8..0b66e41d 100644 --- a/src/org/kreed/tumult/MusicPlayer.java +++ b/src/org/kreed/tumult/MusicPlayer.java @@ -20,6 +20,7 @@ import android.content.SharedPreferences; import android.os.Handler; import android.os.Looper; import android.os.Message; +import android.os.PowerManager; import android.os.RemoteCallbackList; import android.os.RemoteException; import android.preference.PreferenceManager; @@ -116,6 +117,7 @@ public class MusicPlayer implements Runnable, MediaPlayer.OnCompletionListener, private Handler mHandler; private MediaPlayer mMediaPlayer; private Random mRandom; + private PowerManager.WakeLock mWakeLock; private int[] mSongs; private ArrayList mSongTimeline; @@ -139,6 +141,7 @@ public class MusicPlayer implements Runnable, MediaPlayer.OnCompletionListener, private static final int HEADSET_PREF_CHANGED = 3; private static final int QUEUE_ITEM = 4; private static final int TRACK_CHANGED = 5; + private static final int RELEASE_WAKE_LOCK = 6; private static final int ITEM_SONG = 0; private static final int ITEM_RESET = 1; @@ -199,13 +202,20 @@ public class MusicPlayer implements Runnable, MediaPlayer.OnCompletionListener, case TRACK_CHANGED: setCurrentSong(+1); break; + case RELEASE_WAKE_LOCK: + mWakeLock.release(); + break; } } }; mService.registerReceiver(mReceiver, new IntentFilter(Intent.ACTION_HEADSET_PLUG)); + PowerManager powerManager = (PowerManager)mService.getSystemService(Context.POWER_SERVICE); + mWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "TumultSongChangeLock"); + mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); + mMediaPlayer.setWakeMode(mService, PowerManager.PARTIAL_WAKE_LOCK); mMediaPlayer.setOnCompletionListener(this); retrieveSongs(); @@ -225,12 +235,14 @@ public class MusicPlayer implements Runnable, MediaPlayer.OnCompletionListener, public void release() { - pause(); - if (mMediaPlayer != null) { + pause(); mMediaPlayer.release(); mMediaPlayer = null; } + + if (mWakeLock != null) + mWakeLock.release(); } public void setState(int state) @@ -365,7 +377,9 @@ public class MusicPlayer implements Runnable, MediaPlayer.OnCompletionListener, public void onCompletion(MediaPlayer player) { + mWakeLock.acquire(15000); mHandler.sendEmptyMessage(TRACK_CHANGED); + mHandler.sendEmptyMessage(RELEASE_WAKE_LOCK); } private Song randomSong()