2014-01-19 81 views
1

我正在寫一個iPhone應用程序,通過定時器定期播放聲音。這款應用程序的第一個版本在音量最小化時播放音頻,或者當屏幕變爲空白時播放音頻,但是在添加一些UI後,它看起來已停止播放。我不知道爲什麼,甚至如何診斷(取消UI代碼並不能解決問題)。iOS 7:音頻不在背景中播放

我設置背景模式在Info.plist文件:(「應用程序播放音頻或通過Airplay的流音頻/視頻」)和我也有我的應用程序委託執行以下操作:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    // Override point for customization after application launch. 
    NSError *setCategoryErr = nil; 
    NSError *activationErr = nil; 

    [[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback 
            error:&setCategoryErr]; 

    [[AVAudioSession sharedInstance] setActive:YES 
            error:&activationErr]; 
    return YES; 
} 

在我ViewDidLayoutSubViews方法,我初始化AVPLayer正是如此:

self.fAudioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:soundFileURL error:nil]; 
    self.fAudioPlayer.numberOfLoops = 0; 
    [self.fAudioPlayer setVolume:volume]; 
    [self.fVolumeLevelSlider setValue:volume]; 

哪裏fAudioPlayer的類型是AVAudioPlayer的。當我的計時器被擊中,我玩的是音頻這樣的:

self.fBGTaskID = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:NULL]; 
    [self.fAudioPlayer play]; 

我仍然會通過我的變化,看看有什麼,如果有的話,我已經把中可能會導致聲音停止在後臺播放從一個應用版本到下一個應用版本。有沒有人在這裏看到任何可能是錯誤的東西?

+0

你如何在背景上運行計時器? –

回答

3

移動這些行:

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

,我開始在我的定時器踢右前,解決了這個問題。

1

爲了保持玩家繼續玩,即使應用在後臺,你必須添加以下關鍵

「所需的背景模式」更新應用程序的Info.plist文件和值添加到「應用程序播放音頻或使用AirPlay流音頻/視頻」

設置此屬性允許應用程序在後臺播放/流音頻,而應用程序被最小化或其他應用程序打開(包括屏幕保護程序)。