Xposed:如何获得迷上了应用程序的上下文?

时间:2017-01-18 02:07:09

标签: android xposed

与标题一样,我想挂钩第三个应用程序,并可以从第三个应用程序的活动中调用我的应用程序活动。所以我想得到第三个应用程序的上下文,我该怎么办?

第三个应用程序包是$q.when,我的项目包是com.ss.android.gallery.heavy;

My Xposed Module.java(这里的MainActivity是我的项目活动)

com.example.hao.hookstartupinterfacetest

SplashActivity.class(它位于第三个应用程序中,MainActivity属于第三个应用程序。)

XposedHelpers.findAndHookMethod("com.ss.android.gallery.heavy.activity.SplashActivity",
                loadPackageParam.classLoader, "getMainIntent", new XC_MethodReplacement() {
                    @Override
                    protected Object replaceHookedMethod(MethodHookParam methodHookParam) throws Throwable {
                        Context context = (Activity)methodHookParam.getResult();
                        return new Intent(context, MainActivity.class);
                    }
                });

错误

   public class SplashActivity extends BaseSplashActivity{
       protected Intent getMainIntent(){
           return new Intent(this, MainActivity.class);
       }
   }

2 个答案:

答案 0 :(得分:2)

您正试图直接使用隐藏应用的上下文启动您的应用活动,这不起作用,因为该活动实际上并不是挂钩应用的一部分(因此"不是在AndroidManifest.xml中定义"错误)。在创建意图时,您必须明确指定您的应用包和类的全名:

Intent intent = new Intent();
intent.setClassName(
    // Your app's package name
    "com.example.hao.hookstartupinterfacetest",
    // The full class name of the activity you want to start
    "com.example.hao.hookstartupinterfacetest.MainActivity");
return intent;

您还应该在android:exported内将MainActivity的{​​{1}}属性设置为true,以便可以通过已启用的应用启动它。

此外,AndroidManifest.xml应该是Context context = (Activity)methodHookParam.getResult();,尽管您实际上并不需要使用此方法。

答案 1 :(得分:1)

如果你想从一个钩子方法开始一个活动,你可以使用以下代码。

注意:答案是基于我对问题的理解(我从问题中不理解英语)。在投票前请在下面评论。

Intent intent = new Intent();
intent.setComponent(new ComponentName("com.example.hao.hookstartupinterfacetest", "com.example.hao.hookstartupinterfacetest.MainActivity"));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
AndroidAppHelper.currentApplication().startActivity(intent);

如果您想获得第三方应用的上下文。 您可以将param.thsobject转换为Activity。

Activity activity = (Activity) param.thisobject;

然后你可以使用

activity.getApplicationContext();

确保该类(您正在挂钩)是Activity的一个实例,否则您无法将param.thisobject转换为Activity。 希望它有所帮助。