何週間も実際に何が起こったのか把握しようとしていましたが、なぜ中断後に再生を続けることができないのかわからないので、おそらくあなたは答えを知っています。 AudioSessionSetActive(TRUE)は、アプリがバックグラウンドで再生され、別のアプリに入っている場合、再アクティブ化中に常に '!cat'を返します。これはkAudioSessionIncompatibleCategoryです。それはうまく動作し、私のアプリで中断したときに再生を続ける。中断後にAudioSessionSetActiveが失敗する
オリジナルのコードでは、実際にすべてのAudioSessionとAudioQueue呼び出しがエラーを意味する場合はOSStatusを出力するマクロにラップされていますが、読みやすくするために削除しました。また、[self pause]は一時停止をトグルするだけなので、基本的にはupauseでAudioQueueStart(audioQueue、NULL)を呼び出しますが、AudioSessionが失敗した場合は動作しません。
オーディオセッションの初期化コード:
AudioSessionInitialize(NULL, NULL, _audioSessionInterruptionListener, self);
UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);
AudioSessionAddPropertyListener(kAudioSessionProperty_AudioRouteChange, _audioSessionPropertyListener, self);
AudioSessionSetActive(TRUE);
割り込みハンドラコード:
- (void)handleInterruptionChangeToState:(AudioQueuePropertyID)inInterruptionState
{
if(inInterruptionState == kAudioSessionBeginInterruption)
{
NSLog(@"+Interruption");
if(self.state == NX_STATE_PLAY)
{
[self pause];
AudioSessionSetActive(FALSE);
isPausedByInterruption = YES;
}
}
else if(inInterruptionState == kAudioSessionEndInterruption)
{
if(isPausedByInterruption)
{
AudioSessionSetActive(TRUE);
[self pause];
isPausedByInterruption = FALSE;
}
NSLog(@"-Interruption");
}
}
、それは問題を解決するために何とかつもり助けだ場合には、このストリーマソースコードはここhttps://bitbucket.org/and/amaudiostreamer/src/122de41fe6c0/AMAudioStreamer/AMAudioStreamer/Classes/NxAudioStreamer.m見つけることができます。..
期待通りに動作しませんし、よりファッショナブルな方法で同じエラーが表示されます: "AVAudioSessionでカテゴリを設定できませんでした。操作を完了できませんでした(OSStatusエラー560161140)。"私はrioInterruptionListenerを分析しようとします。私はちょっとしたことを逃したと思います。 – Andy
それから私はまずあなたが私の質問の答えでその事を試しなければならないと信じています。しかしここでは、正確な問題を得るのは難しいでしょう。コードを修正する場所を正確に特定する必要があります。私がやったとき、これは私のための挑戦でした...幸運のあなたに...あなたが問題を解決できることを願って... – DShah