#android #kotlin #phone-state-listener #kotlin-flow
Вопрос:
У меня есть служба прослушивания вызовов с MutableStateFlow
class CallsLogListenerService : PhoneStateListener() {
private val _events = MutableStateFlow<String>("INITIAL")
val events = _events.asStateFlow()
override fun onCallStateChanged(state: Int, phoneNumber: String?) {
super.onCallStateChanged(state, phoneNumber)
when (state) {
TelephonyManager.CALL_STATE_IDLE -> {
postEvent("IDLE")
Log.d("CALL STATE", "Idle call")
}
TelephonyManager.CALL_STATE_OFFHOOK -> {
Log.d("CALL STATE", "Off hook call")
}
TelephonyManager.CALL_STATE_RINGING -> {
postEvent("RINGING")
Log.d("CALL STATE", "Ringing call")
}
}
}
fun postEvent(event: String) {
CoroutineScope(Dispatchers.Main).launch {
_events.emit(event)
}
}
И у меня есть репозиторий с этой службой
class CallsRepositoryImpl(private val listenerService: CallsLogListenerService) {
init {
listenCallState()
}
private fun listenCallState() {
CoroutineScope(Dispatchers.Main).launch {
listenerService.events.collect { Log.d("CALL STATE IN REPO", it) }
}
}
}
Проблема: В журнале я вижу только «НАЧАЛЬНОЕ» состояние в репозитории и ничего другого. Но в классе обслуживания все в порядке.
Все состояния показывают, собираю ли я события CallsLogListenerService
(только для тестирования).
Вопрос: Что я делаю не так stateFlow
?