我正在尝试通过反思访问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");
答案 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,以便知道要获取的版本。它现在正在做的是寻找一个不存在的无参数版本。