[英]android media player on background not stop playing while open other activity
[英]Android media player stop playing while in background
我正在制作具有簡單功能的音樂播放器應用。 但是,當我在使用Android 6的手機上聽音樂時,有時音樂會停止播放,直到用電源按鈕再次打開顯示屏。 然后正在播放下一首歌曲,因此加載下一首歌曲似乎有問題。 我嘗試編寫新應用程序只是為了對其進行測試,因此,我使用了本教程: https : //code.tutsplus.com/tutorials/background-audio-in-android-with-mediasessioncompat--cms-27030
在此示例中,我添加了帶有歌曲路徑的ArrayList。 在mediaPlayer onCompletionListener中,我增加了曲目計數器並將新歌曲加載到媒體播放器。
我的代碼:
private void initMediaPlayer() {
mMediaPlayer = new MediaPlayer();
mMediaPlayer.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK);
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mMediaPlayer.setVolume(1.0f, 1.0f);
mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer)
{
onTrackCompletion();
}
});
private void onTrackCompletion()
{
NextTrack();
Play();
}
private void NextTrack()
{
playlistPosition++;
if (playlistPosition == playlists.get(playlistCurrent).size){
playlistPosition = 0;
}
sendAction(ACTION_TRACK_NEXT);
if(mMediaPlayer.isPlaying()){
Pause();
}
loadSong();
Play();
}
private void loadSong()
{
String path = playlists.get(playlistCurrent).getPath(playlistPosition);
if(path == null || path == "")
{
return;
}
try
{
try
{
mMediaPlayer.setDataSource(path);
} catch( IllegalStateException e ) {
mMediaPlayer.release();
initMediaPlayer();
mMediaPlayer.setDataSource(path);
}
initMediaSessionMetadata();
} catch (IOException e) {
return;
}
try {
mMediaPlayer.prepare();
} catch (IOException e) {}
sendTrackData();
}
我不知道為什么這不起作用。 在清單中,我具有WAKE_LOCK權限。 我還為媒體播放器設置了喚醒鎖。
編輯:今天我試圖將加載的歌曲移到onPlayFromMediaId中。 我從AutoActivity(是媒體播放器)向Main Activity進行廣播,然后將onPlayFromMediaId和歌曲的路徑發送回去。 但是似乎這也不起作用,我還發現用按鈕改變音量也會喚醒應用程序。
Edit2:我進行了許多測試,並在代碼的許多地方添加了調試字符串。 我發現該應用程序停止在mediaplayer.prepare()上,直到我觸發手機上的任何操作(打開顯示屏,調高/調低音量,單擊耳機按鈕)。 但是我不知道如何解決這個錯誤。 我嘗試使用prepareAsync,但沒有幫助。
除非您使用前台服務,否則系統將終止您的進程,並且媒體播放器將停止。 以下是來自前台服務的一部分(通知示例)。
builder.setContentTitle(aMessage) // required
.setSmallIcon(R.mipmap.ic_launcher)
.setContentText(this.getString(R.string.app_name)) // required
.setAutoCancel(false)
.setContentIntent(pendingIntent)
.setVibrate(new long[]{0L})
.setPriority(Notification.PRIORITY_HIGH);
int mId = 1489;
startForeground(mId, builder.build());
上面的代碼已經過測試,可以正常工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.