iOS后台语音播报

来源:互联网 发布:淘宝秒杀需要登录吗 编辑:程序博客网 时间:2024/06/11 14:39

最近做项目有一个需求:app在前台弹出一个自定义提示框,并且语音读出相关内容.app在后台的时候弹出推送通知,并且语音读出相关内容.

这个需求用到的知识点: 1,文字转语音(iOS 7.0 之后自带) 2,静默推送(个推,jpush等,本人选用的是个推.个推带有透传功能,轻松实现需求1)**3,让app在后台时也能播报推送内容(我之前在网上找了好多内容,都没有最后一步.最后在一篇后台播放音乐的文章中找到一个方法.参考链接 http://www.jianshu.com/p/ab300ea6e90c).

实现:1,文字转语音

- (void)speakWithString:(NSString*)string{AVSpeechUtterance*utterance = [AVSpeechUtterancespeechUtteranceWithString:string];utterance.pitchMultiplier=1.1;//中式发音AVSpeechSynthesisVoice*voice = [AVSpeechSynthesisVoicevoiceWithLanguage:@"zh-TW"];utterance.voice= voice;AVSpeechSynthesizer*synth = [[AVSpeechSynthesizeralloc]init];[synthspeakUtterance:utterance];}

这是iOS 7 之后自带的框架,里面包括语速,语调等,需要的自己去百度.

2,静默推送也是iOS自带的具体就是让后台加一个字段----->"content-available" : 1,推送的具体设置请自行参考自家文档,这里不详细说了.

3,这是最关键的一步,不做这一步的话app在后台的时候是不能进行语音播报(或者只能播报一次)的!!!!!!!
在appDelegate中加入如下代码(再次声明这一段代码参考:http://www.jianshu.com/p/ab300ea6e90c)

-(void)applicationWillResignActive:(UIApplication*)application{//开启后台处理多媒体事件[[UIApplicationsharedApplication]beginReceivingRemoteControlEvents];AVAudioSession*session=[AVAudioSessionsharedInstance];[sessionsetActive:YESerror:nil];//后台播放[sessionsetCategory:AVAudioSessionCategoryPlaybackerror:nil];//这样做,可以在按home键进入后台后 ,播放一段时间,几分钟吧。但是不能持续播放网络歌曲,若需要持续播放网络歌曲,还需要申请后台任务id,具体做法是:_bgTaskId=[AppDelegatebackgroundPlayerID:_bgTaskId];//其中的_bgTaskId是后台任务UIBackgroundTaskIdentifier _bgTaskId;}//实现一下backgroundPlayerID:这个方法:+(UIBackgroundTaskIdentifier)backgroundPlayerID:(UIBackgroundTaskIdentifier)backTaskId{//设置并激活音频会话类别AVAudioSession*session=[AVAudioSessionsharedInstance];[sessionsetCategory:AVAudioSessionCategoryPlaybackerror:nil];[sessionsetActive:YESerror:nil];//允许应用程序接收远程控制[[UIApplicationsharedApplication]beginReceivingRemoteControlEvents];//设置后台任务IDUIBackgroundTaskIdentifiernewTaskId=UIBackgroundTaskInvalid;newTaskId=[[UIApplicationsharedApplication]beginBackgroundTaskWithExpirationHandler:nil];if(newTaskId!=UIBackgroundTaskInvalid&&backTaskId!=UIBackgroundTaskInvalid){[[UIApplicationsharedApplication]endBackgroundTask:backTaskId];}returnnewTaskId;}

然后就是项目配置要选对,留图供大家参考


Paste_Image.png

这样后台语音播报的功能就实现了,但是只有app没被系统杀死的情况下才能语音播报,如果app长时间在后台导致被系统杀死,播报功能就没有了,这个我还不知道怎么解决!欢迎各位大神留言指导!



作者:0胡杨0
链接:http://www.jianshu.com/p/846b4f8dd6cc
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。