有没有办法在一段时间后重试错过或不成功的呼出电话?我正在使用 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_LOG
和 READ_PHONE_STATE
权限,see here .如果您需要最后一个被叫号码,您可以使用
Calls.getLastOutgoingCall
拨出调用结束后几秒钟的 API。
关于Android 检测到不成功的电话并稍后再试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63126920/