3

我读了这篇文章:广播接收器 onReceive() 被多次调用

但我没有找到需要的答案。

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

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

有什么方法可以只调用一次 onReceive() 吗?或任何解决方法?

谢谢你的帮助

4

1 回答 1

5

您的接收器将被呼叫三种不同的状态。在振铃、挂机和空闲状态。

检查 onReceive 中的电话状态。如果它的状态正在响铃,您可能希望中断呼叫并存储在 db 中。

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

   }
于 2013-02-28T08:41:23.003 回答