有没有办法在一段时间后重试未接来电或不成功的呼出电话?我正在使用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
->CCD_ 5,在出站呼叫中,它总是直接从IDLE
->OFFHOOK
,即使它正在振铃(在另一侧(。
因此,如果通过";"成功";你的意思是说对方接听的电话,PhoneStateListener
对你没有帮助,因为对方接听时没有发送额外的状态。
此外,为什么侦听器中phoneNumber的值总是空的?
phoneNumber
仅为传入呼叫填充,并且仅当您的应用程序同时具有READ_CALL_LOG
和READ_PHONE_STATE
权限时,请参阅此处。
如果您需要最后一次呼叫号码,您可以在呼出结束几秒钟后使用Calls.getLastOutgoingCall
API。