我正在为客户端创建一个iOS移动应用程序,该应用程序将播放各种音频。
我想要实现的功能之一是在锁定屏幕和横幅上显示有关当前播放的音频轨道的信息。这是一个简单的方便移动用户和一个必须拥有,如果你的应用程序有背景音频播放。就我个人而言,我一直在使用这个特性!
发布于 2016-10-26 15:00:54
您应该首先观察AVPlayerItem of AVAudioPlayer,如下所示:
[playerItem addObserver:self forKeyPath:@"timedMetadata" options:NSKeyValueObservingOptionNew context:nil];然后创建一些全局变量:
NSString *title;
NSString *artist;
UIImage *artwork;然后,您可能需要一个如下所示的函数,因此您可以观察关键路径timedMetadata,并通过updateInfoCenterWithTitle:andArtist:andCover:更新InfoCenter。
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if ([keyPath isEqualToString:@"timedMetadata"])
{
for (int i = 0; i < [audioPlayer.currentItem.timedMetadata count]; i++)
{
AVMetadataItem *metaData = [audioPlayer.currentItem.timedMetadata objectAtIndex:i];
if ([[metaData commonKey] isEqualToString:AVMetadataCommonKeyArtist]) {
artist = (NSString *)metaData.value;
}
else if ([[metaData commonKey] isEqualToString:AVMetadataCommonKeyTitle])
{
title = (NSString *)metaData.value;
[self updateInfoCenterWithTitle:title andArtist:artist andCover:artwork];
}
else if ([[metaData commonKey] isEqualToString:AVMetadataCommonKeyArtwork])
{
if ([metaData.keySpace isEqualToString:AVMetadataKeySpaceID3])
{
NSDictionary *dictionary = [metaData.value copyWithZone:nil];
artwork = [UIImage imageWithData:[dictionary objectForKey:@"data"]]];
} else if ([metaData.keySpace isEqualToString:AVMetadataKeySpaceiTunes]) {
artwork = [UIImage imageWithData:[metaData.value copyWithZone:nil]];
}
}
else {
NSLog(@"%@ --> %@", [metaData commonKey], metaData.value);
}
}
}
}这就是魔法发生的地方:
- (void)updateInfoCenterWithTitle:(NSString *)title andArtist:(NSString *)artist andCover:(UIImage *)cover
{
if (cover == nil) {
cover = [UIImage imageNamed:@"defaultCover"];
}
MPNowPlayingInfoCenter *infoCenter = [MPNowPlayingInfoCenter defaultCenter];
[infoCenter setNowPlayingInfo:@{MPMediaItemPropertyTitle:title,
MPMediaItemPropertyArtist:artist,
MPMediaItemPropertyArtwork:[[MPMediaItemArtwork alloc] initWithImage:cover]}];
}https://stackoverflow.com/questions/40258701
复制相似问题