IDE & Framework/Android

[Kotlin] PhoneStateListener deprecated, TelephonyCallback로 대체하기

Greensky0026 2022. 2. 13. 13:36
반응형

PhoneStateListener deprecated message

 Android12로 들어서며 PhoneStateListener가 deprecated 되었습니다.

이를 TelephonyCallbck으로 대체해야 합니다.

 

 

private val mPhoneStateListener = object : PhoneStateListener(){
    override fun onCallStateChanged(state: Int, phoneNumber: String?) {
        super.onCallStateChanged(state, phoneNumber)
        Log.d(TAG, "onCallStateChanged is listen changed state : $state")
        callStateIntent = Intent(applicationContext, CallHandleService::class.java)
        callStateIntent?.putExtra("callState", state.toString())
        startService(callStateIntent)
    }
}

mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE)

 전화 상태가 변화되면, state를 행들링할 서비스를 실행시키며 call state도 넘기도록 구현한

PhoneStateListener입니다.

이걸 TelephonyCCallback으로 구현해 보겠습니다.

 

fun registerTelephonyCallback(telephonyManager: TelephonyManager){
    telephonyManager.registerTelephonyCallback(
        mainExecutor,
        object : TelephonyCallback(), TelephonyCallback.CallStateListener {
            override fun onCallStateChanged(state: Int) {
                Log.d(TAG, "onCallStateChanged is listen changed state : $state")
                callStateIntent = Intent(applicationContext, CallHandleService::class.java)
                callStateIntent?.putExtra("callState", state.toString())
                startService(callStateIntent)
            }
        })
}

listen을 사용해 리스너와 뭘 받을지에 대한 상수를 매개변수르 받는것에 비해서 훨씬 직관적으로 변했습니다.

telephonyManager의 인스턴스에서 바로 callback을 호출해서 오버라이드 할 수 있습니다.

이상입니다.

 

 

 

 

 

 

반응형