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 ,这个是点击下拉设置页面的小窗口的暂停事件,这个单独提取出来了。
再运行下就好了,就会在锁屏页出现后台播放的视图了。