2016-08-03 9 views
7

백그라운드에서 빨간색 녹음 바를 표시하는 데 많은 질문이 있습니다. 그것은 분명히 AVAudioSession 카테고리 AVAudioSessionCategoryPlayAndRecord을 사용해야합니다. 내 질문에 어떻게 응용 프로그램에서 활성 VOIP 전화를 가질 때 포 그라운드 응용 프로그램에서 초록색 수신 표시 줄 (또는 적어도 빨간색 막대)을 표시 할 수 있습니까? 따라서 Whatsapp 또는 Skype처럼 상태 표시 줄 영역을 두드리는 UI로 돌아갈 수 있습니다.기기의 전경 앱에서 이중 높이 녹색 상태 표시 줄 (통화 중)을 표시하는 방법은 무엇입니까?

  • voipaudio 모드의 Info.plist + setCategory:AVAudioSessionCategoryPlayAndRecord + 배경을 갈 때 in this SO answer (나에게 빨간 상태 표시를 제공을 제안 setActive,하지만 아무것도에서 UIBackgroundModes 키 전경에있는 동안 : 이미 해봤 무엇

    )

  • 이전 + + setMode:AVAudioSessionModeVoiceChatAVAudioSession - 도움이되지 않았다 -
  • 이 pjsip 소스에 소켓하는 kCFStreamNetworkServiceTypeVoIP 플래그를 설정하고 다시 컴파일 작동하지 않았다. 통화 pjsip를 사용

(here에서 샘플 코드를했다) [self.inputStream setProperty:NSStreamNetworkServiceTypeVoIP forKey:NSStreamNetworkServiceType] : 또한, 아이폰 OS 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에 (실제 스냅 샷을 얻을 수 공개하지만 기본적인 아이디어를 전송) : 그것은 정상에 시작하는 UIView의 모두 애플 리케이션에서 enter image description here

    화면의 형식 출력 텍스트/핸들 터치에 대한 여러 가지 방법이 있습니다.

    iOS 10에서 Apple은 CallKit.framework을 도입했으나, 그런 종류의 기능이 없기 때문에 그렇게 할 수있는 유일한 방법 인 것 같습니다. 직접하십시오.

    1

    Roman Ermolov의 답변에 따르면 일부 앱에서는이 기능에 대해 UIView을 사용하지만 설명하지는 않습니다. 내가 보는 방식에는 몇 가지 옵션이 있습니다. 현재 뷰 컨트롤러의 상단 (그리고 덮개)에서보기를 배치하려면

    , 당신은 UIViewUIWindowUILabel 또는 당신의 자신을 만들고 응용 프로그램의 keyWindow의 하위 뷰 같은 것을 추가 할 수 있습니다.

    뷰 컨트롤러의 내용을 덮지 않고 뷰를 위에 붙이려면 위와 같은 방법을 사용하고 호출 막대 하위보기를 추가 할 때 응용 프로그램 창이나 창의 루트보기 컨트롤러의 크기를 수동으로 조정할 수 있습니다. 또는이 호출 막대 하위보기와보기의 높이 제약 조건을 포함하는 UIViewController 기본 클래스를 만들 수 있습니다. 이 제약 조건의 기본값은 0이어야합니다. 그런 다음 전화가 걸리면 높이 제한을 원하는 콜백 높이로 변경하십시오. 이 제약 접근법은 응용 프로그램의 UIWindow에서도 작동 할 수 있지만 응용 프로그램 창에서 제약 조건을 사용하는 것에 익숙하지 않습니다.