您的位置:首页 > 移动开发 > IOS开发

IOS锁屏状态播放音乐时显示专辑信息和图片

2015-07-02 11:18 465 查看
先搁两张效果图:






 

 

 

 

 

 

 

 

 

 

 

 

其实核心的东西很简单就是设置[MPNowPlayingInfoCenter defaultCenter]的nowPlayingInfo。这是一个字典。把标题,作者及专辑图片信息一设置,自动就出来了。

if (NSClassFromString(@"MPNowPlayingInfoCenter")) {

NSMutableDictionary * dict = [[NSMutableDictionary alloc] init];

[dict setObject:title forKey:MPMediaItemPropertyAlbumTitle];

[dict setObject:artist forKey:MPMediaItemPropertyArtist];

MPMediaItemArtwork * mArt = [[MPMediaItemArtwork alloc] initWithImage:img];

[dict setObject:mArt forKey:MPMediaItemPropertyArtwork];

[MPNowPlayingInfoCenter defaultCenter].nowPlayingInfo = nil;

[[MPNowPlayingInfoCenter defaultCenter] setNowPlayingInfo:dict];

[dict release];

}

上面的if (NSClassFromString(@”MPNowPlayingInfoCenter”))避免了版本兼容问题,这个API貌似只出现在5里面。当然了还要检查你的AppDelegate是不是继承于UIResponder,有的是自动生成,有的人习惯手写,如果是继承于NSObject请改为 AppDelegate : UIResponder。

知道了上面的信息,就简单了,下一步就是怎么获取title,artist和img.就是一面一段代码了。

NSBundle* bundle = [NSBundle mainBundle];

NSString* path = [bundle bundlePath];

NSURL * fileURL=[NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/akon、be - you - with.mp3", path]];

AudioFileTypeID fileTypeHint = kAudioFileMP3Type;

NSString *fileExtension = [[fileURL path] pathExtension];

if ([fileExtension isEqual:@"mp3"]||[fileExtension isEqual:@"m4a"])

{

AudioFileID fileID = nil;

OSStatus err = noErr;

err = AudioFileOpenURL( (CFURLRef) fileURL, kAudioFileReadPermission, 0, &fileID );

if( err != noErr ) {

NSLog( @"AudioFileOpenURL failed" );

}

UInt32 id3DataSize = 0;

err = AudioFileGetPropertyInfo( fileID, kAudioFilePropertyID3Tag, &id3DataSize, NULL );

if( err != noErr ) {

NSLog( @"AudioFileGetPropertyInfo failed for ID3 tag" );

}

NSDictionary *piDict = nil;

UInt32 piDataSize = sizeof( piDict );

err = AudioFileGetProperty( fileID, kAudioFilePropertyInfoDictionary, &piDataSize, &piDict );

if( err != noErr ) {

[piDict release];

NSLog( @"AudioFileGetProperty failed for property info dictionary" );

}

CFDataRef AlbumPic= nil;

UInt32 picDataSize = sizeof(picDataSize);

err =AudioFileGetProperty( fileID, kAudioFilePropertyAlbumArtwork, &picDataSize, &AlbumPic);

if( err != noErr ) {

NSLog( @"Get picture failed" );

}

NSData* imagedata= (NSData*)AlbumPic;

UIImage* image=[[UIImage alloc]initWithData:imagedata];

imageView.image=image;

NSString * Album = [(NSDictionary*)piDict objectForKey:

[NSString stringWithUTF8String: kAFInfoDictionary_Album]];

NSString * Artist = [(NSDictionary*)piDict objectForKey:

[NSString stringWithUTF8String: kAFInfoDictionary_Artist]];

NSString * Title = [(NSDictionary*)piDict objectForKey:

[NSString stringWithUTF8String: kAFInfoDictionary_Title]];

NSLog(@"%@",Title);

NSLog(@"%@",Artist);

NSLog(@"%@",Album);

}

但是有一个问题就是,这段代码经常读取不出图片。这个问题还是交给AVURLAsset吧。

AVURLAsset *avURLAsset = [AVURLAsset URLAssetWithURL:url

options:nil];

for (NSString *format in [avURLAsset availableMetadataFormats]) {

//NSLog(@"-------format:%@",format);

for (AVMetadataItem *metadataItem in [avURLAsset metadataForFormat:format]) {

//NSLog(@"commonKey:%@",metadataItem.commonKey);

if ([metadataItem.commonKey isEqualToString:@"artwork"]) {

//取出封面artwork,从data转成image显示

MPMediaItemArtwork *mArt = [[MPMediaItemArtwork alloc] initWithImage:[UIImage imageWithData:[(NSDictionary*)metadataItem.value objectForKey:@"data"]]];

[dict setObject:mArt

forKey:MPMediaItemPropertyArtwork];

break;

}

}

}

很靠谱,图片获取率100%.

so, 以上是所有实现代码喽,感兴趣的自已整理吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息