我可能误解了应该如何使用意图,所以我可能在这里问错了。如果是这样的话,无论如何都请帮助我走上正确的道路......
我刚刚开始研究一款Android应用程序,它会经常轮询我的服务器以获取消息,当有新消息可用时,我想向用户显示它。我试图通过使用Service
来轮询服务器来实现此功能,并且当收到新消息时,服务应该将消息发送给显示它的Activity
。
为方便此次沟通,我尝试使用Intent
创建ACTION_VIEW
,但我无法弄清楚如何向活动发送消息。是否无法通过intent传递字符串或常规Java对象?
对于它的价值,这就是我想要做的事情:
getApplication().startActivity(new Intent(MessageService.this, ViewMessageActivity.class, message));
但当然,这甚至无法编译。
答案 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()
方法有各种签名,各种方法根据类型获取数据。您可以在此处查看更多内容:Intent,putExtra。
编辑:要传递对象,必须实施Parcelable或Serializable,以便您可以使用以下签名之一:
答案 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通知活动已收到新邮件。