zoukankan      html  css  js  c++  java
  • iOS音频的后台播放 锁屏

    初始化AudioSession和基本配置

          音频播放器采用的AVPlayer ,在程序启动的时候需要配置AudioSession,AudioSession负责应用音频的设置,比如支不支持后台,打断等等,这一步很重要,比如在viewdidload里初始化AVplayer以后要调用下面的函数:

    /** 设置音频会话 */  //这种方式后台,可以连续播放非网络请求歌曲,遇到网络请求歌曲就废,需要后台申请task

    -(void)setAudioSession{

        AVAudioSession *audioSession=[AVAudioSession sharedInstance];

        [audioSession setCategory:AVAudioSessionCategoryPlayback error:nil];

        [audioSession setActive:YES error:nil];

    }

    除了代码的初始化,很重要的一步是对info-plist的设置,让应用支持音频的后台播放

    库的引入包括:

    AudioToolBox.framework

    MediaPlayer.framework

    CoreMedia.framework

    AVFoundation.framework

    Remote控制

    在播放视图的ViewController里加上这两个函数:

    - (void)viewDidAppear:(BOOL)animated {

    [super viewDidAppear:animated];

    [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

    [self becomeFirstResponder];

    }

    - (void)viewWillDisappear:(BOOL)animated {

    [super viewWillDisappear:animated];

    [[UIApplication sharedApplication] endReceivingRemoteControlEvents];

    [self resignFirstResponder];

    }

    当然也可以同理放到delegate.m里面的进入后台和回到前台的函数中,否则的话,上面的代码只是允许当前视图的情况下进入后台可以Remote控制

    在AppDelegate里要申请后台任务来进行处理

    - (void)applicationDidEnterBackground:(UIApplication *)application {

    [application beginReceivingRemoteControlEvents];
    }

    在添加远程控制代码:

    -(void)remoteControlReceivedWithEvent:(UIEvent *)event{

        

        //if it is a remote control event handle it correctly

        

        if (event.type == UIEventTypeRemoteControl) {

            

            if (event.subtype == UIEventSubtypeRemoteControlPlay) {

                

                [self playBarSelector:self.mPlayButton];

                

            }if (event.subtype == UIEventSubtypeRemoteControlPause) {

                

                [self playBarSelector:self.mPlayButton];

                

            } else if (event.subtype == UIEventSubtypeRemoteControlNextTrack){

                

                [self playBarSelector:self.mNextButton];

              

                [self configNowPlayingInfoCenter];

                

            }else if (event.subtype == UIEventSubtypeRemoteControlPreviousTrack){

                

                [self playBarSelector:self.mUpwardButton];

               

                

                [self configNowPlayingInfoCenter];

            }

             }

    }

    最后切换上一首和下一首要更新锁屏信息,重新调一下configNowPlayingInfoCenter方法

    - (void)configNowPlayingInfoCenter {

        

        if (NSClassFromString(@"MPNowPlayingInfoCenter")) {

            

            // 1.播放信息中心

            MPNowPlayingInfoCenter *center = [MPNowPlayingInfoCenter defaultCenter];

            

            // 2.初始化播放信息

            NSMutableDictionary *info = [NSMutableDictionary dictionary];

            // 专辑名称

            info[MPMediaItemPropertyAlbumTitle] = self.operatorObject.mExerciseText;

            // 歌手

            info[MPMediaItemPropertyArtist] = @"雅思听听小组";

            // 歌曲名称

            info[MPMediaItemPropertyTitle] = [NSString stringWithFormat:@"%@ - %@", self.operatorObject.mTextName, [self.operatorObject.mTitle substringToIndex:9]];

            // 设置图片

            info[MPMediaItemPropertyArtwork] = [[MPMediaItemArtwork alloc] initWithImage:[UIImage imageNamed:@"Default"]];

            // 设置持续时间(歌曲的总时间)

            info[MPMediaItemPropertyPlaybackDuration] = @(self.mAudioPlayerLong);

            // 设置当前播放进度

            info[MPNowPlayingInfoPropertyElapsedPlaybackTime] = @(self.mPlayerCurrentTime);

            

            // 3.切换播放信息

            center.nowPlayingInfo = info;

        }

        

    }

  • 相关阅读:
    指定HTML标签属性 |Specifying HTML Attributes| 在视图中生成输出URL |高级路由特性 | 精通ASP-NET-MVC-5-弗瑞曼
    传递额外的值 Passing Extra Values |在视图中生成输出URL | 高级路由特性 | 精通ASP-NET-MVC-5-弗瑞曼
    以其他控制器为目标 在视图中生成输出URL
    数组与指针(数组中所有元素的和)
    OC中的指针
    UIScrollView创建相册
    开发之UI篇
    TabBarController
    适配ipone5
    NSDate 哪些事
  • 原文地址:https://www.cnblogs.com/Milo-CTO/p/4446919.html
Copyright © 2011-2022 走看看