Sms ContentObserver onChange()触发多次

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

我正在开发一个应用程序以拦截短信,并根据发送的#弹出自定义提醒。我让它与广播接收器完美配合,但是,如果用户安装了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条消息的循环缓冲区。

以上是 Sms ContentObserver onChange()触发多次 的全部内容, 来源链接: utcz.com/qa/421806.html

回到顶部