ios - 听书功能的后台播放

一、前言

  本周为APP集成了一个TTS听书功能,遇到了些问题,在这里记录下。

  TTS听书用的是京东TTS,SDK的用法这里就不在多说了,还是蛮简单的。附上集成文档:https://aidoc.jd.com/speech/tts.html

  在集成完听书功能后,锁屏后发现APP内的TTS停止了播放。。。这就很尴尬,听书肯定得在后台播放啊

  研究了下,发现需要做一些设置。

二、处理

  1、首先在 Signing&Capabilites  下的background Modes 先勾选Audio、、、

 

 

  2、设置锁屏播放下的视图资源

  直接上代码

- (void)startSetupBackVoiceView {
    NSMutableDictionary * songDict = [[NSMutableDictionary alloc] init];
    [songDict setObjectSafely:self.chapterName aKey:MPMediaItemPropertyTitle];// 歌曲题目
    [songDict setObjectSafely:@"TTS小一" aKey:MPMediaItemPropertyArtist];// 歌手名
    [songDict setObjectSafely:self.bookName aKey:MPMediaItemPropertyAlbumTitle];// 专辑名
    [songDict setObjectSafely:[NSNumber numberWithDouble:totalTime]  aKey:MPMediaItemPropertyPlaybackDuration];// 歌曲时长
    [songDict setObjectSafely:[NSNumber numberWithDouble:currentTime] aKey:MPNowPlayingInfoPropertyElapsedPlaybackTime];// 已播时长
    [songDict setObjectSafely:[NSNumber numberWithInteger:rate] aKey:MPNowPlayingInfoPropertyPlaybackRate]; // 播放速率
    [songDict setObjectSafely:[[MPMediaItemArtwork alloc] initWithImage:[UIImage imageNamed:@"logoLogo"]]
                 aKey:MPMediaItemPropertyArtwork]; // 图片
    [[MPNowPlayingInfoCenter defaultCenter] setNowPlayingInfo:songDict];
}

  注:这里的信息很多都不需要填完整,看项目的需求,我们是小说TTS听书功能,所以只填了一个歌曲题目和歌手名。

  3、AppDelegete 里面的设置

- (void)applicationDidEnterBackground:(UIApplication *)application {
    NSLog(@"applicationDidEnterBackground:");
    [application beginReceivingRemoteControlEvents];
}


- (void)applicationWillEnterForeground:(UIApplication *)application {
    NSLog(@"applicationWillEnterForeground:");
    [application endReceivingRemoteControlEvents];
}

  注:开启后台播放模式

#pragma mark - 后台播放

- (BOOL)canBecomeFirstResponder {
    return YES;
}

- (void)remoteControlReceivedWithEvent:(UIEvent *)event {
    switch (event.subtype) {
        case UIEventSubtypeRemoteControlPlay: {
            [[HYJingDongTTSManager sharedJingDongTTS] resumeCompoundVoice];
        }
            break;
        case UIEventSubtypeRemoteControlPause: {
            [[HYJingDongTTSManager sharedJingDongTTS] pauseCompoundVoice];
            break;
        }
        case UIEventSubtypeRemoteControlPreviousTrack: {//上一曲
            
            
            break;
        }
        case UIEventSubtypeRemoteControlNextTrack: {//下一曲
            
            break;
        }
        case UIEventSubtypeRemoteControlTogglePlayPause: {//小窗口暂停
            [[HYJingDongTTSManager sharedJingDongTTS] pauseCompoundVoice];
            NSLog(@"---------点击小窗口暂停按钮");
            break;
        }
        default:
            break;
    }
}

  注:这里是监测锁屏下视图的点击事件,值得注意的是这个  UIEventSubtypeRemoteControlTogglePlayPause ,这个是点击下拉设置页面的小窗口的暂停事件,这个单独提取出来了。

  再运行下就好了,就会在锁屏页出现后台播放的视图了。

posted on 2020-01-18 17:34  麦芽呀~  阅读(1864)  评论(0编辑  收藏  举报