Android - 如何发送带有指示要加载哪个活动的GCM推送通知?

6

我能够创建推送通知,但目前只能让用户跳转到主屏幕。

我该如何让用户跳转到特定的活动(Activity)?是否可以添加一些参数,例如item_id,以便活动(Activity)知道要加载什么数据?

或者如果有一个好的教程,在哪里可以找到,那就太好了。我在谷歌上搜索似乎没有找到太多有用的信息。

在我的 GCMIntentService 中,我有这个方法:

      @Override
      protected void onMessage(Context ctxt, Intent message) 
      {           
        Bundle extras=message.getExtras();

        try
        {
            String question_id = extras.getString("question_id");
//          SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences( this );
//          Intent intent = new Intent(ctxt, QuestionActivity.class);

            generateNotification(ctxt, extras.getString("message"), "New Message"  );           
        }
        catch ( Exception e )
        {
        }
      }

但我不确定如何更改generateNotification,以便还可以指示人们应该登陆哪个Activity。

谢谢!
2个回答

10

更新:

请给Eran关于JSON的功劳,我只是想详细说明一下。

你可以使用"data"键添加其他参数:

{
   "registration_ids" : ["APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx..."],
   "data": {
       "stuff": "100",
       "more": "abc"
   },
}

然后使用 intent.getExtras().getString("stuff") 来以同样的方式访问。

所有内容都在这里

然后在你的generateNotifcation()中:

private static void generateNotification(Context context, String message) {
    NotificationManager notificationManager = (NotificationManager)
        context.getSystemService(Context.NOTIFICATION_SERVICE);
    Notification notification = new Notification(R.drawable.ic_launcher, message, when);
    String title = "...";


    //get id from json here and decide which activity to go to...
    Intent notificationIntent = new Intent(context, someClass.class);


    notificationIntent.putExtra("message",message);
    PendingIntent intent = PendingIntent.getActivity(context, 0, notificationIntent,PendingIntent.FLAG_UPDATE_CURRENT);
    notification.setLatestEventInfo(context, title, message, intent);
    notification.defaults|=Notification.DEFAULT_VIBRATE;
    notificationManager.notify(0, notification);
}

实际上只有一个问题:一旦我发送并解析了额外的参数,我该如何将其保存到类似SharedPreferences的东西中? - Genadinik
实际上我可能告诉你错了。我现在在用手机,等我回到电脑旁我会更新。很抱歉会尽快更新。 - Ryan
谢谢...我认为在通知中发送id从服务器是有意义的。我刚刚实现了这个功能。关键是如何在调用generateNotification(ctxt, extras.getString("message"), "New Message")时指定要转到哪个Activity。 - Genadinik
你能从 generateNotification 中解析出 id,然后创建一个意图 intent = new Intent(ctxt, someClass.class),其中 someClass 根据 id 的不同而改变吗? - Ryan
是的,我可以这样做,但方法定义是(Context、String、String)……除非我没有看到另一个选项。如果我们将意图传递给它,这个调用会是什么样子? - Genadinik
我正在努力弄清楚它。我需要离开几个小时,但我今天稍后会回来继续尝试。我会在那时候尝试,并在此发布一些结果。谢谢 :) - Genadinik

3
当然,您可以添加一个像 item_id 这样的参数。通知中可以添加任何想要的参数。与苹果推送通知不同,没有预定义的载荷参数,因此,就像您有一个 message 参数一样,您可以有任何其他带有字符串值的参数(只要参数名称和值的总长度不超过4096个字节)。
至于从通知中加载活动,您可以在此处找到需要的一切信息:here

谢谢你们。你们都非常有帮助 :) - Genadinik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接