如何从另一个android应用程序编程访问/检测特定的活动变量



假设,我有两个独立的android项目
第一个项目是A,第二个项目是B。
项目A有许多活动类,如A、aa、aaa、aaaa等。
项目B也有许多活动类,如B、bb、bbb、bbb等。
活动包含项目A.

Boolean foo;
if (request.getParameter("foo") == null)
    foo = false;
else
    foo = true;

不知何故,我需要从项目B中检测活动aa的foo变量是否为true或false。
在这种情况下,我试着这样做,来自项目B,在bb活动类中

Intent intent = getPackageManager().getLaunchIntentForPackage(
                    "com.example.a");
            if (intent != null) {
                // detect project A
            } else {
// detect project B
}

我检测到项目A安装是否成功

但我想检测项目B中aa活动的foo是真是假。
怎么可能?

使用Context.createPackageContext()为您感兴趣的项目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);

最新更新