【问题标题】:How do I create an android Intent that carries data?如何创建一个携带数据的android Intent?
【发布时间】:2011-12-22 23:34:13
【问题描述】:

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

我刚刚开始开发一个 android 应用程序,它会不时地轮询我的服务器以获取消息,并且当有新消息可用时,我想将其显示给用户。我正在尝试通过轮询服务器的Service 来实现这一点,当收到新消息时,服务应该将消息提供给显示它的Activity

为了促进这种交流,我正在尝试使用ACTION_VIEW 创建一个Intent,但我不知道如何将消息传递给活动。有没有办法通过 Intent 传递字符串或常规 Java 对象?

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

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

当然,这甚至不能编译。

【问题讨论】:

  • 您是否希望通过重载的 putExtra() 传递键/值对。稍后您可以通过该意图对象上的 getExtras() 访问此数据
  • 而不是轮询...如果可以的话,您可能想尝试推送消息,在手机上进行轮询绝不是一个好主意。但有时我们别无选择。

标签: android android-intent


【解决方案1】:

使用 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)

【讨论】:

  • 这通常是将数据传递给活动的最佳方式。它非常有用,尤其是因为 putExtra() 可以采用自定义的 Serializable 对象。
【解决方案2】:

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

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

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

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 这可能是我最终会做的,但这不是我现在需要问的,所以我决定简化一点 =)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-08
    • 1970-01-01
    • 1970-01-01
    • 2019-03-09
    • 1970-01-01
    相关资源
    最近更新 更多