我是一个独立开发者,所以我还在学习中。我正在尝试将Fragments用于游戏菜单。在菜单中有一个预览和设置背景音乐的选项。所以在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";
}
}
}
我可以从片段启动和停止播放器,没有任何问题。我试图解决的是用户预览音乐,然后关闭/最小化应用程序的情况-而不关闭MusicFragment中的音乐(stopPlayer())(音乐仍在播放)。
在这种情况下,应用程序关闭,但音乐仍在播放。我的理解是,片段(在本例中为MusicFragment)没有onPause()。Main_Activity有onPause -但当我通过Main_Activity的onPause()读取MediaPlayer的状态时,它显示playerStatus为“NULL”,即使应用程序关闭时song 1仍在设备上播放。
我试着排除额外的Music类,只在MusicFragment中创建MediaPlayer,但结果是一样的。显然,如果Fragment有一个OnPause,我会从那里调用stopSong()方法。我想我没有理解一个基本概念。任何帮助都将非常感谢。
2条答案
按热度按时间k0pti3hp1#
在这种情况下,您可以利用承载MediaPlayer的Fragment或Activity的onStop方法在应用最小化或关闭时停止播放器。例如,您可以覆盖Main_Activity的onStop方法并在其中添加stopPlayer方法调用:
这样,当Main_Activity在屏幕上不再可见时,将调用onStop方法并停止音乐。
lmvvr0a82#
您可以将MusicFragment中的stopSong()方法设置为公共。在Activity中创建MusicFragment的示例,然后调用stopSong()方法。
在您的活动中: