我有一个场景,其中有多个活动和一个服务。
当需要从任何URL获取数据时,所有这些活动启动服务(活动的class name
在Intent中传递)并注册BroadcastReceiver
以收听将由服务发送的responseIntent
得到回应。 Service
会将class name
传回意图以及响应。
我已经实现了这个并且它有效。但怀疑的是,从BroadcastReceiver
的{{1}}方法,如何调用接收广播事件的活动方法?
注意:我想处理类引用而不是对象。我试过这个,
onReceive()
但它不起作用。
谢谢。
答案 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[] {});