【问题标题】:How to determine the type of an extra in a bundle held by intent?如何确定意图持有的捆绑包中额外的类型?
【发布时间】:2011-08-23 15:20:19
【问题描述】:

我正在尝试通过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

我想用keySet() 之类的东西遍历Intent.getExtras(),但我也希望能够获得键的值,而不必对.getStringExtra() 或@987654328 等方法的调用进行硬编码@。

一个人是怎么做到的?

【问题讨论】:

    标签: android broadcastreceiver android-intent


    【解决方案1】:

    您可以使用以下代码从Intent获取任何时间的对象:

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

    然后你可以使用Object的方法来确定value的真实类型。

    【讨论】:

      【解决方案2】:

      您可以在不知道值类型的情况下使用keySet() 浏览您的键。它会返回一组String,您可以对其进行迭代(参见doc)。

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

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

      • 在发送之前将所有额外内容转换为Strings,并将它们全部检索为Strings:

        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");
        
      • 或使用返回Objects 的Bundle 的get() 方法(参见doc):

        Object o = bundle.get(key)
        

      【讨论】:

        猜你喜欢
        • 2020-12-21
        • 1970-01-01
        • 2012-06-21
        • 2012-01-08
        • 2016-02-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-10
        相关资源
        最近更新 更多