代码之家  ›  专栏  ›  技术社区  ›  iwasrobbed

在iOS4上输入背景以播放音频

  •  18
  • iwasrobbed  · 技术社区  · 15 年前

    info.plist 文件和瓦拉,这是魔术。

    信息列表 文件,它暂停音频,然后在我切换回应用程序后继续播放。

    苹果表示,所有的音频框架都支持背景和声音,应该一直播放到结束,然后苹果会暂停你的应用程序。

    所以,我的问题是:他们在做什么,我错过了? 我是否也需要使用他们的新代理,或者调用网络上的音频 applicationDidEnterBackground ? 对我来说,这是没有意义的,因为我没有保存状态(他们为我做的快速应用程序切换)或真的处理任何在后台以外的音频,他们说这是应该自动处理。

    2 回复  |  直到 15 年前
        1
  •  17
  •   Joshua Weinberg    15 年前

    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
    

    加上这个你就可以走了。

        2
  •  22
  •   progrmr    14 年前

    这告诉iOS,即使你的应用程序被放在后台,你也希望能够继续处理。它不会创建一个新的任务或线程,它只是一个你想要继续运行的iOS标志。音频将播放到完成没有这个,但当它完成,如果你想开始另一个轨道,你必须能够在后台运行。

    你可以这样使用它:

    // ivar, initialized to UIBackgroundTaskInvalid in awakeFromNib
    UIBackgroundTaskIdentifier bgTaskId; 
    

    启动音频播放器时,我们保存bg任务id:

    if ([audioPlayer play]) {
      bgTaskId = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:NULL];
    }
    

    - (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)success
    {
        UIBackgroundTaskIdentifier newTaskId = UIBackgroundTaskInvalid;
    
        if (self.haveMoreAudioToPlay) {
            newTaskId = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:NULL];
            [self playNextAudioFile];
        }
    
        if (bgTaskId != UIBackgroundTaskInvalid) {
            [[UIApplication sharedApplication] endBackgroundTask: bgTaskId];
        }
    
        bgTaskId = newTaskId;
    }