海王  


 

http://topic.csdn.net/u/20110503/12/7bccb06b-aeab-4e26-b1d5-2b1fe90bd7a2.html?seed=1336997130&r=77425386#r_77425386

 

public class Main extends Activity {
    private Button btnTest;
    private TextView tvInfo;
    private int Count; // 未处理的通知个数
    private int Id; // 通知Id

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        InitialControl();
    }

    private void InitialControl() {
        btnTest = (Button) findViewById(R.id.btnTest);
        tvInfo = (TextView) findViewById(R.id.tvInfo);
        //
        btnTest.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                btnTest_Click();
            }
        });
    }

    /**
     * 发出通知
     
*/
    protected void btnTest_Click() {
        Count++;
        Id++;
        String title = String.format("通知: %d", Id);
        String body = String.format("内容: Id=%d, Count=%d", Id, Count);
        Intent intent = new Intent(this, ShowNotify.class);
        intent.putExtra("Count", Count);
        intent.putExtra("Id", Id);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
                intent, 0);
        Notification notification = new Notification();
        notification.icon=R.drawable.icon;
        notification.tickerText = title;
        notification.defaults=Notification.DEFAULT_LIGHTS;
        notification.setLatestEventInfo(this, title, body, pendingIntent);
        notification.number = Count;
        NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        notificationManager.notify(2, notification);
        tvInfo.setText(body);
    }
}

 

 

public class ShowNotify extends Activity { private Button btnClose; private TextView tvInfo; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.shownotify); InitialControl(); ShowNotifyContent(); } private void InitialControl() { btnClose = (Button) findViewById(R.id.btnClose); tvInfo = (TextView) findViewById(R.id.tvInfo); // btnClose.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { btnClose_Click(); } }); } /** * 显示通知内容 */ private void ShowNotifyContent() { NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); notificationManager.cancel(2); Intent intent = getIntent(); int Id = intent.getIntExtra("Id", 0); int Count = intent.getIntExtra("Count", 0); String content = String.format("收到通知: Id=%d, Count=%d", Id, Count); tvInfo.setText(content); } /** * 关闭 */ protected void btnClose_Click() { finish(); } }

 

点击btnTest就可以狂发通知了。但点击通知,进入ShowNotify活动,却总是得到第1个通知的内容。
我的疑问是:
1. 点击最新的通知,ShowNotify怎样才能得到最新的通知内容?
2. 如何当通知被显示后,让Main活动的Count重置为0?

 

想不到还有人来挖这个贴子, 我就大概说一下吧, 方便后来人

如果用相同的通知id, 该怎么告诉处理通知的活动,每个通知的内容呢?
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
intent, PendingIntent.FLAG_UPDATE_CURRENT);
最后一个参数可以保证显示的是最新的那个通知
如果用不同的通知id, 为什么处理通知的活动得到的Intent总是第一个通知的Intent呢?
多个Intent是根据它们的Data属性来区分的,如果Data相同,将认为是同一个Intent
 

 

我刚好也正在找这个问题的解决方法。看到这个帖子。也查了其他,居然没有答案。
查了谷歌的文档。有一个地方被遗漏了。就是
PendingIntent.getActivity(参数若干)这个方法。在其参数的第二个request code。就是用于区别intent的
标识,至少试下来没问题。谷歌文档中写这个request code 是“不使用”。我一开始以为没用。
今天尝试下来发现可以区别各个通知中得intent内容。不然我原来做的程序也和楼主一样,即便通知id不同,
第二第三个通知也会覆盖第一个通知的intent的现象。可能因为context是一样的(程序本身activity)的缘故。
 

 

posted on 2012-07-05 15:53  海王  阅读(653)  评论(0编辑  收藏  举报