onReceive 被多次调用

3

我看了这篇文章:Broadcast receiver onReceive() getting called multiple times

但是我没有找到所需的答案。

我创建了一个小工具函数,覆盖BroadcastReceiver的onReceive()方法,并根据某些条件拒绝来电(这个功能运作良好)。

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

是否有任何方法可以使onReceive()仅被调用一次?或任何解决方法?

感谢您的任何帮助。

1个回答

6

你的接收器将被调用三种不同的状态:响铃、挂机和空闲状态。

在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;
     }

   }

是的,你说得对。但它只被调用了两次。
  1. 当接收到呼叫时
  2. 取消呼叫后
谢谢,我现在会相应地检查条件。还有关于以上代码在其他手机和各种操作系统上成功运行的想法吗?
- Darshan Bidkar
1
@Rasel 的 bundle 变成 null 了。这是什么原因? - nAkhmedov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接