IDE & Framework/Android
[Kotlin] PhoneStateListener deprecated, TelephonyCallback로 대체하기
Greensky0026
2022. 2. 13. 13:36
반응형
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을 호출해서 오버라이드 할 수 있습니다.
이상입니다.
반응형