Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何抑制新的短信通知?_Java_Android_Notifications_Sms_Broadcastreceiver - Fatal编程技术网

Java 如何抑制新的短信通知?

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

我正在编写自己的SMS messenger,我需要完全抑制默认stock messenger发出的新SMS通知。当然,我正在拦截传入的SMS通知并通过
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
在大多数情况下都可以正常工作,但如果用户在一段时间内没有打开我的通知,那么问题就会出现——比方说几分钟。我怀疑系统触发了另一次广播