2011-08-23 51 views
8

我试图通过其Intent传递任意数据到BroadcastReceiver如何确定意图持有的捆绑包中的额外类型?

所以我可能会做类似下面

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()迭代,但我也希望能够获得密钥的价值,而不必将方法硬编码为.getStringExtra().getBooleanExtra()

一个人怎么做到这一点?

回答

15

您可以使用下面的代码从Intent得到任何时候的对象:

Bundle bundle = intent.getExtras(); 
Object value = bundle.get("key"); 

然后你就可以判断小号方法value“使用Object真实类型”。

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"); 
    
  • ,或者使用返回Object S上的Bundleget()方法(参见doc):

    Object o = bundle.get(key)