假设,
我有两个独立的android项目
第一个项目是A,第二个项目是B.
项目A有许多活动类,如a,aa,aaa,aaaa等
项目B还有许多活动类,如b,bb,bbb,bbb等
aa activtiy包含在项目A上。
Boolean foo;
if (request.getParameter("foo") == null)
foo = false;
else
foo = true;
某种程度上,我需要从项目B中检测foo变量的活动aa是真还是假。
在这种情况下,我尝试这样,从项目B,在bb活动类
Intent intent = getPackageManager().getLaunchIntentForPackage(
"com.example.a");
if (intent != null) {
// detect project A
} else {
// detect project B
}
我成功检测到项目A安装。
但我想检测foo对项目B的活动是真还是假。
怎么可能?
答案 0 :(得分:0)
使用Context.createPackageContext()为您感兴趣的Project B的.apk实例化一个包。
Context projectAContext = this.createPackageContext("packageName", Context.CONTEXT_INCLUDE_CODE);
如果使用与项目A相同的证书进行签名,并且两个APK都使用相同的共享用户ID,那么您可以使用该标志将其代码加载到您的进程中,从而允许您从上下文中获取ClassLoader并实例化类你想要的。
例如:
Class projectAClass = projectAContext .getClassLoader().loadClass("packageName.className");
一旦你有一个projectAClass(有foo),你就可以调用一个返回foo值的方法。
projectAClass.getMethod("getfoo", noparams).invoke(projectAClass.newInstance(), null);