美文网首页
iOS后台语音播报

iOS后台语音播报

作者: 0胡杨0 | 来源:发表于2017-05-11 11:12 被阅读1137次

最近做项目有一个需求:
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长时间在后台导致被系统杀死,播报功能就没有了,这个我还不知道怎么解决!欢迎各位大神留言指导!

相关文章

网友评论

      本文标题:iOS后台语音播报

      本文链接:https://www.haomeiwen.com/subject/hncotxtx.html