在Android中,有些系统类的方法被隐藏起来了,不能直接调用。这时可以利用Java的反射机制拿到相应的方法。
例1:拿到并调用PackageManager的getPackageSizeInfo方法:
Method getPackageSizeInfo = null;
Method[] methods = PackageManager.class.getMethods(); //得到PackageManager的全部方法
for (Method method : methods) {
<span style="white-space:pre"> </span>if(method.getName().equals("getPackageSizeInfo")) {<span style="white-space:pre"> </span>//找到需要的方法
getPackageSizeInfo = method;
}
}
List<PackageInfo> packInfos = pm.getInstalledPackages(0);
pb.setMax(packInfos.size());
int progress = 0;
for (PackageInfo packInfo : packInfos) {
try {
getPackageSizeInfo.invoke(pm, packInfo.packageName, new MyStatsObserver());//调用方法,根据源码 ,MyStatsObserver继承IPackageStatsObserver.Stub<p><span style="white-space: pre;"> </span>Thread.sleep(100);</p><p><span style="white-space: pre;"> </span>} catch (Exception e)<span style="white-space: pre;"> </span> {</p><p><span style="white-space: pre;"> </span> e.printStackTrace();</p><p><span style="white-space: pre;"> </span>}</p><p><span style="white-space: pre;"> </span>pb.setProgress(++progress);</p><p>}</p>