繁体   English   中英

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

[英]Android detect unsuccessful phone call and try again later

有没有办法在一段时间后重试错过或不成功的呼出电话? 我正在使用ACTION_CALL意图发起电话呼叫并将其连接到 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不会帮助您,因为对方接听时不会发送额外的 state。

另外,为什么监听器中phoneNumber的值总是空的?

phoneNumber仅为来电填充,并且仅当您的应用同时具有READ_CALL_LOGREAD_PHONE_STATE权限时, 请参见此处

如果您需要最后一个被叫号码,您可以在拨出电话结束几秒钟后使用Calls.getLastOutgoingCall API。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM