API Opentalk(Vonage) установил callertune для обнаружения звонка телефонного звонка

Как определить время, когда телефон начинает звонить для исходящих вызовов. Я разрабатываю приложение, в котором я пытаюсь сделать вызов программно, и когда вызов подключен к Интернету, например, приложение для аудиовызова приложения Whats. Я не нашел решение, как определить, что вызов звонит или занят на стороне получателя. я подключаю свой вызов, используя ключ токена и ключ сеанса через Интернет. мой код ниже для передачи намерения вызвать активность.

      val intent = Intent(this@AstroDetailsActivity, CallActivity::class.java)
                intent.putExtra(SESSION_ID_KEY, res!!.session_id)
                intent.putExtra(TOKEN_KEY, res.token)
                intent.putExtra("userId", MyApplication.sharedPreference?.userId.toString())
                intent.putExtra("astroId", astroId)
                intent.addCategory(Intent.ACTION_CALL)
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)

                startActivity(intent)

1 ответ

В примере кода не используются дополнительные функции намерения, поэтому я не уверен, внесли ли вы изменения в этот код для фактической инициализации.

Но если вы посмотрите на это действие, вы увидите файл . Этот объект присоединяется к вызову с помощью:

      private fun registerPhoneListener() {
    val telephonyManager = getSystemService(TELEPHONY_SERVICE) as TelephonyManager
    telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE)
}

В PhoneStateListenerтогда есть метод onCallStateChangedкоторый вызывается при изменении текущего состояния телефонного звонка. Это можно переопределить для выполнения пользовательской логики, как показано ниже:

      private val phoneStateListener: PhoneStateListener = object : PhoneStateListener() {
    override fun onCallStateChanged(state: Int, incomingNumber: String) {
        super.onCallStateChanged(state, incomingNumber)

        when (state) {
            TelephonyManager.CALL_STATE_IDLE -> {
                publisher?.publishVideo = true
                publisher?.publishAudio = true
            }
            TelephonyManager.CALL_STATE_RINGING -> Log.d("onCallStateChanged", "CALL_STATE_RINGING")
            TelephonyManager.CALL_STATE_OFFHOOK -> {
                Log.d("onCallStateChanged", "CALL_STATE_OFFHOOK")
                publisher?.publishVideo = false
                publisher?.publishAudio = false
            }
            else -> Log.d("onCallStateChanged", "Unknown Phone State !")
        }
    }
}
Другие вопросы по тегам