0

我有一个由两部分组成的应用程序

1-一系列活动。(登录,然后是仪表板,然后是提要)。2-由推送服务器驱动的后台服务。

每次服务收到推送时,都会创建一个带有待处理 Intent 的通知,此 Intent 添加从推送服务器接收到的字符串附加内容示例:添加字符“N”或“R”

现在,在安装服务应用程序并第一次运行后,附加内容会正确发送到意图中,但是每次服务器通过意图向应用程序发送消息时,附加内容都不会改变,即

如果第一条消息发送“N”,那么所有后续消息都将发送“N”。

由于上面的描述太复杂,我会给你我的代码片段:

这是服务中的代码,它使用挂起的 Intent 创建通知

    Notification n = new Notification();            
    n.flags |= Notification.FLAG_SHOW_LIGHTS;
    n.flags |= Notification.FLAG_AUTO_CANCEL;
    n.defaults = Notification.DEFAULT_ALL;      
    n.when = System.currentTimeMillis();
    // The following line displays N or R depending on the message received . 
    Log.d("Received Type: ",text.substr(0,1); // Example "N" from: "N|Notification Text"

    n.icon = R.drawable.notification_icon;
    Intent i = new Intent(this, MyActivity.class);
    i.putExtra("type", text.substr(0,1);
i.putExtra("text", text.substr(2);
    PendingIntent pi = PendingIntent.getActivity(this, 0, i , 0);
    n.setLatestEventInfo(this, NOTIF_TITLE, "Notification: " + text.substring(2), pi);

现在这是从意图接收数据的活动

    super.onCreate(savedInstanceState);
setContentView(R.layout.mylayout);
activeWebview  = (WebView) findViewById(R.id.webview);

Intent sender=getIntent();
type = sender.getStringExtra("type");   // Assume this is defined somewhere
text = sender.getStringExtra("text");   // Assume this is defined somewhere
    Log.d( "Type received:" , type );  // This everytime displays "N" 

我的问题是,每次收到新通知时,意图中发送的 Extras 都是相同的,除非我终止应用程序和服务并重新启动它,否则它永远不会改变。

好像它保存在内存中的某个地方,我需要清理它

4

2 回答 2

1

我想解决方案在这部分:

PendingIntent pi = PendingIntent.getActivity(this, >>>> 0 <<<<< , i , 0);

需要为每种不同类型的通知更改此 0

于 2012-07-31T21:52:08.610 回答
1

您需要在待处理的意图中添加标志:

PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_UPDATE_CURRENT

PendingIntent pi = PendingIntent.getActivity(this, 0 , i , PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_UPDATE_CURRENT);

否则额外内容不会更新。 http://developer.android.com/reference/android/app/PendingIntent.html#FLAG_CANCEL_CURRENT

于 2013-02-08T06:13:35.763 回答