从通知-Android打开活动

大鹏一日同风起,扶摇直上九万里。这篇文章主要讲述从通知-Android打开活动相关的知识,希望能为你提供帮助。
我在我的服务类中使用GCMBaseIntentService扩展GCMBaseIntentService我重写方法onMessage(Context,Intent)。代码在这里:

protected void onMessage(Context context, Intent intent) { Log.i(TAG, "Received message"); //String message = getString(R.string.gcm_message); String id=intent.getExtras().getString("event_id"); String message=intent.getExtras().getString("title"); String eventname=intent.getExtras().getString("event_name"); generateNotification(getApplicationContext(), id, message, eventname); }private static void generateNotification(Context context, String id, String message, String eventname) { int icon = R.drawable.ic_stat_gcm; long when = System.currentTimeMillis(); NotificationManager notificationManager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE); Notification notification = new Notification(icon, message, when); //new intent Intent notificationIntent = new Intent(context, EventDescription.class); notificationIntent.putExtra("event_id", id); //need this id in the eventdescription activitynotificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); PendingIntent intent = PendingIntent.getActivity(context, 0, notificationIntent, 0); notification.setLatestEventInfo(context, eventname, message, intent); notification.flags |= Notification.FLAG_AUTO_CANCEL; notificationManager.notify(0, notification); }

问题是,当我点击此通知并在Eventdescription活动中,从intent中提取额外内容并打印ID。它仅在第一次显示正确的值,之后每个通知它始终显示第一个值。请帮忙!
答案
notificationIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

另一答案
protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.notificationsfinal); start=1; end=15; next=(Button)findViewById(R.id.nextbtn); prev=(Button)findViewById(R.id.prevbtn); statusview=(TextView)findViewById(R.id.status); notification_list_view=(ListView)findViewById(R.id.not_listview); updatestatus(); getNotifications(); } private void getNotifications() { eventnotifierapp app=(eventnotifierapp)getApplication(); id=getIntent().getExtras().getString("event_id"); db=new MyDB(this); }

这是我的EventDescription活动,我正在检索此event_id
另一答案试试这个
PendingIntent intent = PendingIntent.getActivity(context, **uniqueKey**, notificationIntent, 0);

请注意,Pending intent的getActivity的requestCode应该是唯一的。所以只是通过
每个通知的唯一值。您可以设置时间戳或甚至您收到的ID
从服务器。我试过这个,这很有效。请分享您的反馈意见
另一答案你后来的Intents差别不大,所以它们被回收了。具体而言,从系统的角度来看,更改extras并不会产生明显的意图。
Intent.filterEquals的文档解释了您需要更改以下一项或多项:操作,数据,类型,类和类别。因此,一种方法是将一些区别信息(在您的情况下为event_id)粘贴到数据URI中; 你没有必要使用这个URI,但它确保你的意图是不同的。
【从通知-Android打开活动】这个related question有更多的信息。

    推荐阅读