9

バックグラウンドで赤い録音バーを表示するよう求める質問がたくさんあります。AVAudioSessionそのためにカテゴリを使用する必要があることは完全に明らかAVAudioSessionCategoryPlayAndRecordです。私の質問は、アプリでアクティブな VOIP 通話をしているときに、フォアグラウンド アプリに緑色の通話中バー (または少なくとも赤いバー) を表示するにはどうすればよいですか? そのため、 Whatsappや Skypeと同じように、ステータスバー領域をタップして UI を呼び出すことができました。

私がすでに試したこと:

  • voipこのSOの回答で示唆されているように、Info.plist + +の主要なaudioモード(バックグラウンドに移動すると赤いステータスバーが表示されますが、フォアグラウンドでは何も表示されません)UIBackgroundModessetCategory:AVAudioSessionCategoryPlayAndRecordsetActive
  • 前 + AVAudioSession+ setMode:AVAudioSessionModeVoiceChat- 機能しなかった
  • pjsip ソースでフラグをソケットに設定kCFStreamNetworkServiceTypeVoIPし、再コンパイルしましたが、役に立ちませんでした。また、iOS 8 以降では非推奨です。
  • 別のソケットを作成し、inputStream/outputStream の voip フラグを設定します: (ここ[self.inputStream setProperty:NSStreamNetworkServiceTypeVoIP forKey:NSStreamNetworkServiceType]からサンプル コードを取得)

通話に pjsip を使用します。すべての UI を下に移動して、ステータスバーの高さを増やすには他に何ができますか? それを行うための標準的な方法はありますか、またはルート UIWindow のサイズを変更し、ステータスバーの下に別の緑色の UIWindow を設定して、自分でハックする必要がありますか?


編集:それを行う標準的な方法に対する回答が見つからないため、@roman-ermolovの回答を受け入れました。答えを探す人のために、自分でそれを行うためのいくつかのオプションを提案するかもしれません:

  1. Apple の iAdSuite with Storyboards example のように、ルート ビューコントローラーをコンテナー内にラップします。たとえば、私のサンプル プロジェクトを見てください。おそらくそのバーを作るための最良の方法.
  2. UINavigationBar の高さをハックする (このアプローチを参照) - ランドスケープではまだ機能しませんが、おそらく解決される可能性があります
  3. メイン UIWindow のフレームを自分で制御し、別の UIWindow をステータスバーの下に目的のコンテンツとともに配置します。
4

2 に答える 2

3

Roman Ermolov の回答では、一部のアプリはこの機能に独自のものを使用していると説明されていますが、そのUIView方法については説明されていません。私の見方では、いくつかのオプションがあります。

ビューを現在のビュー コントローラーの上に配置する (およびカバーする) 場合はUIViewUILabelまたは独自のを作成し、それUIWindowをアプリケーションの のサブビューとして追加できますkeyWindow

ビュー コントローラーのコンテンツを覆わずにビューを上に固定するには、上記と同じ方法を使用して、呼び出しバー サブビューを追加するときに、アプリケーション ウィンドウまたはウィンドウのルート ビュー コントローラーのサイズを手動で変更します。UIViewControllerまたは、このコール バー サブビューとビューの高さ制約のアウトレットを含む基本クラスを作成することもできます。この制約のデフォルト値はゼロにする必要があります。次に、コールが発信されたら、高さの制約を目的のコール バックの高さに変更します。この制約アプローチは、アプリケーションでも機能する可能性がありますUIWindowが、アプリケーションのウィンドウで制約を使用することにあまり慣れていません。

于 2016-08-08T22:47:38.903 に答える