BroadcastReceiver для мониторинга состояния телефонных звонков не работает для Android O API 27 - PullRequest
0 голосов
/ 08 мая 2018

У меня есть класс приемника вещания, который определяет состояния телефонного звонка (исходящий, входящий, 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 состояние срабатывает

Чего мне не хватает?

...