Я сделал Dependency-Service для воспроизведения звука и управления фоном в Xamarin.ios.
Звук хорошо выполнялся в фоновом режиме.но контроллер блокировки экрана не показывался.
Я не знаю, в чем проблема.
Я зарегистрировал «UIBackgroundMode» и «audio» в «info.plist» и установил AVAudioSession в качестве воспроизведения.
Я использовал функцию play_pause(string url)
для воспроизведения звука и установки MPNowPlayingInfo
.
[assembly: Dependency(typeof(AudioService))]
namespace BibleHymn.iOS
{
class AudioService : IAudio
{
private bool isPlaying = false;
private bool interrupted = false;
int audioNum = 0;
AVFoundation.AVPlayer player;
public AudioService()
{
var avSession = AVAudioSession.SharedInstance();
avSession.SetCategory(AVAudioSessionCategory.Playback);
NSError activationError = null;
avSession.SetActive(true, out activationError);
}
public bool Play_Pause(string url)
{
if(player == null)
{
this.player = new AVFoundation.AVPlayer();
this.player = AVFoundation.AVPlayer.FromUrl(Foundation.NSUrl.FromString(url));
this.player.Play();
UpdateNotification();
}
isPlaying !=isPlaying;
return isPlaying;
}
public void UpdateNotification()
{
var item = new MPNowPlayingInfo
{
Title = "My Title"
};
MPNowPlayingInfoCenter.DefaultCenter.NowPlaying = item;
Device.BeginInvokeOnMainThread(() => {
UIKit.UIApplication.SharedApplication.BeginReceivingRemoteControlEvents();
});
}
}
Я использовал play_pause из viewModel через команду кнопки управления.
init like...
public IAudio streamService = DependencyService.Get<IAudio>();
и в команде ...
streamService.Play_Pause(url);