我的应用程序中有一个媒体播放器来播放音乐。当用户按下“ 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退出事件后(我也将该事件放到了它自己的函数中),这使问题有所修复。过了一会儿,即使他退缩了,他仍然参加比赛,但随后立即离开比赛并继续正常进行。所以仍然有一些令人毛骨悚然的事情...
答案 0 :(得分:0)
好吧,事实证明,媒体播放器上有一个漂亮的重置属性...
mediaPlayer.Stop();
mediaPlayer.Completion -= EventForMediaPlayBackCompletition;
mediaPlayer.Reset();