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);
}
}
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?
我的疑问是:
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
如果用相同的通知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)的缘故。
查了谷歌的文档。有一个地方被遗漏了。就是
PendingIntent.getActivity(参数若干)这个方法。在其参数的第二个request code。就是用于区别intent的
标识,至少试下来没问题。谷歌文档中写这个request code 是“不使用”。我一开始以为没用。
今天尝试下来发现可以区别各个通知中得intent内容。不然我原来做的程序也和楼主一样,即便通知id不同,
第二第三个通知也会覆盖第一个通知的intent的现象。可能因为context是一样的(程序本身activity)的缘故。