如果未在循环内声明它,为什么Android MediaPlayer仅播放一次?

问题描述 投票:0回答:1

我有一个循环,它将收到传入的流,将其写入临时文件,并在每个循环上将android MediaPlayer setdatasource设置为该文件。如果我在循环内声明它,它将播放,但如果在循环外,它将只播放一次?

Java.IO.File temp = Java.IO.File.CreateTempFile("temp", "mp3");
Java.IO.FileInputStream fis = new Java.IO.FileInputStream(temp);
temp.DeleteOnExit();

MediaPlayer player = new MediaPlayer();

while (true)
{
    try
    {
        byte[] myReadBuffer = new byte[10000];
        Java.IO.FileOutputStream fos = new Java.IO.FileOutputStream(temp);

        mmInStream.Read(myReadBuffer, 0, myReadBuffer.Length);
        fos.Write(myReadBuffer, 0, myReadBuffer.Length);
        player.SetDataSource(fis.FD);
        player.Prepare();
        player.Start();

        while (true)
        {
            if (!player.IsPlaying)
            {
                player.Reset();
                break;
            }
        }
    }
    catch (System.IO.IOException ex)
    {
        System.Diagnostics.Debug.WriteLine("Input stream was disconnected", ex);
    }
} 
c# xamarin.forms android-mediaplayer
1个回答
0
投票

您可以实现IDisposable并看到here,这将消除凌乱的while循环。或者,最好只是使用已经可以访问的Completion事件处理程序,如here

player.Completion += (s, e) =>
{ 
    // Do work
}

此外,由于您有两个循环,并且您没有提及您在谈论哪个循环,因此下次尝试更加清晰吧

© www.soinside.com 2019 - 2024. All rights reserved.