Java 如何抑制新的短信通知?
我正在编写自己的SMS messenger,我需要完全抑制默认stock messenger发出的新SMS通知。当然,我正在拦截传入的SMS通知并通过Java 如何抑制新的短信通知?,java,android,notifications,sms,broadcastreceiver,Java,Android,Notifications,Sms,Broadcastreceiver,我正在编写自己的SMS messenger,我需要完全抑制默认stock messenger发出的新SMS通知。当然,我正在拦截传入的SMS通知并通过Broadcast.abortBroadcast()中止Broadcast,例如: public void onReceive(Context context, Intent intent) { Map<String, String> msgs = retrieveMessages(intent); fo
Broadcast.abortBroadcast()
中止Broadcast
,例如:
public void onReceive(Context context, Intent intent) {
Map<String, String> msgs = retrieveMessages(intent);
for (String address : msgs.keySet()) {
String msg = msgs.get(address);
Log.i(TAG, "New sms received=" + msg);
//saving message in phone
Message message = Message.createIncomingMessage(address, msg);
message.setSeen(1); ////mark message seen, so stock messenger couldn't arose notification
message.setRead(1); //mark message read, so stock messenger couldn't report it as unread
message.setUnread(true); //mark message unread for our messenger
message = Me.getMe().getMessageDAO().save(context, message); //saving message
SmsReceiver.updateNotification(context, message, true, true); //raise notification from "our" messenger
}
//aborting default broadcast, since everything already done and no need to do more
this.abortBroadcast();
}
public void onReceive(上下文、意图){
Map msgs=检索消息(意图);
for(字符串地址:msgs.keySet()){
字符串msg=msgs.get(地址);
Log.i(标签,“收到新短信=”+msg);
//在手机中储存信息
Message Message=Message.createIncomingMessage(地址,msg);
message.setSeen(1);///标记已看到消息,因此stock messenger无法发出通知
message.setRead(1);//将消息标记为已读,以便stock messenger无法将其报告为未读
message.setUnread(true);//为我们的messenger标记消息未读
message=Me.getMe().getMessageDAO().save(上下文,消息);//保存消息
更新通知(上下文、消息、true、true);//从“我们的”messenger发出通知
}
//中止默认广播,因为所有操作都已完成,无需执行更多操作
这个.abortBroadcast();
}
一切都按计划进行。但每当我通过Me.getMe().getMessageDAO().save(上下文,消息)将新短信插入数据库时代码>几秒钟内,stock messenger会收到有关数据库中新消息的通知,并再次引发通知
问题是:如何抑制此通知?首先,您需要设置接收器的优先级
其次,在执行繁重的处理任务(存储到数据库中)之前,请调用abortBroadCast
或者您可以尝试将db存储在线程中,启动线程并立即调用abortBroadcast()
。1)我已经设置了优先级最高优先级2)abortBroadcast
在大多数情况下都可以正常工作,但如果用户在一段时间内没有打开我的通知,那么问题就会出现——比方说几分钟。我怀疑系统触发了另一次广播