C# MPRemoteCommandCenter播放/暂停命令未正确更新
我已将播放/暂停按钮设置为启用状态,并向每个按钮添加了目标事件,但每当我在模拟器中单击按钮时,它总是调用播放按钮的目标事件和按钮的图像,不能从播放到暂停正确更新,反之亦然。有人知道这件事吗 注意:为了播放/暂停音频,我使用了Plugin.MediaManager.Forms nuget(版本0.9.7)C# MPRemoteCommandCenter播放/暂停命令未正确更新,c#,xamarin,xamarin.ios,carplay,mpremotecommandcenter,C#,Xamarin,Xamarin.ios,Carplay,Mpremotecommandcenter,我已将播放/暂停按钮设置为启用状态,并向每个按钮添加了目标事件,但每当我在模拟器中单击按钮时,它总是调用播放按钮的目标事件和按钮的图像,不能从播放到暂停正确更新,反之亦然。有人知道这件事吗 注意:为了播放/暂停音频,我使用了Plugin.MediaManager.Forms nuget(版本0.9.7) [导出(“playableContentManager:InitiatePlaybackOfContentIndeXPath:completionHandler:”)] public overr
[导出(“playableContentManager:InitiatePlaybackOfContentIndeXPath:completionHandler:”)]
public override void InitiatePlaybackOfContentItem(MPPlayableContentManager contentManager、NSIndexPath indexPath、Action completionHandler)
{
DispatchQueue.MainQueue.DispatchAsync(()=>
{
UIApplication.SharedApplication.EndReceivingRemoteControlEvents();
UIApplication.SharedApplication.BeginReceivingRemoteControlEvents();
var-song=CarPlaylist[indexPath.Section].剧集[indexPath.Row];
var nowplayingfocenter=mpnowplayingfocenter.DefaultCenter;
MPNowPlayingInfo playingInfo=新的MPNowPlayingInfo();
playingInfo.Title=歌曲.Title;
playingInfo.Artist=song.Editor;
playingInfo.PlaybackDuration=song.Duration.TotalSeconds;//以秒为单位提供时间
playingInfo.MediaType=MPNowPlayingInfo.MediaType.Audio;
playingInfo.Artwork=新的MPMediaItemArtwork(图像:ExtractArtWork.UIImageFromUrl(song.Artwork));
playingInfo.AssetUrl=新NSUrl(song.FileUrl.AbsolutePath);
playingInfo.PlaybackRate=song.isplay?1.0:0.0;
NowPlayingFoCenter.NowPlaying=播放信息;
var currentPlayItemId=eposion.PodcastId.ToString();
字符串[]标识符=新字符串[1];
标识符[0]=currentPlayItemId;
contentManager=MPPlayableContentManager.Shared;
contentManager.NowPlayingIdentifiers=标识符;
contentManager.DataSource=新的AppDelegateDataSource(CarPlaylist);
var commandCenter=MPRemoteCommandCenter.Shared;
commandCenter.PlayCommand.Enabled=true;
commandCenter.PauseCommand.Enabled=true;
commandCenter.PlayCommand.AddTarget(播放按钮);
commandCenter.PauseCommand.AddTarget(PauseButton);
completionHandler(null);
UIApplication.SharedApplication.EndReceivingRemoteControlEvents();
UIApplication.SharedApplication.BeginReceivingRemoteControlEvents();
});
}
公共MPRemoteCommandHandlerStatus播放按钮(MPRemoteCommandEvent commandEvent)
{
//将应用程序界面更新为播放模式和播放音频的逻辑
返回MPRemoteCommandHandlerStatus.Success;
}
公共MPRemoteCommandHandlerStatus PauseButton(MPRemoteCommandEvent commandEvent)
{
//将应用程序界面更新为暂停模式和暂停音频的逻辑
返回MPRemoteCommandHandlerStatus.Success;
}
您好,您可以尝试使用一台物理设备来检查它是否可以工作。@JuniorJiang MSFT是的,但实际上我的CarPlay授权过程仍在进行中,因此,如果没有得到许可,我无法在实际设备中测试它。
[Export("playableContentManager:initiatePlaybackOfContentItemAtIndexPath:completionHandler:")]
public override void InitiatePlaybackOfContentItem(MPPlayableContentManager contentManager, NSIndexPath indexPath, Action<NSError> completionHandler)
{
DispatchQueue.MainQueue.DispatchAsync(() =>
{
UIApplication.SharedApplication.EndReceivingRemoteControlEvents();
UIApplication.SharedApplication.BeginReceivingRemoteControlEvents();
var song = CarPlaylist[indexPath.Section].episodes[indexPath.Row];
var NowPlayingInfoCenter = MPNowPlayingInfoCenter.DefaultCenter;
MPNowPlayingInfo playingInfo = new MPNowPlayingInfo();
playingInfo.Title = song.Title;
playingInfo.Artist = song.Editor;
playingInfo.PlaybackDuration = song.Duration.TotalSeconds; //provide time in seconds
playingInfo.MediaType = MPNowPlayingInfoMediaType.Audio;
playingInfo.Artwork = new MPMediaItemArtwork(image: ExtractArtWork.UIImageFromUrl(song.ArtWork));
playingInfo.AssetUrl = new NSUrl(song.FileUrl.AbsolutePath);
playingInfo.PlaybackRate = song.IsPlaying ? 1.0 : 0.0;
NowPlayingInfoCenter.NowPlaying = playingInfo;
var currentPlayItemId = episode.PodcastId.ToString();
string[] identifier = new string[1];
identifier[0] = currentPlayItemId;
contentManager = MPPlayableContentManager.Shared;
contentManager.NowPlayingIdentifiers = identifier;
contentManager.DataSource = new AppDelegateDataSource(CarPlaylist);
var commandCenter = MPRemoteCommandCenter.Shared;
commandCenter.PlayCommand.Enabled = true;
commandCenter.PauseCommand.Enabled = true;
commandCenter.PlayCommand.AddTarget(PlayButton);
commandCenter.PauseCommand.AddTarget(PauseButton);
completionHandler(null);
UIApplication.SharedApplication.EndReceivingRemoteControlEvents();
UIApplication.SharedApplication.BeginReceivingRemoteControlEvents();
});
}
public MPRemoteCommandHandlerStatus PlayButton(MPRemoteCommandEvent commandEvent)
{
//Logic to update app UI to play mode and play audio
return MPRemoteCommandHandlerStatus.Success;
}
public MPRemoteCommandHandlerStatus PauseButton(MPRemoteCommandEvent commandEvent)
{
//Logic to update app UI to pause mode and pause audio
return MPRemoteCommandHandlerStatus.Success;
}