後臺播放是任何一個音頻軟件都支持的功能,在上一篇博客中,詳細介紹了使用AVAudioPlayer播放音頻的方法,這篇博客將對後臺的處理作介紹,關於播放與設置音頻的博客地址:http://my.oschina.net/u/2340880/blog/420129。session
iOS設置後臺音頻播放的步驟很是簡單,首先須要在系統設置的plist文件中添加一個鍵Required background modes,值爲App plays audio or streams audio/video using AirPlay,以下:app
而後進行以下代碼設置:iphone
AVAudioSession *session = [AVAudioSession sharedInstance]; [session setActive:YES error:nil]; [session setCategory:AVAudioSessionCategoryPlayback error:nil];
此時播放音頻時咱們點擊HOME回到主頁面,會發現音頻不會停,已經實現後臺播放的功能。ide
在appDelegate中,咱們須要先註冊響應後臺控制:函數
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
而後在appDelegate中咱們實現以下函數處理後臺傳遞給咱們的信息:ui
-(void)remoteControlReceivedWithEvent:(UIEvent *)event{ if (event.type==UIEventTypeRemoteControl) { NSLog(@"%ld",event.subtype); } }
event中的subtype是操做類型,咱們打開系統桌面抽屜,能夠看到以下的控制鍵:spa
subtype中的枚舉即是點擊這些控制鍵後傳遞給咱們的消息,咱們能夠根據這些消息在app內作邏輯處理。枚舉以下,其中只有100以後的在音頻控制中對咱們有效:.net
typedef NS_ENUM(NSInteger, UIEventSubtype) { // available in iPhone OS 3.0 UIEventSubtypeNone = 0, // for UIEventTypeMotion, available in iPhone OS 3.0 UIEventSubtypeMotionShake = 1, //這以後的是咱們須要關注的枚舉信息 // for UIEventTypeRemoteControl, available in iOS 4.0 //點擊播放按鈕或者耳機線控中間那個按鈕 UIEventSubtypeRemoteControlPlay = 100, //點擊暫停按鈕 UIEventSubtypeRemoteControlPause = 101, //點擊中止按鈕 UIEventSubtypeRemoteControlStop = 102, //點擊播放與暫停開關按鈕(iphone抽屜中使用這個) UIEventSubtypeRemoteControlTogglePlayPause = 103, //點擊下一曲按鈕或者耳機中間按鈕兩下 UIEventSubtypeRemoteControlNextTrack = 104, //點擊上一曲按鈕或者耳機中間按鈕三下 UIEventSubtypeRemoteControlPreviousTrack = 105, //快退開始 點擊耳機中間按鈕三下不放開 UIEventSubtypeRemoteControlBeginSeekingBackward = 106, //快退結束 耳機快退控制鬆開後 UIEventSubtypeRemoteControlEndSeekingBackward = 107, //開始快進 耳機中間按鈕兩下不放開 UIEventSubtypeRemoteControlBeginSeekingForward = 108, //快進結束 耳機快進操做鬆開後 UIEventSubtypeRemoteControlEndSeekingForward = 109, };
設置鎖屏界面顯示信息的原理是經過設置一個系統的字典,當音頻開始播放時,系統會自動從這個字典中讀取要顯示的信息,若是須要動態顯示,咱們只須要不斷更新這個字典便可。首先須要添加<MediaPlayer/MediaPlayer.h>這個頭文件。code
代碼示例以下:blog
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; //設置歌曲題目 [dict setObject:@"題目" forKey:MPMediaItemPropertyTitle]; //設置歌手名 [dict setObject:@"歌手" forKey:MPMediaItemPropertyArtist]; //設置專輯名 [dict setObject:@"專輯" forKey:MPMediaItemPropertyAlbumTitle]; //設置顯示的圖片 UIImage *newImage = [UIImage imageNamed:@"43.png"]; [dict setObject:[[MPMediaItemArtwork alloc] initWithImage:newImage] forKey:MPMediaItemPropertyArtwork]; //設置歌曲時長 [dict setObject:[NSNumber numberWithDouble:300] forKey:MPMediaItemPropertyPlaybackDuration]; //設置已經播放時長 [dict setObject:[NSNumber numberWithDouble:150] forKey:MPNowPlayingInfoPropertyElapsedPlaybackTime]; //更新字典 [[MPNowPlayingInfoCenter defaultCenter] setNowPlayingInfo:dict];
效果以下:
專一技術,熱愛生活,交流技術,也作朋友。
——琿少 QQ羣:203317592