Unë kam krijuar Audio App në Xamarin.Forms, për të luajtur audio kam përdorur plugin MediaManager.
Tani dua ta bëj atë të pajtueshëm me CarPlay.
Aplikacionet audio CarPlay kontrollohen nga MPPlayableContentManager. Ju kërkohet të zbatoni protokollin MPPlayableContentDelegate dhe MPPlayableContentDatasource për t'u lidhur me CarPlay. Ndërfaqja e përdoruesit kontrollohet nga CarPlay - gjithçka që duhet të bëni është ta ushqeni atë me të dhëna për skedat+tabelat (burimi i të dhënave) dhe t'u përgjigjeni artikujve që mund të luhen (delegoni).
Unë kam përdorur të gjithë api të kërkuara CarPlay për aplikacionin audio, por problemi është:
- Nuk po shfaqet tani ekrani i luajtjes në simulatorin CarPlay.
- Si të vendosni ArtWork në MPContentItem?
Klasa MPPlayableContentDelegate
public class PlayableContentDelegate : MPPlayableContentDelegate
{
public override void PlayableContentManager(MPPlayableContentManager contentManager, NSIndexPath indexPath, Action<NSError> completionHandler)
{
DispatchQueue.MainQueue.DispatchAsync(() =>
{
UIApplication.SharedApplication.BeginReceivingRemoteControlEvents();
completionHandler(null);
UIApplication.SharedApplication.EndReceivingRemoteControlEvents();
UIApplication.SharedApplication.BeginReceivingRemoteControlEvents();
});
}
[Export("playableContentManager:initiatePlaybackOfContentItemAtIndexPath:completionHandler:")]
public override void InitiatePlaybackOfContentItem(MPPlayableContentManager contentManager, NSIndexPath indexPath, Action<NSError> completionHandler)
{
try
{
DispatchQueue.MainQueue.DispatchAsync(() =>
{
UIApplication.SharedApplication.BeginReceivingRemoteControlEvents();
var itemToPlay = BaseSettingsService.CurrentPlayList[indexPath.Row];
var NowPlayingInfoCenter = MPNowPlayingInfoCenter.DefaultCenter;
MPNowPlayingInfo playingInfo = new MPNowPlayingInfo();
playingInfo.Title = itemToPlay.Title;
playingInfo.Artist = itemToPlay.Editor;
playingInfo.AlbumTitle = "1989";
playingInfo.Genre = "Pop";
playingInfo.PlaybackDuration = 231;
playingInfo.PlaybackRate = 22;
playingInfo.PersistentID = (ulong)111111;
playingInfo.PlaybackQueueIndex = 3;
playingInfo.PlaybackQueueCount = BaseSettingsService.CurrentPlayList.Count;
playingInfo.IsLiveStream = false;
playingInfo.MediaType = MPNowPlayingInfoMediaType.Audio;
NowPlayingInfoCenter.NowPlaying = playingInfo;
var id = itemToPlay.PodcastId.ToString();
string[] s1 = new string[1];
s1[0] = id;
contentManager.NowPlayingIdentifiers = s1;
completionHandler(null);
UIApplication.SharedApplication.EndReceivingRemoteControlEvents();
});
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
}
public override nuint RetainCount { get; }
public override void ContextUpdated(MPPlayableContentManager contentManager, MPPlayableContentManagerContext context)
{
try
{
//base.ContextUpdated(contentManager, context);
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
}
public override NSDictionary GetDictionaryOfValuesFromKeys(NSString[] keys)
{
return base.GetDictionaryOfValuesFromKeys(keys);
}
}
Burimi i të dhënave MPPlayableContent
public class AppDelegateDataSource : MPPlayableContentDataSource
{
public override MPContentItem ContentItem(NSIndexPath indexPath)
{
if (indexPath.Length == 1)
{
var item = new MPContentItem("PlayList");
item.Title = "PlayList";
item.Subtitle = "Hello";
item.Container = true;
item.Playable = false;
return item;
}
else
{
var play = CurrentPlayList[indexPath.Row];
var item = new MPContentItem(play.PodcastId);
item.Title = play.Title;
item.Subtitle = play.Editor;
item.Playable = true;
return item;
}
}
public override nint NumberOfChildItems(NSIndexPath indexPath)
{
if (indexPath.GetIndexes().Length == 0)
return 1;
else
return CurrentPlayList.Count;
}
}
Pra, pyetja është Si duhet t'i përgjigjem artikujve të luajtshëm tani?
E di ndokush se çfarë më mungon apo cili gabim duhet të korrigjoj? Çdo ndihmë do të vlerësohej, faleminderit.