Android应用程序使用BroadcastReceiver正确的方式

时间:2018-05-16 12:11:48

标签: android broadcastreceiver

我想在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的状态?

或者我可能错过了一些错误的东西?

1 个答案:

答案 0 :(得分:0)

你混淆了两件事。 1. PhoneStateListener API,正在运行的应用程序可以使用它来监视各种电话状态项。 2. phone state broadcast,可以由正在运行或未运行的应用程序使用,以通知电话状态的更改。

您不应该以这种方式在BroadcastReceiver中注册PhoneStateListener。看看ACTION_PHONE_STATE_CHANGED广播是如何工作的;这应该足以实现你的目标。