MediaPlayer,Android:一段时间后,事件处理程序会自动启动,即使事件并没有发生



我的应用程序中有一个媒体播放器,可以播放音乐。当用户按下"NEXT"时,下一首歌曲将被构建并播放。这一切都很好,直到大约20-30次"下一步"点击,媒体播放器的事件处理程序就会失控,即使没有发生"完成"事件,也会继续启动。

这是我播放音乐的功能:

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之后,我对事件进行了签名(还将事件放入其自己的函数中(,这稍微解决了问题。过了一段时间,他仍然会参加活动,尽管他大喊了一声,但随后立即再次离开并正常继续。所以仍然有一些可疑的事情在发生…

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

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

最新更新