您的位置:首页 > 移动开发 > IOS开发

iOS后台语音播报

2017-11-27 13:41 666 查看
最近做项目有一个需求:
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];
//设置后台任务ID
UIBackgroundTaskIdentifiernewTaskId=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
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息