MediaPlayer,Android:过一会儿,即使没有发生事件,事件处理程序也会自动触发

时间:2018-10-30 10:11:10

标签: android

我的应用程序中有一个媒体播放器来播放音乐。当用户按下“ NEXT”时,将播放并播放下一首歌曲。所有这些都可以正常工作,直到大约20-30次“ NEXT”从媒体播放器中单击事件处理程序为止,即使没有发生“ COMPLETITION”事件,该事件仍会触发。

这是我播放音乐的功能:

    void PlayMusic(Android.Net.Uri uri)
    {
        CurrentSongObject = WriteMetaDataToFileList(uri.ToString());

        txt_CurrentSong.Text = CurrentSongObject.SongName;
        txt_CurrentArtist.Text = CurrentSongObject.ArtistName;

        if (mediaPlayer.IsPlaying)
        {
            mediaPlayer.Stop();
            mediaPlayer = MediaPlayer.Create(this, uri);

            btn_StartOrPause.SetImageResource(Resource.Drawable.btn_play);
        }
        else
        {
            mediaPlayer.Stop();
            mediaPlayer = MediaPlayer.Create(this, uri);

            Activity_Player.btn_StartOrPause.SetImageResource(Resource.Drawable.btn_pause);
        }


        if (specialMode)
        {
            SeekToSongMillis(uri.ToString());
        }

        StartMediaPlayer();


        mediaPlayer.Completion += delegate
        {
            if (rndMode)
            {
                ChooseRandomNewSongAndPlay(true);
            }
            else
            {
                ChoosesNonRandomNextSongAndPlay(true);
            }
        };
    }

关于最后一部分,我对媒体播放器已完成播放的事件(事件简单地结束了)签名一个事件处理程序。但是,在调用此函数约25次之后,该事件处理程序会继续校准,因此会自动呼叫下一首和下一首和下一首歌曲。即使没有歌曲完成,它也会一直跳到下一首歌曲。我可能使用处理程序错误吗? 请帮我! :)

谢谢。

编辑:

我发现了其他事情。 在第一个IF退出事件后(我也将该事件放到了它自己的函数中),这使问题有所修复。过了一会儿,即使他退缩了,他仍然参加比赛,但随后立即离开比赛并继续正常进行。所以仍然有一些令人毛骨悚然的事情...

1 个答案:

答案 0 :(得分:0)

好吧,事实证明,媒体播放器上有一个漂亮的重置属性...

        mediaPlayer.Stop();
        mediaPlayer.Completion -= EventForMediaPlayBackCompletition;
        mediaPlayer.Reset();