对PackageManager的反思失败

时间:2014-02-17 04:42:08

标签: android

我正在尝试通过反思访问PackageManager。我可以枚举方法并找到getApplicationInfo。我也可以通过getApplicationInfo工作对我的参考文件执行reflection. getMethods(),但getMethod()getApplicationInfo投放no such method exception

Method method;
Method method2;
method = Class.forName(Context.class.getName()).getDeclaredMethod(
                    "getPackageManager");
Object manager;
manager = method.invoke(ctx);

// this works
ApplicationInfo testInfo = ((PackageManager) manager)
    .getApplicationInfo("com.package.class", 0);

// throws nosuchmethodexception
((PackageManager) manager).getClass().getMethod("getApplicationInfo");

2 个答案:

答案 0 :(得分:3)

请参阅getMethod()方法定义

public Method getDeclaredMethod(String name,Class...<?> parameterTypes);

因此您需要传递参数类型的class实例。

替换

((PackageManager) manager).getClass().getMethod("getApplicationInfo");

((PackageManager) manager).getClass().getMethod("getApplicationInfo",int.class);

答案 1 :(得分:1)

您需要将参数类型传递给getMethod,以便知道要获取的版本。它现在正在做的是寻找一个不存在的无参数版本。

请参阅课程文档:http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#getMethod%28java.lang.String,%20java.lang.Class...%29