Android 防止通过传入意图覆盖我的意图
在我的接收器上,我每秒接收意图,广播发送意图。。。我想防止传入的意图覆盖当前意图,直到我从当前意图获得信息 我的尝试: 。 没有编译错误,也没有运行时错误,但这样可以防止意图只到达第一个意图 更新 试试这个Android 防止通过传入意图覆盖我的意图,android,android-intent,Android,Android Intent,在我的接收器上,我每秒接收意图,广播发送意图。。。我想防止传入的意图覆盖当前意图,直到我从当前意图获得信息 我的尝试: 。 没有编译错误,也没有运行时错误,但这样可以防止意图只到达第一个意图 更新 试试这个 if (readytoReceive){ readytoReceive=false; // stop incoming Intent Bundle bundle = intent.getExtras(); if (bundle != null) { // g
if (readytoReceive){
readytoReceive=false; // stop incoming Intent
Bundle bundle = intent.getExtras();
if (bundle != null) { // get info.
{
SendRandom.incom.setFrom(bundle.get("From").toString());
SendRandom.incom.setTo(bundle.get("To").toString());
SendRandom.incom.setTogender(bundle.get("toGender").toString());
SendRandom.incom.my_gender = bundle.get("SenderGender").toString();
SendRandom.incom.type = bundle.getInt("msgType");
SendRandom.incom.url = bundle.get("url").toString();
SendRandom.incom.userID = bundle.get("SenderID").toString();
SendRandom.incom.setTime(bundle.getString("Time"));
SendRandom.incom.setBody(bundle.get("body").toString());
Log.d("SOMAA", "Receiver Received: " + SendRandom.incom.getBody() + " type: " + SendRandom.incom.type);
MessagesHandler(SendRandom.incom, SendRandom.incom.type);
}
}
readytoReceive=true; // now let the new intent to come
}
更新
替换为
LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcastSync(messagesI);
我唯一能想到的是readyToReceive=true;永远不会被击中。逐步使用调试器,看看会发生什么。你说广播是每秒发送一次的吗。如果是这样的话,那么我担心的是,在处理当前广播时,您认为需要阻止后续广播。如果onReceive花费的时间超过1秒。。。要完成,那么你就做错了。收到的邮件。。。方法所做的工作应该尽可能少-即使几百毫秒也可能被认为是一段很长的时间来完成。同样的:在几条消息之后,它停止接收!
t.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
try {
if ((incom = (Message) SendRandom.ObjectInServercht.readUnshared()) != null) {
Log.e("ESMOA", "Recived : incomming messages!!!" + incom.getBody());
Intent messagesI = new Intent("Messages");
messagesI.putExtra("body", incom.getBody());
messagesI.putExtra("From", incom.getFrom());
messagesI.putExtra("To", incom.getTo());
messagesI.putExtra("toGender", incom.getTogender());
messagesI.putExtra("SenderGender", incom.my_gender);
messagesI.putExtra("msgType", incom.type);
messagesI.putExtra("url", incom.url);
messagesI.putExtra("SenderID", incom.userID);
messagesI.putExtra("Time", incom.getTime());
messagesI.putExtra("TEXT", "TEXT");
messagesI.setAction("com.esmaeel.incomIM");
if(incom.type==MessageType.TextMessage)
pushNotification(incom);
LocalBroadcastManager.getInstance(seekNet.this).sendBroadcastSync(messagesI);
Log.d("SOMAA", "sendBroadcast!! " + incom.type + " " + incom.getBody());
}
} catch (IOException e) {
Log.d("SOMAA", "No brodcast!! " + e.getMessage());
e.printStackTrace();
} catch (ClassNotFoundException e) {
Log.d("SOMAA", "No brodcast!! " + e.getMessage());
e.printStackTrace();
}catch(NullPointerException nu){
Log.d("SOMAA","incom is null!!");
}
}
}, 0, 10); << I need faster broadcasting so changed from 1000 (1 sec) to 10, (1/100 sec)
if (readytoReceive){
readytoReceive=false; // stop incoming Intent
Bundle bundle = intent.getExtras();
if (bundle != null) { // get info.
{
SendRandom.incom.setFrom(bundle.get("From").toString());
SendRandom.incom.setTo(bundle.get("To").toString());
SendRandom.incom.setTogender(bundle.get("toGender").toString());
SendRandom.incom.my_gender = bundle.get("SenderGender").toString();
SendRandom.incom.type = bundle.getInt("msgType");
SendRandom.incom.url = bundle.get("url").toString();
SendRandom.incom.userID = bundle.get("SenderID").toString();
SendRandom.incom.setTime(bundle.getString("Time"));
SendRandom.incom.setBody(bundle.get("body").toString());
Log.d("SOMAA", "Receiver Received: " + SendRandom.incom.getBody() + " type: " + SendRandom.incom.type);
MessagesHandler(SendRandom.incom, SendRandom.incom.type);
}
}
readytoReceive=true; // now let the new intent to come
}
LocalBroadcastManager.getInstance(seekNet.this).sendBroadcastSync(messagesI);
LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcastSync(messagesI);