如何确定意图持有的捆绑中额外的类型?

时间:2011-08-23 15:20:19

标签: android broadcastreceiver android-intent

我正在尝试通过BroadcastReceiver将任意数据传递给Intent

所以我可能会做类似以下的事情

intent.putExtra("Some boolean", false);
intent.putExtra("Some char", 'a');
intent.putExtra("Some String", "But don't know what it will be");
intent.putExtra("Some long", 15134234124125);

然后将其传递给BroadcastReceiver

我希望使用类似Intent.getExtras()的内容来遍历keySet(),但我还希望能够获得密钥的值,而无需对{{1}等方法进行硬编码调用},或.getStringExtra()

一个人如何做到这一点?

2 个答案:

答案 0 :(得分:18)

您可以使用以下代码从Intent

获取任何时间的对象
Bundle bundle = intent.getExtras();
Object value = bundle.get("key");

然后,您可以使用value的方法确定Object的实际类型。

答案 1 :(得分:4)

您可以使用keySet()在不知道值类型的情况下浏览thye密钥。它会返回一组您可以迭代的String(请参阅doc)。

但对于值,您必须使用类型化方法(getStringExtra()getBooleanExtra()等)是正常的:这是由Java类型本身的类型引起的。

如果您想将任意类型的数据发送到BroadcastReceiver,您应该:

  • 在发送之前将所有额外内容转换为String,并将其全部检索为String s:

    intent.putExtra("Some boolean", "false");
    intent.putExtra("Some char", "a");
    intent.putExtra("Some String", "But don't know what it will be");
    intent.putExtra("Some long", "15134234124125");
    
  • 或使用返回get()的{​​{1}}的{​​{1}}方法(参见doc):

    Bundle