es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema con PhoneStateListener solo funciona cuando la aplicación está abierta para API>28 (P) se puede resolver mediante la modificación del bloque de código de la siguiente manera:

    val telephony =
        context.applicationContext.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
        telephony.registerTelephonyCallback(Executors.newSingleThreadExecutor(), object : TelephonyCallback() {
            override fun onCallStateChanged(callState: Int) {
                super.onCallStateChanged(callState)
                if (callState == TelephonyManager.CALL_STATE_RINGING) {
                    val incomingNumber = telephony?.incomingNumber?.toString()
                    println("incomingNumber API>28: $incomingNumber")
                    // Haz lo que quieras con incomingNumber aquí
                }
            }
        })
    } else {
        telephony.listen(object : PhoneStateListener() {
            override fun onCallStateChanged(state: Int, incomingNumber: String) {
                super.onCallStateChanged(state, incomingNumber)
                println("incomingNumber API<=28: $incomingNumber")
                // Haz lo que quieras con incomingNumber aquí
            }
        }, PhoneStateListener.LISTEN_CALL_STATE)
    }
    

    Este bloque de código modificado utilizará registerTelephonyCallback para registrar un TelephonyCallback para API >= 28 (P), lo que proporcionará acceso al número de teléfono entrante incluso si la aplicación está cerrada. Para API <= 28 (P), seguirá utilizando PhoneStateListener para escuchar los cambios de estado de llamada y recuperar el número de teléfono entrante solo cuando la aplicación esté abierta.

Comments are closed.