Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当我在歌曲仍在播放时按back并重新输入活动时,mediaPlayer.isPlaying()返回false_Java_Android - Fatal编程技术网

Java 当我在歌曲仍在播放时按back并重新输入活动时,mediaPlayer.isPlaying()返回false

Java 当我在歌曲仍在播放时按back并重新输入活动时,mediaPlayer.isPlaying()返回false,java,android,Java,Android,我是一个初学者,我正在尝试制作一个音乐播放器应用程序,这段代码来自正在播放的屏幕的java文件 在这里,真正的代码部分是当我通过按下底部的“现在播放”栏来进行此活动时运行的,而错误的代码部分是当我通过单击列表中的新歌来进行此活动时运行的 现在,当我在这个正在播放的屏幕上点击一首歌曲时,mediaplayer工作正常 但当我按下后退键并通过按下底部的栏来进行相同的活动时 mediaplayer说歌曲未播放(但歌曲正在播放)如何修复此问题 mediaPlayer = new MediaPlayer(

我是一个初学者,我正在尝试制作一个音乐播放器应用程序,这段代码来自正在播放的屏幕的java文件

在这里,真正的代码部分是当我通过按下底部的“现在播放”栏来进行此活动时运行的,而错误的代码部分是当我通过单击列表中的新歌来进行此活动时运行的

现在,当我在这个正在播放的屏幕上点击一首歌曲时,mediaplayer工作正常 但当我按下后退键并通过按下底部的栏来进行相同的活动时

mediaplayer说歌曲未播放(但歌曲正在播放)如何修复此问题

mediaPlayer = new MediaPlayer();

        if(SongName == CurrentSong)  //when bottom bar now playing is clicked
        {

            if(mediaPlayer.isPlaying())
            {
                Toast.makeText(getContext(), "song is still playing", Toast.LENGTH_SHORT).show();
            }
            else
            {
                Toast.makeText(getContext(), "song is not playing", Toast.LENGTH_SHORT).show();
            }

        }
        else //when new song from list is clicked
        {
            mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
            mediaPlayer.setDataSource(getContext(), Uri.parse(currentData));
            mediaPlayer.prepare();
            mediaPlayer.start();
        }

这可能是因为当您重新打开“活动”时,您创建了一个新的media player实例,该实例为空且未播放,并且您丢失了活动media player的引用。

为此,请保留对活动的
mediaplayer的引用,如下所示:

public class ActiveMedia{

public static List<MediaPlayer> mediaPlayers = new ArrayList<MediaPlayer>();

}
   ...............

    else //when new song from list is clicked
        {
            mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
            mediaPlayer.setDataSource(getContext(), Uri.parse(currentData));
            mediaPlayer.prepare();
            mediaPlayer.start();

           //here add the mediaplayer instance
           ActiveMedia.mediaPlayers.add(mediaPlayer);

    ..............
1)上课:

public class ActiveMedia{

public static List<MediaPlayer> mediaPlayers = new ArrayList<MediaPlayer>();

}
   ...............

    else //when new song from list is clicked
        {
            mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
            mediaPlayer.setDataSource(getContext(), Uri.parse(currentData));
            mediaPlayer.prepare();
            mediaPlayer.start();

           //here add the mediaplayer instance
           ActiveMedia.mediaPlayers.add(mediaPlayer);

    ..............
3)当你想回到活动中时,检查像这样的活跃玩家

for(MediaPlayer mediaPlayer : ActiveMedia.mediaPlayers){

if(mediaPlayer.isPlaying()){
//there is an active media player
}else{
//there is no active media player

}

//also you can stop the active mediaplayer or remove ..........

}

您必须在activity
onPause
方法中停止并关闭媒体播放器。如果你想让媒体在后台工作,它会更复杂,需要在服务中托管媒体播放器。很好,如果这有助于你接受答案,让其他人知道这是一个解决方案。