如何使用Intent传递类引用(不是对象)?

时间:2013-06-17 12:23:57

标签: android android-intent service android-activity broadcastreceiver

我有一个场景,其中有多个活动和一个服务。 当需要从任何URL获取数据时,所有这些活动启动服务(活动的class name在Intent中传递)并注册BroadcastReceiver以收听将由服务发送的responseIntent得到回应。 Service会将class name传回意图以及响应。

我已经实现了这个并且它有效。但怀疑的是,从BroadcastReceiver的{​​{1}}方法,如何调用接收广播事件的活动方法?

注意:我想处理类引用而不是对象。我试过这个,

onReceive()

但它不起作用。

谢谢。

3 个答案:

答案 0 :(得分:0)

您无法通过Intent传递对象引用。想象一下,Parcelable对象就像Serializable个对象一样,它们的引用都会丢失。

您应该在BroadcastReceiver中将Activity声明为内部班级,然后您将引用随附的Activity。这是做到这一点的方法。

答案 1 :(得分:0)

您需要将完整的包名称添加到'ClassName'字符串中,如下所示:

Class<?> thisActivity = Class.forName(intent.getStringExtra("com.android.youapp.ClassName"));

注意:如果此类位于不同的库项目中,则应相应地设置字符串名称。

答案 2 :(得分:0)

你是如何获得你的类名的,你试图从Intent&#34; ClassName&#34;中提取?

准备意图:

Intent i = new Intent(....);
String className = MyClass.class.getCanonicalName();
i.putExtra(CLASS_NAME, className);

提取意图内容:

String canName = intent.getStringExtra(CLASS_NAME);
mClientClass = Class.forName(canName);
java.lang.reflect.Methodm m = mClientClass.getMethod("hello", new Class[] {});

获得结果:

Object result = m.invoke(mClientClass, new Object[] {});