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

Tom*_*han 30 android android-intent

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

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

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

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

getApplication().startActivity(new Intent(MessageService.this, ViewMessageActivity.class, message));
Run Code Online (Sandbox Code Playgroud)

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

Tel*_*ues 65

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

Intent i = new Intent(MessageService.this, ViewMessageActivity.class);
i.putExtra("name", "value");
Run Code Online (Sandbox Code Playgroud)

并在接收方:

String extra = i.getStringExtra("name");
Run Code Online (Sandbox Code Playgroud)

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

Bundle b = i.getExtras();
Run Code Online (Sandbox Code Playgroud)

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

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

putExtra(String name,Serializable value)

putExtra(String name,Parcelable value)


Nic*_*ick 17

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

    Intent i = new Intent(MessageService.this, ViewMessageActivity.class);
    i.putExtra("message", "value");
    startActivity(i);
Run Code Online (Sandbox Code Playgroud)

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

    Bundle extras = getIntent().getExtras();
    String message = extras.getString("message");
Run Code Online (Sandbox Code Playgroud)