Android Media Player在后台停止播放

编程入门 行业动态 更新时间:2024-10-27 14:21:35
本文介绍了Android Media Player在后台停止播放的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我正在制作具有简单功能的音乐播放器应用.但是,当我在装有Android 6的手机上听音乐时,有时音乐会停止播放,直到用电源按钮再次打开显示屏.然后正在播放下一首歌曲,因此加载下一首歌曲似乎有问题.我试图编写新的应用程序只是为了对其进行测试,为此,我使用了本教程: code.tutsplus/tutorials/background-audio-in-android-with-mediasessioncompat--cms-27030

I'm making music player app with simple functionality. But when I listen music on my phone with Android 6, sometimes music stops playing until I turn on display again with power button. Then next song is playing, so it seems like it's problem with loading next song. I tried to write new app just to test it out, for this purpose I used this tutorial: code.tutsplus/tutorials/background-audio-in-android-with-mediasessioncompat--cms-27030

在此示例中,我添加了带有歌曲路径的ArrayList.在mediaPlayer onCompletionListener中,我增加了曲目计数器并将新歌曲加载到媒体播放器.

To this example I added ArrayList with paths to songs. In mediaPlayer onCompletionListener I increase track counter and load new song to media player.

我的代码:

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权限.我还为媒体播放器设置了唤醒锁.

I don't know anymore why this doesn't work. In manifest I have WAKE_LOCK permission. I also set wake lock for Media player.

今天,我尝试将加载歌曲移至onPlayFromMediaId.我从AutoActivity(是媒体播放器)向Main Activity进行了广播,然后将onPlayFromMediaId和歌曲的路径发送回去.但这似乎也不起作用.我还发现,使用按钮更改音量也会唤醒应用程序.

Today I tried to move loading song into onPlayFromMediaId. I made broadcast from AutoActivity where is Media player to Main Activity and send back onPlayFromMediaId with path to song. But seems like this doesn't work either.I also find out that changing volume with buttons also wake up app.

Edit2: 我进行了许多测试,并在代码的许多地方添加了调试字符串.我发现该应用程序停止在mediaplayer.prepare()上,直到我触发手机上的任何操作(打开显示屏,调高/调低音量,单击耳机按钮).但是我不知道如何解决这个错误.我尝试使用prepareAsync,但没有帮助.

I made many tests and added debug string in many places in code. And I found out that app stops at mediaplayer.prepare() until I trigger any action on phone (turn on display, volume up/down, click headset button). But I don't know how to fix this bug. I tried to use prepareAsync, but didn't help.

推荐答案

除非您使用前台服务,否则系统将终止您的进程,并且mediaplayer将停止. 下面是来自前台服务的一部分(通知示例).

Unless you use foreground service, the system will kill your process and mediaplayer will stop. below is a part from from a foreground service ( notification example).

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());

上面的代码已经过测试,可以正常工作.

The above code is tested and working fine.

更多推荐

Android Media Player在后台停止播放

本文发布于:2023-11-27 03:21:10,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1636358.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:后台   Android   Media   Player

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!