当前位置: 首页 > 面试题库 >

Sms ContentObserver onChange()触发多次

扶开诚
2023-03-14
问题内容

我知道这个问题已经被问过多次了,但是没有人能够从我所看到的问题中得出一个可行的答案。

我正在开发一个应用程序以拦截短信,并根据发送的#弹出自定义提醒。我让它与广播接收器完美配合,但是,如果用户安装了goSms,onReceive()则永远不会调用该方法,因为goSms在它到达我的应用程序之前会中止它。

为了解决这个问题,我尝试在内容观察器上content://sms/
正常工作,但是onChange()使用相同的参数调用了两次。香港专业教育学院试图检查时间戳,但它们是一样的,类型和我设置的每个其他参数也一样。

从我所看到的情况来看,这是一个普遍的问题,但是我所见的任何地方都没有。

    @Override
public void onChange(boolean selfChange) {
    super.onChange(selfChange);
    querySMS();
}

protected void querySMS() {
    Cursor cur = getContentResolver().query(u, null, null, null, null);
    cur.moveToNext(); // this will make it point to the first record, which is the last SMS sent
    String type = cur.getString(cur.getColumnIndex("type"));
    String body = cur.getString(cur.getColumnIndex("body")); //content of sms
    String add = cur.getString(cur.getColumnIndex("address")); //phone num
    if (type.equals("1")) {
        if (add.equals(Test.SENDER)) {              
            String[] bodys = body.split(" ", 7);
            if (bodys[0].equals("test")) {
                test = true;
            }
            cat = bodys[1];
            level = bodys[2];
            urgency = bodys[3];
            certainty = bodys[4];
            carrier = bodys[5];
            message = bodys[6];
            final Intent intent = new Intent(context, AlertActivity.class);
            Bundle b = new Bundle();
            b.putString("title", cat);
            b.putString("certainty", certainty);
            b.putString("urgency", urgency);
            b.putString("level", level);
            b.putString("message", message);
            b.putBoolean("test", test);
            intent.putExtras(b);
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            TelephonyManager manager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
            carrierName = manager.getNetworkOperatorName();
            if (carrierName.replaceAll(" ", "").equals(carrier)) {

                context.startActivity(intent);
            } else {
                //testing
                Toast.makeText(context, carrierName.replaceAll(" ", ""), Toast.LENGTH_LONG).show();
            }
        }
    }
}

由于onChange()被解雇了两次,我也收到了两个警报。我无法为自己的生活找到解决此问题的方法。


问题答案:

如果两者相同:
将收到的每条消息与收到的每条消息
进行比较,
如果未找到,则进行处理,
如果找到,则将其丢弃

存储的消息的寿命应该是无限的,应该有5条消息的循环缓冲区。



 类似资料:
  • 在firebase文档之后构建一个存在的应用程序,有没有这样一个场景,当应用程序仍然连接时,on-disconnect会触发?我们看到存在节点显示应用程序离线,然后在几秒钟内恢复在线,而我们没有失去网络连接。 我们在安装在现场的多个嵌入式设备上看到,存在设置为false,然后几乎立即恢复为true,并且在几秒钟内发生在所有设备上。从我们所做的测试和在线文档中,我们知道如果我们在设备上失去互联网连接

  • 我有一个 Blob 存储容器,其中配置了事件网格触发器(Blob 已创建)。我正在通过数据工厂加载此 blob 存储文件,很多时候,许多文件可能会在一次尝试中出现在此 blob 中。也许我们可以举一个20个文件的例子。 好消息是我的事件网格触发器启动了,函数app被调用。然而,我发现有时对于同一个文件,事件网格触发器被触发了不止一次。 在这20个文件中,很少有文件非常大,比如300 MB,但其他文

  • 我刚开始流口水,遇到了一个问题。 我简化了规则以显示问题: 基本上,我想计算特定路段上发生的事件(路段是道路的一部分)。当同一链接上发生3个事件时,我希望触发规则。 上面的规则几乎起作用了,但是当它发射时,它发射了3次,每个事件发射一次。我只希望它发射一次。 我错过了什么? 非常感谢。

  • 我对TextWatcher有一个恼人的问题。我一直在网上搜索,但什么也找不到。如果有人能帮助我,我将不胜感激。 由于某些原因,在一次文本更改时对TextWatcher事件的调用是不稳定的。有时它们被触发一次(就像它们应该被触发的那样),有时两次,有时三次。不知道为什么,整个事情都很直截了当。有时,PostTextChanged()上的可编辑参数在toString()和length()中返回空值。

  • 我只需要在更新容器中的所有4行时运行函数。我还没有在网上找到任何关于这是否可能的信息。如果你能告诉我这是否可能,如果可能的话,怎么做,那就太好了。

  • 问题内容: 我试图用Javascript编写视频扑克游戏,以降低其基础知识,但是我遇到了一个问题,其中jQuery click事件处理程序多次触发。 它们被附加到用于下注的按钮上,并且对于在游戏过程中第一手下注(仅触发一次)非常有效。但是在秒针下注中,每次按下一个下注或下注按钮都会触发两次点击事件(因此,每次按下正确的赌注量是两次)。总体而言,在按一次下注按钮时,触发单击事件的次数遵循此模式序列的