AVPlayer音乐锁屏功能

2017-03-18  本文已影响203人  思念那年慕云

[iOS]iOS AudioSession详解 Category选择 听筒扬声器切换
iOS- 关于AVAudioSession的使用——后台播放音乐
ios原声音频播放AVAudioSession 总结

•AVAudioSessionCategoryAmbient
–混音播放,例如雨声、汽车引擎等,可与其他音乐一起播放
•AVAudioSessionCategorySoloAmbient
–后台播放,其他音乐将被停止
•AVAudioSessionCategoryPlayback
–独占音乐播放
•AVAudioSessionCategoryRecord
–录制音频
•AVAudioSessionCategoryPlayAndRecord
–播放和录制音频
•AVAudioSessionCategoryAudioProcessing
–使用硬件解码器处理音频,该音频会话使用期间,不能播放或录音

步骤一:在AppDelegate中application:didFinishLaunchingWithOptions:方法设置

//后台播放音频设置
     AVAudioSession *session = [AVAudioSession sharedInstance];
     [session setActive:YES error:nil];//激活音频会话。
    /*
        AVAudioSessionCategoryPlayback 或 kAudioSessionCategory_MediaPlayback
        ——用于以语音为主的应用,使用这个category的应用不会随着静音键和屏幕关闭而静音。
        如果不写这句,锁屏时,会暂停播放。
     */
     [session setCategory:AVAudioSessionCategoryPlayback error:nil];
    //注意:在这里写锁屏音乐的封面等信息也可以,不过是不是太麻烦了,所以在播放VC中设置就可以了。

步骤二:在播放的界面添加锁屏信息即可

//音乐锁屏信息展示(这里的信息应该后台返回,与URL对应。)
- (void)setupLockScreenInfo
{
    //歌词获取为空。
//    AVAsset *asset = self.player.currentItem.asset;
//    NSLog(@"lyrics===%@",asset.lyrics);
    
    // 1.获取锁屏中心
    MPNowPlayingInfoCenter *playingInfoCenter = [MPNowPlayingInfoCenter defaultCenter];
    
    //初始化一个存放音乐信息的字典
    NSMutableDictionary *playingInfoDict = [NSMutableDictionary dictionary];
    // 2、设置歌曲名
    [playingInfoDict setObject:@"未知歌曲" forKey:MPMediaItemPropertyAlbumTitle];
    // 设置歌手名
    [playingInfoDict setObject:@"张卫健" forKey:MPMediaItemPropertyArtist];
    // 3设置封面的图片
    UIImage *image = [UIImage imageNamed:@"1.jpg"];
    if (image) {
        MPMediaItemArtwork *artwork = [[MPMediaItemArtwork alloc] initWithImage:image];
        [playingInfoDict setObject:artwork forKey:MPMediaItemPropertyArtwork];
    }
    
    // 4设置歌曲的总时长
    [playingInfoDict setObject:@"100" forKey:MPMediaItemPropertyPlaybackDuration];
    
    
    //音乐信息赋值给获取锁屏中心的nowPlayingInfo属性
    playingInfoCenter.nowPlayingInfo = playingInfoDict;
    
    // 5.开启远程交互
    [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
}


//监听远程交互方法
- (void)remoteControlReceivedWithEvent:(UIEvent *)event
{
    
    switch (event.subtype) {
            //播放
        case UIEventSubtypeRemoteControlPlay:{
            [self.player play];
        }
            break;
            //停止
        case UIEventSubtypeRemoteControlPause:{
            [self.player pause];
        }
            break;
            //下一首
        case UIEventSubtypeRemoteControlNextTrack:
            [self clickNextSongBtn:nil];
            break;
            //上一首
        case UIEventSubtypeRemoteControlPreviousTrack:
            [self clickLastSongBtn:nil];
            break;
            
        default:
            break;
    }
}

上一篇下一篇

猜你喜欢

热点阅读