Android 检测到不成功的电话并稍后再试

标签 android kotlin telephonymanager android-audiomanager phone-state-listener

有没有办法在一段时间后重试错过或不成功的呼出电话?我正在使用 ACTION_CALL 调用电话 Intent 并将其连接到 PhoneStateListener。

class PlaceCall : AppCompatActivity() {
    private fun outboundCall() {
        val telephonyManager = getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
        telephonyManager.listen(CallListener(context), PhoneStateListener.LISTEN_CALL_STATE)
        val callIntent = Intent(Intent.ACTION_CALL, Uri.parse("tel:" + phoneNumber))
        startActivity(callIntent)
    }
}
CallListener 设置如下:
class CallListener(cont: Context) : PhoneStateListener() {
    private var context: Context = cont
    private var incoming: Boolean = false
    private var prevState: Int = TelephonyManager.CALL_STATE_IDLE

    override fun onCallStateChanged(state: Int, phoneNumber: String?) {
        val audioManager = context.getSystemService(Context.AUDIO_SERVICE) as AudioManager
        when(state) {
            TelephonyManager.CALL_STATE_RINGING -> { incoming = true }
            TelephonyManager.CALL_STATE_IDLE -> {
                if(prevState == TelephonyManager.CALL_STATE_RINGING) { //Missed call?
                }
            TelephonyManager.CALL_STATE_OFFHOOK -> { Log.d("DEBUG", "calling $phoneNumber") }
            }
        }
        prevState = state
    }
}
如果不是成功的电话调用连接,我如何等待确定的时间间隔并再次尝试调用?另外,为什么 phoneNumber 的值是在听者总是空的?

最佳答案

与通过 IDLE 的来电不同。 -> RINGING -> OFFHOOK ,
在外拨电话中,它总是直接从 IDLE 跳转。 -> OFFHOOK即使它正在响起(在另一边)。
因此,如果“成功”是指对方接听的电话,PhoneStateListener不会帮助你,因为当对方接电话时没有发送额外的状态。

Also, why is the value of phoneNumber in the listener always empty?

phoneNumber仅为来电填充,并且仅当您的应用同时具有 READ_CALL_LOGREAD_PHONE_STATE权限,see here .
如果您需要最后一个被叫号码,您可以使用 Calls.getLastOutgoingCall 拨出调用结束后几秒钟的 API。

关于Android 检测到不成功的电话并稍后再试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63126920/

相关文章:

android - 更新注释 API 不起作用

java - Android - 在第一次通话后启动 Intent

android - 中断android中的来电

algorithm - Kotlin - 按类别和子类别排序的列表

android - 双 SIM 卡中的 getAllCellInfo

android - 如何在android 2.2 版本中实现inbox 样式和bigtext 样式通知?

java - Eclipse 中的 Android 源构建失败 - 帐户无法解析为类型

android - 如何将数据库从 SQLiteStudio 传输到 Android 手机?

javascript - 使用 Webview 将对象从 Javascript 发送到 Kotlin

kotlin - 括号和花括号中的Kotlin类属性