4

OS の以前のすべてのバージョンでの私の iOS アプリでは、ときどきオーディオを録音し、しばらくスリープしてから、もう一度録音し、永久にサイクルします (スリープはバッテリーを維持するためです)。これは、アプリがバックグラウンドにある場合でも、iOS 7 までは正常に機能しました。現在、アプリがバックグラウンドにある場合、AudioQueueStart への呼び出しはエラーで録音を開始できません: -16981。ドキュメントや Web でこのエラー コードを見つけることができないようです。それを NSError に変換すると、「操作を完了できませんでした。(OSStatus エラー -16981。)」と表示されます。それほど役に立ちます。

私は、Apple がここで穴をふさいでいるという理論を持っています。アイデアは; スパイしている場合を除き、バックグラウンド プロセスから記録を開始する必要があるのはなぜですか? ユーザーの同意を得て (署名し、料金を支払いました!)、それがまさに私たちが行っていることです。

そう; これが予想されていること、またはそれについて私ができることを誰かが確認または否定できますか. 私たちのアプリにとっては、ちょっとキラーです。私はこれをバグとして Apple に提出しており、ここで進捗状況を報告しようと思います。

更新: 2013 年 10 月 3 日

以前の答えはこれに対してしばらくの間うまくいくように見えましたが; 別のアプリがオーディオをオンにしたため、-12985 で動作を停止しました。もちろん、これが混合フラグを使用する必要がある理由です。

アップデート:

iOS 7.0.3 (およびそれ以降) では、この問題が完全に修正されたようです。

4

1 に答える 1

4

さまざまなオーディオ セッション プロパティを試してみたところ、kAudioSessionProperty_OverrideCategoryMixWithOthers が有効 (TRUE) の場合に -16981 エラーが発生することがわかりました。「0」に設定するとすぐに、AudioQueueStart() が正常に実行されます。したがって、オーディオ セッションを開始する前に、次のことを試してください。

UInt32 allowMixing = 0;
status = AudioSessionSetProperty (
                      kAudioSessionProperty_OverrideCategoryMixWithOthers,
                      sizeof (allowMixing),
                      &allowMixing);

明らかに、これは iOS 7 での動作変更です。前述のとおり、ドキュメントには -16981 エラー コードは記載されていません。

于 2013-09-24T04:45:17.277 に答える