onReceive多次被调用

时间:2013-02-28 08:31:55

标签: android broadcastreceiver

我读过这篇文章:Broadcast receiver onReceive() getting called multiple times

但我找不到所需的答案。

我创建了一个小实用程序函数,它覆盖了BroadcastReceiver的onReceive(),并根据某些条件拒绝来电(工作正常)。

现在一旦所有条件匹配并且我拒绝该呼叫,我想将该号码存储在数据库中(这也是一项简单的任务)。一旦拒绝来电,我想将号码保存在数据库中。但是在日志中我观察到,一旦有来电,onReceive函数会被多次调用。如果是这种情况,我不希望在我的数据库中有多个条目。

是否有任何方法只能调用onReceive()一次?或者任何解决方法?

感谢您的帮助

1 个答案:

答案 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;
     }

   }