iOS 后台播放语音

最近做的一个项目有这个需求,在某些时候,应用能触发语音,就算在后台,应用也能播放语音。

然而在普通情况下,由于苹果独特的机制,在应用退到后台的时候,程序是不会继续运行的,所以只能另想办法。

配置后台播放语音

选中Targets-->Capabilities-->BackgroundModes-->ON,如图所示

或者在Targets-->info上添加

静默推送

静默推送---这个方法能实现这个需求,就算应用在后台挂起了,但是应用收到通知后还能在后台(background)状态下运行一段代码。

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(nonnull void (^)(UIBackgroundFetchResult))completionHandler {

   completionHandler(UIBackgroundFetchResultNewData);

   //手机振动起来

   AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);

  //后台播放音频设置

   AVAudioSession *session = [AVAudioSession sharedInstance];

   [session setActive:YES error:nil];

   [session setCategory:AVAudioSessionCategoryPlayback error:nil];

   [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

   //播放语音

}

播放语音

AVSpeechUtterance *utterance  = [AVSpeechUtterance speechUtteranceWithString:@"测试语音"];

utterance.pitchMultiplier=0.8;

//中式发音

AVSpeechSynthesisVoice *voice = [AVSpeechSynthesisVoice voiceWithLanguage:@"zh-CN"];

AVSpeechSynthesizer *synth = [[AVSpeechSynthesizer alloc]init];

[synth speakUtterance:utterance]; 

经过测试,无论是在前台或者后台被挂起的时候都能播放语音,但是有时候会被系统中断掉,xcode 的打印台会出现下面这些,但是重新进入app的时候,语音又会播放出来,至今还是个坑,不知道怎么搞。(后来提交到appstore的时候,需要演示后台语音播放功能,然后苹果审核说不可以这样用,就去掉了后台播放的功能)

AVSpeechSynthesizer Audio interruption notification: {

AVAudioSessionInterruptionTypeKey = 1;

}

AVSpeechSynthesizer Audio interruption notification: {

AVAudioSessionInterruptionOptionKey = 0;

AVAudioSessionInterruptionTypeKey = 0;

}


调节系统声音

首先在工程引入MediaPlayer.framework在调节音量的地方加入头文件

MPMusicPlayerController *mp=[MPMusicPlayerController applicationMusicPlayer];

mp.volume=1;//0为最小1为最大

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 最近项目刚刚交付,偶然间用到了语音播报和语音搜索的功能。语音搜索我用的是讯飞的demo,感觉效果还不错,感兴趣的话...
    奔跑的小蚂蚁_8b28阅读 8,506评论 13 6
  • 由于公司的需求要求搞一个类似于支付宝那样的后台推送的语音播报,研究了下文字转语音,以及在iOS允许的一定时间范...
    三三哥阅读 1,058评论 0 2
  • 公司要求需要做一个类似支付宝的收款的语音播报功能,研究了一天才完成,记录下来 写在前面 语音播报功能的实现必须是推...
    殇丶无痕阅读 2,703评论 6 8
  • iOS文本转语音技术 文本转语音技术, 也叫TTS, 是Text To Speech的缩写. iOS如果想做有声书...
    windgo阅读 4,432评论 7 10
  • 我对另一半的不满让我无法和他交谈。也许我不善表达,他以为我在撒娇,于是语气轻柔的跟我谈些平日里我感兴趣的话题,温柔...
    我的小草阅读 200评论 0 0