我實作了音頻實作并添加了回圈屬性。但是音頻只播放兩次,之后音頻不播放。在這里,我附上了我實作的代碼。請幫助如何解決。感謝提前
namespace Com.Audio.Droid
{
public class AudioService : IAudio
{
public AudioService()
{
}
public void PlayAudioFile(string fileName)
{
var player = new MediaPlayer();
var fd = global::Android.App.Application.Context.Assets.OpenFd("siren.wav");
player.Prepared = (s, e) =>
{
player.Start();
};
player.SetDataSource(fd.FileDescriptor, fd.StartOffset, fd.Length);
player.Looping = true;
player.Prepare();
}
public void PauseAudioFile(string fileName)
{
Device.BeginInvokeOnMainThread(() =>
{
var player = new MediaPlayer();
var fd = global::Android.App.Application.Context.Assets.OpenFd("siren.wav");
player.Prepared = (s, e) =>
{
player.Stop();
player.Release();
player.Dispose();
};
player.SetDataSource(fd.FileDescriptor, fd.StartOffset, fd.Length);
player.Prepare();
});
}
}
}
而在 iOS 中,音頻只播放一秒鐘。它不完全播放音頻檔案
namespace com.Audio.ios
{
public class AudioService : IAudio
{
public AudioService()
{
}
public void PlayAudioFile(string fileName)
{
string sFilePath = NSBundle.MainBundle.PathForResource(Path.GetFileNameWithoutExtension("siren"), Path.GetExtension("siren.wav"));
var url = NSUrl.FromString(sFilePath);
var _player = AVAudioPlayer.FromUrl(url);
_player.FinishedPlaying = (object sender, AVStatusEventArgs e) =>
{
_player = null;
};
_player.NumberOfLoops = -1;
_player.Play();
}
public void PauseAudioFile(string fileName)
{
string sFilePath = NSBundle.MainBundle.PathForResource(Path.GetFileNameWithoutExtension("siren"), Path.GetExtension("siren.wav"));
var url = NSUrl.FromString(sFilePath);
var _player = AVAudioPlayer.FromUrl(url);
_player.FinishedPlaying = (object sender, AVStatusEventArgs e) =>
{
_player = null;
};
_player.Stop();
}
}
}
uj5u.com熱心網友回復:
安卓版
您需要一種鉤子方式來實作 loopMediaPlayer,即在音頻完成時創建一個新播放器。
參考:https ://stackoverflow.com/a/29883923/8187800 。
對于 iOS
由于 ARC 的原因,可能AVAudioPlayer是呼叫依賴服務后釋放的,為了解決它,您可以嘗試將其設定_player為全域變數。
請參閱 https://stackoverflow.com/a/8415802/8187800。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/424303.html
標籤:xamarin xamarin.forms 安卓媒体播放器 媒体播放器 音频播放器
下一篇:如何在Xamarin中使用SqlQuery組合Distinct、Sum和Count來填充CollectionView
