从通知-Android打开活动

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从通知-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 activity

    notificationIntent.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,但它确保你的意图是不同的。

这个related question有更多的信息。

以上是关于从通知-Android打开活动的主要内容,如果未能解决你的问题,请参考以下文章

Android 通知导航到现有活动

从通知-Android打开活动

从活动向上导航到片段打开相同的片段 - Android 导航组件

如何在android应用程序活动和非活动状态下处理推送通知

Android:单击片段中的按钮时如何通知活动? [复制]

如何使用来自其他活动android的片段打开一个活动