[swift] 사운드 재생 중 전화가 왔을 때 동작 설정하기

iOS 애플리케이션을 개발하다 보면 사운드 재생 기능을 구현해야 할 때가 있습니다. 그런데 사용자가 앱 내에서 사운드를 재생 중에 전화가 오면 어떻게 동작하도록 설정할 수 있을까요? 이번 포스트에서는 Swift 언어를 사용하여 사운드 재생 중에 전화 동작을 설정하는 방법을 알아보겠습니다.

전화 동작을 감지하기

먼저, 전화가 왔을 때 동작을 감지해야 합니다. iOS에서 전화 동작을 감지하기 위해 CTCallCenter 클래스를 사용할 수 있습니다. CTCallCenter 클래스를 사용하면 전화 상태 변경을 감지하고 해당 정보를 받아올 수 있습니다. 다음은 전화 동작 감지를 위한 코드입니다.

import Foundation
import CoreTelephony

// 전화 동작 감지를 위한 CTCallCenter 인스턴스 생성
let callCenter = CTCallCenter()

// 전화 상태 변경 이벤트를 감지하는 함수
callCenter.callEventHandler = { (call: CTCall) in
    // 전화 상태에 대한 처리 로직을 작성합니다.
    if call.callState == CTCallStateDisconnected || call.callState == CTCallStateEnded {
        // 전화 종료 상태일 때 재생을 계속하도록 설정
        // 사운드 재생을 계속할때의 동작을 작성합니다.
    } else if call.callState == CTCallStateIncoming {
        // 전화 수신 상태일 때 재생을 중단하도록 설정
        // 사운드 재생을 중단할때의 동작을 작성합니다.
    }
}

위의 코드에서 callCenter.callEventHandler에 클로저를 할당하고, 클로저 내에서 전화 상태에 따라 동작할 내용을 작성하면 됩니다. CTCallStateDisconnected 또는 CTCallStateEnded 상태일 때는 전화 종료 상태이므로 사운드 재생을 계속할 수 있도록 설정하면 됩니다. CTCallStateIncoming 상태일 때는 전화 수신 상태이므로 사운드 재생을 중단할 수 있도록 설정하면 됩니다.

사운드 재생 중 동작 설정하기

전화 동작을 감지하는 코드를 작성했다면, 이제 사운드 재생 중에 어떤 동작을 설정할지 결정해야 합니다. 예를 들어, 전화가 왔을 때 사운드를 일시정지하고, 전화 종료 후에 다시 재생하는 동작을 설정해보겠습니다.

// 전화 동작 감지를 위한 CTCallCenter 인스턴스 생성
let callCenter = CTCallCenter()

// 사운드 재생 중 전화 동작 설정
callCenter.callEventHandler = { (call: CTCall) in
    if call.callState == CTCallStateDisconnected || call.callState == CTCallStateEnded {
        // 전화 종료 상태일 때 사운드 재생을 다시 시작합니다.
        audioPlayer.play()
    } else if call.callState == CTCallStateIncoming {
        // 전화 수신 상태일 때 사운드 재생을 일시정지합니다.
        audioPlayer.pause()
    }
}

위의 예시 코드에서 audioPlayer는 사운드를 재생하는 객체입니다. 전화 동작 감지 이벤트에서 해당하는 상태일 때, audioPlayer.play()를 호출하여 사운드 재생을 다시 시작하게 하고, audioPlayer.pause()를 호출하여 사운드 재생을 일시정지하도록 설정합니다.

결론

위의 예시 코드를 참고하여 iOS 애플리케이션에서 사운드 재생 중에 전화 동작을 설정하는 방법을 알아보았습니다. 이를 활용하여 사용자가 앱 내에서 사운드를 재생 중에 전화가 왔을 때 동작을 설정할 수 있습니다.