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

时间:2011-12-22 23:34:14

标签: android android-intent

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

我刚刚开始研究一款Android应用程序,它会经常轮询我的服务器以获取消息,当有新消息可用时,我想向用户显示它。我试图通过使用Service来轮询服务器来实现此功能,并且当收到新消息时,服务应该将消息发送给显示它的Activity

为方便此次沟通,我尝试使用Intent创建ACTION_VIEW,但我无法弄清楚如何向活动发送消息。是否无法通过intent传递字符串或常规Java对象?

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

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

但当然,这甚至无法编译。

3 个答案:

答案 0 :(得分:63)

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

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

在接收方:

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

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

Bundle b = i.getExtras();

putExtra()方法有各种签名,各种方法根据类型获取数据。您可以在此处查看更多内容:IntentputExtra

编辑:要传递对象,必须实施ParcelableSerializable,以便您可以使用以下签名之一:

putExtra(String name, Serializable value)

putExtra(String name, Parcelable value)

答案 1 :(得分:17)

您可以执行以下操作将信息添加到意图包中:

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

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

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

答案 2 :(得分:1)

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

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