首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在背景中播放声音提醒序列,暂停音乐,不被其他声音停止

问在背景中播放声音提醒序列,暂停音乐,不被其他声音停止
EN

Stack Overflow用户
提问于 2012-09-12 20:27:25
回答 1查看 315关注 0票数 1

我想为iPhone编写应用程序,播放音频提醒序列,并与其他应用程序产生的声音进行良好的沟通。

更具体地说,我想实现以下几点:

  1. 每10秒播放一次声音提醒。(这是为了简化问题,在我的应用程序中有一个时间点序列,它指定何时播放reminders)
  2. Sound应该在后台工作。
  3. 如果音乐播放它应该暂停,我的应用程序应该产生音频提醒,然后音乐继续。
  4. 如果其他应用程序开始使用声音,我的提醒序列应该继续工作(例如,音乐开始或我的应用程序运行后的来电)。

使用下面的代码,我能够实现1.和2.但我不能同时实现3.和4.。

代码语言:javascript
复制
- (void)viewDidLoad
{
    [super viewDidLoad];
    audioSession = [AVAudioSession sharedInstance];
}

// Following function is used to start reproducing sounds and also called
// for the next sounds
- (IBAction)soundPlayShort:(id)sender
{
    NSURL * url = @"reminder sound url here";

    // soundPlayer is defined in .h file as AVAudioPlayer
    if (soundPlayer == nil) {
       // initialize soundPlayer
       soundPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
       soundPlayer.delegate = self;
    }
    [soundPlayer playAtTime:soundPlayer.deviceCurrentTime + 10];
    [audioSession setCategory:AVAudioSessionCategoryPlayback error:nil];    
}

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{
    [self soundPlayShort:self];
}

如果我按照下面的代码更新audioPlayerDidFinishPlaying,其他声音将继续(第3点),但序列中的下一个提醒不再调用(与第2点相关)。

代码语言:javascript
复制
- (void)restoreOtherSounds
{
    [audioSession setActive:NO 
        withFlags:AVAudioSessionSetActiveFlags_NotifyOthersOnDeactivation error:nil];
}

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{

    [self restoreOtherSounds];
    [self soundPlayShort:self];
}

我还没有意识到如何恢复提醒序列,例如在来电之后。(第4点)

即使是部分答案也可能对我很有帮助。提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2013-07-11 18:09:12

与第2点相关,在soundPlayShort中初始化AVAudioPlayer之前,请尝试将音频会话设置为活动:

[[AVAudioSession sharedInstance] setActive:YES error:nil];

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12388163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档