2013-07-08 19 views
6

はときapplicationDidEnterBackground:トリガ、私はAVAudioPlayerを使用して再生している音声を一時停止します!私はオーディオを開始しなかったので、ユーザーインターフェイスは更新されず、オーディオはまだポーズ状態になっていることが示されます。一時停止音声がapplicationWillEnterForegroundに自動的に再生を開始:<code>applicationWillEnterForeground:</code>トリガーは、音声が自動的に再生を開始すると今</p> <pre><code>[self.avPlayer pause]; </code></pre> <p>、:

何が起こっているのですか?これは、iOS 6.x、iPad 2で発生しています。この問題は、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 pause]を実行しませんか。再びapplicationWillEnterForegroundで:? – soryngod

+0

このコードはどこで正確に使用していますか? –

+0

これは悪いヒット・アンド・トライアルの解決策です(私の意見では)。それを言って、:)私は実際にそれを試して、それは動作していない!私はここでどんな種類の魔術師が遊んでいるのか分かりません。 – Mustafa

答えて

1

が私の最近のアプリの一つで、私はオーディオの再生が自動的に一時停止し、あなたが呼び出しによって中断された後に再開し、GUIがリフレッシュされていない同様の問題を発見しました私のアプリで。

あなたはプレーヤーのコードを扱うところクラスでこれを登録
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; 

を、アプリケーションが再開された後に制御を取得するためにAVAudioSessionaudioPlayerEndInterruptionデリゲートメソッドを使用します。私は、次の方法を使用して、問題を修正しました。この機能では、再生を再開し、それに従ってUIを更新することができます。

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

これが役立ちます。

0

HRMの解決策は私のためには機能しませんでした。私がプレイを自動的に再開するのを避けるために唯一の方法は、stopを使うことです:[self.avPlayer stop]

1

私はいくつかの奇妙なUXを見つけました。バックグラウンドから前後に行き、ハンドルの少し揺れを計画しています。もしそうなら

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

その通知を受信したとき、あなたはプレーヤーを一時停止することができます:他の音楽アプリがフォアグラウンドに入ったときに再生されているかどうかを確認 - 私はかなり単純な何かをしました。それはうまくいかなかったと言いましたが、コードの残りの部分を見ることなく、なぜそれを知るのは難しいです。私は実際にプレイするAvPlayerを伝えるReadyToPlay値のためにそれを聞くので、私がしなければならなかった

もうひとつは、プレイヤーのアイテムからstatusフラグにオブザーバーを削除することです。これは、アプリケーションがフォアグラウンドに入り、アクティブなオーディオセッションがあるときに起動します。だから、その観察者を一時停止して遊びに出るたびに設定することによって(私は遊びに打ち勝った後に気を付けることが大事だと主張するので、狂気にならない)、私は奇妙なことがたくさんある。

また、あなたの経験がかなり良い形になっていることを確認するためにここで共有するテストケースをまとめました。包括的ではありませんが、かなり徹底しています。

// 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と私は通知を受け取ったときにオーディオを一時停止しました。

関連する問題