我正在尝试通过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()
。
一个人如何做到这一点?
答案 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