У меня есть класс приемника вещания, который определяет состояния телефонного звонка (исходящий, входящий, CALL_STATE_OFFHOOK
, CALL_STATE_IDLE
), он отлично работает для Android N и для более низких версий, но для Android O приемник не может определить, Вызов завершен, состояние CALL_STATE_IDLE
отсутствует, но идентифицирует исходящие, входящие и CALL_STATE_OFFHOOK
состояния правильно
private fun startListening(context: Context) {
val telManager = context.getSystemService(Context.TELEPHONY_SERVICE) as? TelephonyManager
telManager?.listen(phoneListener, PhoneStateListener.LISTEN_CALL_STATE)
}
private val phoneListener = object : PhoneStateListener() {
override fun onCallStateChanged(state: Int, incomingNumber: String) {
Log.e("CALL_STATE", "calling number $incomingNumber")
try {
when (state) {
TelephonyManager.CALL_STATE_RINGING -> {
Log.e("CALL_STATE", "CALL_STATE_RINGING")
}
TelephonyManager.CALL_STATE_OFFHOOK -> {
Log.e("CALL_STATE", "CALL_STATE_OFFHOOK")
}
TelephonyManager.CALL_STATE_IDLE -> {
Log.e("CALL_STATE", "CALL_STATE_IDLE")
}
else -> {
Log.e("CALL_STATE", "CALL_STATE_IDLE")
}
}
} catch (ex: Exception) {
ex.printStackTrace()
}
}
}
Manifest.xml
<receiver android:name=".MyPhoneCallStateReceiver">
<intent-filter android:priority="989999">
<action android:name="android.intent.action.PHONE_STATE" />
<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
</intent-filter>
</receiver>
Кроме того, я обнаружил, что, если входящий звонок, он правильно определяет, когда CALL_STATE_IDLE
состояние срабатывает
Чего мне не хватает?