2013-07-08 40 views
6

applicationDidEnterBackground:觸發器,我暫停其使用AVAudioPlayer播放音頻:暫停音頻開始對applicationWillEnterForeground自動播放:

[self.avPlayer pause]; 

現在,當applicationWillEnterForeground:觸發器,音頻開始自動播放!由於我沒有啓動音頻,用戶界面沒有更新,並且顯示音頻仍處於暫停狀態。

發生了什麼事? iPad 2上的iOS 6.x發生這種情況。此問題不會在運行iOS 5.x的舊版iPad上重現。

這是我如何設置的AVAudioSession

// Setup the audio session 
BOOL succeeded = NO; 
NSError *sessionError = nil; 
AVAudioSession *session = [AVAudioSession sharedInstance]; 
[session setDelegate:self]; 

if ([session respondsToSelector:@selector(setPreferredSampleRate:error:)]) { 
    succeeded = [session setPreferredSampleRate:128000.0f error:&sessionError]; 

} else { 
    succeeded = [session setPreferredHardwareSampleRate:128000.0f error:&sessionError]; 
} 

succeeded = [session setCategory:AVAudioSessionCategorySoloAmbient error:&sessionError]; 
succeeded = [session setActive:YES error:&sessionError]; 
+0

你爲什麼不做[self.avPlayer暫停];再次在applicationWillEnterForeground中:? – soryngod

+0

你究竟在哪裏使用這段代碼? – 2013-07-08 12:14:00

+0

這是一種糟糕的n-trial解決方案(在我看來)。話雖如此,:)我真的試過了,它不工作!我不知道這裏玩什麼魔法。 – Mustafa

回答

1

在我最近的應用程序之一,我發現了一個類似的問題,即音頻播放自動暫停,並且系統會通過調用中斷後的恢復和GUI不清爽在我的應用程序。我已經用下面的方法解決了該問題:在您處理播放器代碼

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; 

並使用AVAudioSessionaudioPlayerEndInterruption委託方法來獲得控制中的應用得以恢復後級

註冊此。在此功能中,您可以繼續播放並相應地更新用戶界面。

- (void)audioPlayerEndInterruption:(AVAudioPlayer *)player withOptions:(NSUInteger)flags 

希望這會有所幫助。

0

HRM的解決方案對我無效。我得到它,以避免自動恢復播放的唯一方法是使用停止:[self.avPlayer停止]

1

我發現了一些奇怪的用戶體驗,當從後臺來回和基於一堆帖子, d計劃一個小小的手柄搖晃。我做了一件很簡單 - 檢查時,應用程序進入前景等音樂播放:

func applicationWillEnterForeground(application: UIApplication) { 
     if AVAudioSession.sharedInstance().otherAudioPlaying{     
NSNotificationCenter.defaultCenter().postNotificationName(Notifications.ForegroundEnteredWithOtherAudioPlaying, object: nil) 
     } 
    } 

如果是這樣,收到通知的時候可以暫停播放。你提到這一點沒有奏效,但沒有看到你的代碼的其餘部分,很難知道爲什麼。

我不得不做的另一件事是將觀察者從播放器項目中移除到status標誌,因爲我傾聽ReadyToPlay的值,我告訴AvPlayer實際播放。當應用程序進入前臺並且存在活動的音頻會話時會被觸發。所以通過暫停觀看者並在每次比賽中設置它(這並不瘋狂,因爲我認爲在我打球后我只關心觀察是一個好的限制),所以我能夠控制很多奇怪。

我還寫了一堆測試用例,我會在這裏分享,以確保您的體驗非常好。這並不全面,但也相當徹底。

// 1. Play, leave app, don't open anything else, come back 
    // 2. Play, leave app, open an app that plays music, come back 
    // 3. Play, leave app, open an app that plays music, play music, come back 
    // 4. Play, let audio go for 5 seconds, pause, open an app that plays music, come back 
    // 5. Play, let audio go for 5 seconds, pause, open an app that plays music, play music, come back 
    // 6. Press play, leave app before playback starts, open an app that plays music, come back 
    // 7. Crazy s$*t like play, leave app, open an app that plays music, play music, come back, tap a different song 
0

我也面臨同樣的問題。所以我註冊了我的班級UIApplicationWillResignActive,我在收到通知時暫停了音頻。

相關問題