1. 程式人生 > >音訊後臺播放設定及鎖屏介面的顯示與控制

音訊後臺播放設定及鎖屏介面的顯示與控制

音訊後臺播放設定

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;
    }
}
以上監聽事件只提供邏輯思路,具體的控制歌曲的方法內容太多就不寫了