音訊後臺播放設定及鎖屏介面的顯示與控制
阿新 • • 發佈:2019-02-13
音訊後臺播放設定
1、先在專案 的Capabilities中進行設定,開啟後臺模式
2、啟用音訊會話
其它地方也可以,只要保證能執行到以下程式碼塊的內容即可,這裡我選擇在AppDelegate.m裡設定
先匯入必要的標頭檔案
#import <AVFoundation/AVFoundation.h>
接下來直接示例程式碼- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // 1.獲取音訊會話 AVAudioSession *session = [AVAudioSession sharedInstance]; // 2.設定後臺播放類別 [session setCategory:AVAudioSessionCategoryPlayback error:nil]; // 3.啟用會話 [session setActive:YES error:nil]; return YES; }
鎖屏介面的顯示與控制
在對應的控制器下新增以下程式碼,我以PlayingViewController.m為例
PlayingViewController.m
先匯入標頭檔案
#import <MediaPlayer/MediaPlayer.h>
鎖屏介面資訊的顯示:
現在可以在鎖屏下正常顯示歌曲資訊了,但是控制不了音樂,還差監聽遠端控制事件/* // MPMediaItemPropertyAlbumTitle 專輯標題 // MPMediaItemPropertyAlbumTrackCount 聲道個數 // MPMediaItemPropertyAlbumTrackNumber 左右聲道 // MPMediaItemPropertyArtist 藝術家(歌曲作者) // MPMediaItemPropertyArtwork 鎖屏介面的封面 // MPMediaItemPropertyComposer // MPMediaItemPropertyDiscCount // MPMediaItemPropertyDiscNumber // MPMediaItemPropertyGenre // MPMediaItemPropertyPersistentID // MPMediaItemPropertyPlaybackDuration 播放時長 // MPMediaItemPropertyTitle */ #pragma mark - 設定鎖屏介面的資訊 /** 這個方法在開始播放音樂的時候手動呼叫 */ -(void)setupLockScreenInfo { // 0.獲取當前正在播放的歌曲 LXFMusic *playingMusic = [LXFMusicTool playingMusic]; // 1.獲取鎖屏介面中心 MPNowPlayingInfoCenter *playingInfoCenter = [MPNowPlayingInfoCenter defaultCenter]; // 2.設定展示的資訊 NSMutableDictionary *playingInfo = [NSMutableDictionary dictionary]; // 設定歌曲標題 [playingInfo setObject:playingMusic.name forKey:MPMediaItemPropertyAlbumTitle]; // 設定歌手 [playingInfo setObject:playingMusic.singer forKey:MPMediaItemPropertyArtist]; // 設定封面 MPMediaItemArtwork *artWork = [[MPMediaItemArtwork alloc] initWithImage:[UIImage imageNamed:playingMusic.icon]]; [playingInfo setObject:artWork forKey:MPMediaItemPropertyArtwork]; // 設定歌曲播放的總時長 [playingInfo setObject:@(self.currentPlayer.duration) forKey:MPMediaItemPropertyPlaybackDuration]; playingInfoCenter.nowPlayingInfo = playingInfo; // 3.讓應用程式可以接受遠端事件 [[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; }
以上監聽事件只提供邏輯思路,具體的控制歌曲的方法內容太多就不寫了。/** 監聽遠端事件 */ -(void)remoteControlReceivedWithEvent:(UIEvent *)event { switch (event.subtype) { case UIEventSubtypeRemoteControlPlay: // 播放 case UIEventSubtypeRemoteControlStop: // 暫停 [self playOrPause]; // 控制播放與暫停 break; case UIEventSubtypeRemoteControlNextTrack: // 下一首 [self next]; // 控制播放下一首 break; case UIEventSubtypeRemoteControlPreviousTrack: // 上一首 [self previous]; // 控制播放上一首 break; default: break; } }