Fragment中MediaPlayer在应用退后台/关闭后持续播放的问题求助
Fragment中MediaPlayer在应用退后台/关闭后持续播放的问题求助
我是一名独立开发者,目前还在学习阶段。最近尝试用Fragment做游戏的菜单界面,其中有个功能是预览和设置背景音乐,于是我写了MusicFragment,代码如下:
public class MusicFragment extends Fragment { Music music = new Music(); // more code // private void previewSong() { music.playSong(getActivity(), "Song_1", milliseconds); } private void stopSong() { music.stopPlayer(); } }
另外我单独写了一个Music类来处理音乐播放逻辑,代码是这样的:
public class Music extends Activity { MediaPlayer player; public void playSong(Context context, String songName, int milliseconds) { if(player == null) { player = MediaPlayer.create(context, R.raw.song1); player.seekTo(milliseconds); player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { } }); } player.start(); } public void stopPlayer() { if(player !=null) { player.stop(); player.reset(); player.release(); player = null; } } public String playerStatus() { if(player == null) { return "player is null"; } else { return "player is NOT null"; } } }
现在我能在Fragment里正常启动和停止音乐,但遇到一个头疼的问题:如果用户预览音乐后,没在MusicFragment里调用stopPlayer()就直接关闭/最小化应用,音乐还会继续播放,不会停止。
我之前误以为Fragment没有onPause()方法,所以想着在MainActivity的onPause()里处理,但调用Music类的playerStatus()时,返回的居然是“player is null”——可实际上此时音乐明明还在设备上播放着。
我试过把MediaPlayer直接放到MusicFragment里,结果还是一样的。本来如果Fragment有onPause()的话,直接在里面调用stopSong()就解决了,现在感觉自己没搞懂某个Android基础概念,真心希望能得到大家的帮助!
备注:内容来源于stack exchange,提问作者Jason W
相关产品推荐
相关产品推荐

