如何创建一个携带数据的android Intent?

我可能误解了应该如何使用意图,所以我可能在这里问错了。 如果是这样的话,无论如何都请帮助我走上正轨……

我刚刚开始研究一个Android应用程序,它会经常轮询我的服务器上的消息,当有新消息可用时,我想向用户显示它。 我试图通过使用轮询服务器的Service来实现这一点,并且当收到新消息时,服务应该将消息提供给显示它的Activity

为了促进这种沟通,我正在尝试使用ACTION_VIEW创建一个Intent ,但我无法弄清楚如何将消息提供给活动。 有没有办法通过意图传递字符串或常规Java对象?

对于它的价值,这就是我想做的事情:

 getApplication().startActivity(new Intent(MessageService.this, ViewMessageActivity.class, message)); 

但当然,这甚至都没有编译。

使用Intent包添加额外信息,如下所示:

 Intent i = new Intent(MessageService.this, ViewMessageActivity.class); i.putExtra("name", "value"); 

并在接收方:

 String extra = i.getStringExtra("name"); 

或者,将所有附加内容作为捆绑包,与types无关:

 Bundle b = i.getExtras(); 

putExtra()方法有各种签名,各种方法根据types获取数据。 你可以在这里看到更多: Intent , putExtra 。

编辑:要传递一个对象,它必须实现Parcelable或Serializable ,因此您可以使用以下签名之一:

putExtra(String name,Serializable value)

putExtra(String name,Parcelable value)

您可以执行以下操作以将信息添加到intent bundle中:

  Intent i = new Intent(MessageService.this, ViewMessageActivity.class); i.putExtra("message", "value"); startActivity(i); 

然后在活动中,您可以像这样检索:

  Bundle extras = getIntent().getExtras(); String message = extras.getString("message"); 

每次收到新消息时,从您的服务启动活动可能不是您想要的。 例如,如果您正在查看其他活动,则会被新邮件中断。

您可以使用sendBroadcast(intent)和BroadcastReceiver来通知活动已收到新消息。