java – Sms ContentObserver onChange()多次触发
发布时间:2020-05-28 13:32:45 所属栏目:Java 来源:互联网
导读:我知道这个问题已被多次询问,但没有人能够从我所看到的那里得到一个有效的答案. 我正在开发一个应用程序拦截短信,并根据发送#,弹出一个自定义提醒.我使用广播接收器可以很好地工作,但是如果用户安装了goSms,则永远不会调用onReceive()方法,因为goSms在到达我
|
我知道这个问题已被多次询问,但没有人能够从我所看到的那里得到一个有效的答案. 我正在开发一个应用程序拦截短信,并根据发送#,弹出一个自定义提醒.我使用广播接收器可以很好地工作,但是如果用户安装了goSms,则永远不会调用onReceive()方法,因为goSms在到达我的应用程序之前就会中止它. 为了解决这个问题,我在内容上尝试了内容观察者:// sms / 从我所看到的情况来看,这是一个常见的问题,但不是我见过的任何一个问题. @Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
querySMS();
}
protected void querySMS() {
Cursor cur = getContentResolver().query(u,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个消息的小循环缓冲区应该没问题. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
