2

私が取り組んでいるアプリでは、wifiネットワークを使用して音声を送受信するため、wifiを常にオンにする必要があります。次に、オーディオを再生します。ユーザーが停止することを選択するまで、これを継続的に行う必要があります。

問題: iOSは30分後にWiFiをオフにするため、ソケットが閉じてAudioQueuesが停止します。Appleのドキュメントからの抜粋は次のとおりです。

Wi-Fiハードウェアが過度の電力を使用するのを防ぐために、iOSにはタイマーが組み込まれており、実行中のアプリがUIRequiresPersistentWiFiキーを介して使用を要求していない場合、30分後にハードウェアを完全にオフにします。ユーザーがキーを含むアプリを起動すると、iOSはアプリのライフサイクルの間タイマーを効果的に無効にします。ただし、そのアプリが終了または一時停止されるとすぐに、システムはタイマーを再度有効にします。

注: UIRequiresPersistentWiFiの値がtrueの場合でも、デバイスがアイドル状態のとき(つまり、画面がロックされているとき)は効果がないことに注意してください。アプリは非アクティブと見なされ、一部のレベルでは機能する可能性がありますが、Wi-Fi接続はありません。

すでに実装されているもの:

  1. オーディオセッションはデバイスでアクティブ化されます。ユーザーがオーディオの停止を選択するまで、または接続が失われてAudioQueuesも停止されるまで、この方法が維持されます。

  2. UIRequiresPersistentWiFiが.plistファイルでtrueに設定されている

  3. 到達可能性APIは、接続損失を検出し、必要な処理を行うために実装されています。

  4. .plistファイルで「アプリケーションがバックグラウンドで実行されない」が「false」に設定されている

  5. 「必要なバックグラウンドモード」には、.plistファイルの配列に「アプリがオーディオを再生します」という項目があります。

  6. NSStreamNetworkServiceTypeVoiceforKeyは、両方のデバイスのソケットのプロパティNSStreamNetworkServiceTypeに設定されます。

  7. ソケットでkCFBooleanTrueの値に設定されたkCFStreamPropertyNoCellularプロパティは役に立ちません

  8. 役立つ唯一の設定は、NSStreamNetworkServiceTypeをNSStreamNetworkServiceTypeVoIPに設定し、.plistファイルの[必須のバックグラウンドモード]フィールドに[アプリがVoiceoverIPサービスを提供する]を追加することです。ただし、Appleは、アプリにVoIPサービスを実装していないためにアプリを拒否します。

私はこの問題についてAppleDTSと話していましたが、彼らによると、この問題を支援するAPIレベルのサポートはありません。ただし、この主張については疑問があります。この機能を必要とするアプリがアプリストアにいくつかあります(たとえば、Pandora)。

4

1 に答える 1

0

デバイスのスリープタイマーを無効にし、アプリをフォアグラウンドに保つようにユーザーに指示します。これにより、ディスプレイがオフになる(画面がロックされる)のを防ぎ、デバイスが低電力状態になるのを防ぎ、WIFI無線の電源を入れたままにすることができます。

于 2012-12-13T02:03:12.397 に答える