我想在Android应用程序中实现呼叫注册的功能。为此,我以这种方式实现了BroadcastReceiver:
TelephonyManager.CALL_STATE_RINGING
}
正如您所见,在接收事件中,我正在注册PhoneStateListener,它开始监视更改的呼叫状态。
重启应用程序正常工作后,Firts呼叫电话。我可以按预期看到事件:
TelephonyManager.CALL_STATE_IDLE
然后
TelephonyManager.CALL_STATE_IDLE
如果没有摘机事件。
但在第二次通话后,我可以看到事件正在加倍。我可以看到callMonitoring.clearState()
的事件的两倍和三倍。并且似乎这些事件在独立线程中处理,因为Log.d("MyPhoneListener","api params: phone [" + incomingNumber + "]; duration [" + duration + "]; callType [" + callType.getCallType() + "]; callStatus [" + callStatus.getCallStatus() + "]");.
不会阻止第二个字符串{{1}}
如何“重置”BroadcastReceiver的状态?
或者我可能错过了一些错误的东西?
答案 0 :(得分:0)
你混淆了两件事。 1. PhoneStateListener API,正在运行的应用程序可以使用它来监视各种电话状态项。 2. phone state broadcast,可以由正在运行或未运行的应用程序使用,以通知电话状态的更改。
您不应该以这种方式在BroadcastReceiver中注册PhoneStateListener。看看ACTION_PHONE_STATE_CHANGED广播是如何工作的;这应该足以实现你的目标。