如何以编程方式从另一个Android应用程序访问/检测特定活动变量?

时间:2015-02-15 07:08:32

标签: java android sdk

假设, 我有两个独立的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的活动是真还是假。
怎么可能?

1 个答案:

答案 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);