2012-09-27 101 views
2

我正在嘗試構建iOS應用程序(iOS> 5.0)。當由用戶設置的定時器結束時,它應播放音樂文件。這裏是我的設置,如果到目前爲止做了什麼:iOS中的背景音頻

  • 我在plist中使用avplayer
  • 我設置背景模式爲「應用程序播放音頻」
  • 在我的appDelegate
  • 我:

    NSError *sessionError = nil; 
    [[AVAudioSession sharedInstance] setDelegate:self]; 
    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&sessionError]; 
    
  • 一首歌之前,將要播放一集:

    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&sessionError]; 
    [[AVAudioSession sharedInstance] setActive:YES error:&sessionError]; 
    
  • 我通知我的「playerItemDidPlayToEnd」應用程序,停止播放器,並告訴其他應用程序,如music.app變得活躍起來

    _avPlayer = nil; 
    NSError *sessionError = nil; 
    [[AVAudioSession sharedInstance] setActive:NO withFlags:AVAudioSessionSetActiveFlags_NotifyOthersOnDeactivation error:&sessionError]; 
    

這工作得很好。你可以讓你的音樂應用程序在後臺播放。我的應用程序開始播放音樂應用程序消失的歌曲。我的歌被播放,如果它完成了音樂應用程序繼續播放。但只要我的應用程序不在後臺。

在後臺我得到的錯誤:

Error Domain=NSOSStatusErrorDomain Code=560161140 "The operation couldn\u2019t be completed. (OSStatus error 560161140.)"

是否有可能的兩個組合,在背景(自定義事件)播放和F.E.之間切換music.app和我的應用程序在後臺是不可能的?

這裏,我的播放器模型的代碼:http://pastie.org/4830995

回答

-1

你已經註冊您的應用程序在後臺繼續爲音頻應用程序運行?爲此,請將UIBackgroundModes密鑰添加到您的Info.plist文件中,並將其值設置爲audio

+0

是的,正如上面提到的「我的plist中的背景模式設置爲」應用程序播放音頻「,但我也閱讀了幾個線程後,背景模式不再有任何影響,因爲ios5了。 – mightym

+0

對不起,我不知道。 –

0

我認爲你的問題可能與後臺處理。您需要在應用程序委託上覆蓋此功能。

- (void)applicationDidEnterBackground:(UIApplication *)application 
{ 
__block UIBackgroundTaskIdentifier task = 0; 
task=[application beginBackgroundTaskWithExpirationHandler:^{ 
    NSLog(@"Expiration handler called %f",[application backgroundTimeRemaining]); 
    [application endBackgroundTask:task]; 
    task=UIBackgroundTaskInvalid; 
}]; 

} 

除非聲音播放,否則您的應用程序將在6分鐘後死亡。如果您的用戶設置了超過6分鐘的計時器,您可以做的就是每5.5分鐘播放一次相當短的聲音,讓您的應用程序保持活躍狀態​​並開始新的後臺任務。你也必須考慮很多東西不會在後臺執行。我做了一些有點類似於你正在做的事情。我所做的是創建NSObject的自定義子類,處理音樂播放和應用程序過期的東西。並且使它成爲我的委託中的一個強大屬性,因爲很多函數和通知不會在後臺運行在VC上。

雖然如果你只是想播放聲音,這可能不是最好的方法。也許只是發送本地通知就可以了。

希望這有助於。

+0

Thx爲您的答覆。這是很好的知道,沒有意識到這一點。但是我將測試計時器設置爲20秒。問題已經出現在那裏。它設置了計時器。關閉應用程序。20秒後出現錯誤。 – mightym

+0

嗯,你可以製作示例項目併發布鏈接? – stringCode

+0

這裏是我的播放器模型的代碼http://pastie.org/4830995 – mightym