diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/service/LocalMediaPlayer.java b/ultrasonic/src/main/java/org/moire/ultrasonic/service/LocalMediaPlayer.java index e8acdddc..2abbd53e 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/service/LocalMediaPlayer.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/service/LocalMediaPlayer.java @@ -119,21 +119,20 @@ public class LocalMediaPlayer public void onCreate() { + if (mediaPlayer != null) + { + mediaPlayer.release(); + } + + mediaPlayer = new MediaPlayer(); + new Thread(new Runnable() { @Override public void run() { Thread.currentThread().setName("MediaPlayerThread"); - Looper.prepare(); - - if (mediaPlayer != null) - { - mediaPlayer.release(); - } - - mediaPlayer = new MediaPlayer(); mediaPlayer.setWakeMode(context, PowerManager.PARTIAL_WAKE_LOCK); mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/service/MediaPlayerControllerImpl.java b/ultrasonic/src/main/java/org/moire/ultrasonic/service/MediaPlayerControllerImpl.java index 4b71ac4b..fe840b75 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/service/MediaPlayerControllerImpl.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/service/MediaPlayerControllerImpl.java @@ -96,6 +96,9 @@ public class MediaPlayerControllerImpl implements MediaPlayerController { externalStorageMonitor.onDestroy(); context.stopService(new Intent(context, MediaPlayerService.class)); + shufflePlayBuffer.onDestroy(); + downloader.onDestroy(); + Log.i(TAG, "MediaPlayerControllerImpl destroyed"); } @@ -110,29 +113,24 @@ public class MediaPlayerControllerImpl implements MediaPlayerController @Override public void accept(MediaPlayerService mediaPlayerService) { mediaPlayerService.play(currentPlayingIndex, autoPlayStart); - } - }); - if (localMediaPlayer.currentPlaying != null) - { - if (autoPlay && jukeboxMediaPlayer.getValue().isEnabled()) - { - jukeboxMediaPlayer.getValue().skip(downloader.getCurrentPlayingIndex(), currentPlayingPosition / 1000); - } - else - { - if (localMediaPlayer.currentPlaying.isCompleteFileAvailable()) + if (localMediaPlayer.currentPlaying != null) { - MediaPlayerService.executeOnStartedMediaPlayerService(context, new Consumer() { - @Override - public void accept(MediaPlayerService mediaPlayerService) { + if (autoPlay && jukeboxMediaPlayer.getValue().isEnabled()) + { + jukeboxMediaPlayer.getValue().skip(downloader.getCurrentPlayingIndex(), currentPlayingPosition / 1000); + } + else + { + if (localMediaPlayer.currentPlaying.isCompleteFileAvailable()) + { localMediaPlayer.doPlay(localMediaPlayer.currentPlaying, currentPlayingPosition, autoPlay); } - }); + } } + autoPlayStart = false; } - } - autoPlayStart = false; + }); } } diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/service/MediaPlayerService.java b/ultrasonic/src/main/java/org/moire/ultrasonic/service/MediaPlayerService.java index c5c26d67..63397e2b 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/service/MediaPlayerService.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/service/MediaPlayerService.java @@ -191,9 +191,9 @@ public class MediaPlayerService extends Service instance = null; try { + downloadQueueSerializer.serializeDownloadQueueNow(downloader.downloadList, + downloader.getCurrentPlayingIndex(), getPlayerPosition()); localMediaPlayer.onDestroy(); - shufflePlayBuffer.onDestroy(); - downloader.onDestroy(); } catch (Throwable ignored) { } @@ -205,7 +205,7 @@ public class MediaPlayerService extends Service synchronized (instanceLock) { // currentPlaying could be changed from another thread in the meantime, so check again before stopping for good - if (localMediaPlayer.currentPlaying == null) stopSelf(); + if (localMediaPlayer.currentPlaying == null || localMediaPlayer.playerState == STOPPED) stopSelf(); } } @@ -385,6 +385,8 @@ public class MediaPlayerService extends Service } else { + setCurrentPlaying(index); + if (start) { if (jukeboxMediaPlayer.getValue().isEnabled())