我读过这篇文章:Broadcast receiver onReceive() getting called multiple times
但我找不到所需的答案。
我创建了一个小实用程序函数,它覆盖了BroadcastReceiver的onReceive(),并根据某些条件拒绝来电(工作正常)。
现在一旦所有条件匹配并且我拒绝该呼叫,我想将该号码存储在数据库中(这也是一项简单的任务)。一旦拒绝来电,我想将号码保存在数据库中。但是在日志中我观察到,一旦有来电,onReceive函数会被多次调用。如果是这种情况,我不希望在我的数据库中有多个条目。
是否有任何方法只能调用onReceive()一次?或者任何解决方法?
感谢您的帮助
答案 0 :(得分:5)
你的接收器将被调用三个不同的状态。振铃,挂机和空闲状态。
检查onReceive中的电话状态。如果状态正在响铃,您可能希望切断呼叫并存储在数据库中。
public void onReceive(final Context context, Intent intent) {
Bundle bundle = intent.getExtras();
if (null == bundle) {
return;
}
String state = bundle.getString(TelephonyManager.EXTRA_STATE);
if (TelephonyManager.EXTRA_STATE_RINGING.equalsIgnoreCase(state)) {
//cut the call and store in db
return;
}
}
if(TelephonyManager.EXTRA_STATE_IDLE.equalsIgnoreCase(state)) {
return;
}
if(TelephonyManager.EXTRA_STATE_OFFHOOK.equalsIgnoreCase(state)){
return;
}
}