2016-08-03 3 views
7

バックグラウンドで赤い録音バーを表示することについては、ここで多くの質問があります。それは完全に私はAVAudioSessionカテゴリAVAudioSessionCategoryPlayAndRecordを使用する必要があります明確です。私の質問は、アプリケーションでアクティブなVOIPコールを持っているときに、フォアグラウンドアプリに緑色のIn-Callバー(または少なくとも赤いバー)を表示するにはどうすればいいですか?そこで、WhatsappやSkypeのように、ステータスバー領域をタップするUIに戻ることができました。デバイス上のフォアグラウンドアプリで、高さが緑色のステータスバー(In-Call)を表示するにはどうすればよいですか?

  • voipaudioモードのInfo.plist + setCategory:AVAudioSessionCategoryPlayAndRecord +背景を行くときin this SO answer(私に赤いステータスバーを与えることを示唆としてsetActive、何もでUIBackgroundModesキーでフォアグラウンドでいる間:私はすでに試した何

  • 前+ + setMode:AVAudioSessionModeVoiceChatAVAudioSession - 助けにはならなかった -
  • がPJSIP源にソケットにkCFStreamNetworkServiceTypeVoIPフラグを設定し、それを再コンパイル動作しませんでした。コールにPJSIPを使用

hereからのサンプルコードを取った)[self.inputStream setProperty:NSStreamNetworkServiceTypeVoIP forKey:NSStreamNetworkServiceType]:また、IOSの8

  • は別個のソケットを作成するので非推奨値、INPUTSTREAM/OutputStreamのためのVoIPフラグを設定します。ステータスバーの高さを上げようとすると、UIをすべて動かすことができますか? これを行うための標準的な方法はありますか、またはルートUIWindowのサイズを変更し、ステータスバーの下に別の緑のUIWindowを設定して自分自身でハックする必要がありますか?


    編集: 一切答えはローマン・ermolovの答え@受け入れ、それを行うための標準的な方法が見つかりませんので。私はそれを自分で行うにはいくつかのオプションを提案することができる答えを検索する人のために:

    1. Apple's iAdSuite with Storyboards exampleのように、容器内のルートのViewControllerを包みます。例えば、sample projectを見てください。おそらくそのバーを作る最善の方法。
    2. ハックUINavigationBarの高さ(thisアプローチを参照してください) - まだ景観のために動作しませんが、おそらく
    3. コントロールメインのUIWindowのフレームを解決することができる、自分自身、所望のコンテンツにステータスバーの下に別のUIWindowを置きます。
  • +0

    私の回答が役に立ちましたか、実装の詳細をお探しですか?もしそうなら、あなたの要件に関する追加情報を提供してもらえますか? –

    +0

    非常に助かりました。ありがとうございました。私はまだインコールバーをオンにするシステム方法があれば、それが望む。誰もこれを見つけなければ、私はあなたの答えを受け入れるでしょう –

    答えて

    5

    私は両方のアプリ(WhatsApp & Skype)の調査を行い、この機能を実現するために独自のUIViewを使用したことを知りました。

    これはスカイプです: Skype status bar

    これはのWhatsApp(明らかに本当のスナップショットを取得し、それが基本的な考え方を送信することはできません)です:両方のアプリで enter image description here

    それが上に起動するUIViewのですそれをフォーマット出力テキスト/ハンドルのためのいくつかの方法があります。

    iOS 10ではAppleがCallKit.frameworkを導入しましたが、そのような機能もないようですので、それを行う唯一の方法です。自分でやってください。

    1

    Roman Ermolovの答えでは、この機能にはUIViewというアプリを使用していると説明されていますが、その方法については説明していません。私がそれを見る方法には、いくつかの選択肢があります。あなたが現在のビューコントローラのトップ(と被覆)上のビューを築くためにしたい場合は

    は、あなたがUIViewUIWindowUILabelまたは独自に作成し、あなたのアプリケーションのkeyWindowのサブビューとしてそれを追加することができます。

    ビューコントローラの内容を覆わずにビューを上にするには、コールバーサブビューを追加するときに、アプリケーションウィンドウまたはウィンドウのルートビューコントローラのサイズを手動で変更してください。または、このコールバーサブビューとビューの高さ制約のコンセントを含むUIViewController基本クラスを作成することもできます。この制約のデフォルト値はゼロでなければなりません。次に、コールがかかったときに、高さの制約を希望のコールバックの高さに変更します。この制約アプローチは、アプリケーションのUIWindowでも機能するかもしれませんが、アプリケーションのウィンドウで制約を使用することにあまり慣れていません。

    関連する問題