我想创建一个我可以轻松共享和重用的插件,但是因此我不知道主应用程序的包或活动名称。到目前为止,我可以从代码中获取所有这些信息。我的问题是我有接收器,如果它正在运行,需要在主应用程序活动上调用一个方法。这是我到目前为止的地方:
我的应用程序创建了一个警报,我在共享首选项中保存了应用程序活动的名称(这有效):
PackageManager manager = context.getPackageManager();
String packageClassName = manager.getLaunchIntentForPackage(context.getPackageName()).getComponent().getClassName();
// store the packageClassName in shared prefs
然后,在我的闹钟接收器中,我能够成功检索班级名称。然后,我遍历所有正在运行的任务,以查看是否正在运行具有相同名称的活动。这没有问题。
如果在正在运行的任务列表中找到活动,我需要在活动实例上调用一个方法。这就是我被困的地方 - 我在object is not an instance of class
上一直收到invoke
错误。我正在使用反射(为了简洁而删除了try / catch块):
// get packageClassName from shared prefs
// loop over running tasks (ActivityManager -> getRunningTasks)
// if a tasks "topActivity" matches my packageClassName, then proceed...
Class<?> appClass = Class.forName( packageClassName );
Method isActiveMethod = appClass.getMethod( "isAppActive" );
// The following doesn't work b/c "activity" is not an instance of my app
Boolean isActive = (Boolean)isActiveMethod.invoke( activity );