AlarmReceiver - 获取正在运行的活动的实例并使用forName调用方法

时间:2013-12-05 00:15:46

标签: java android reflection cordova

我想创建一个我可以轻松共享和重用的插件,但是因此我不知道主应用程序的包或活动名称。到目前为止,我可以从代码中获取所有这些信息。我的问题是我有接收器,如果它正在运行,需要在主应用程序活动上调用一个方法。这是我到目前为止的地方:

  • 我的应用程序创建了一个警报,我在共享首选项中保存了应用程序活动的名称(这有效):

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

0 个答案:

没有答案