您的位置:首页 > 移动开发 > Android开发

android典型代码系列(十三)------通过反射获得未暴露的方法

2015-12-04 14:11 585 查看
10_通过反射获得未暴露的方法:

import java.lang.reflect.Method;
import android.app.Activity;
import android.content.pm.IPackageStatsObserver;
import android.content.pm.PackageManager;
import android.content.pm.PackageStats;
import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;
public class DemoActivity extends Activity {
private PackageManager pm;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
pm = getPackageManager();
try {
/********************* getPackageSizeInfo 是私有的,没有暴露出来,不能直接调用*************/
/*************** 如果不知道getPackageSizeInfo参数的类型,则可以通过下面的方法来获取
Method[] methods = PackageManager.class.getMethods();
for (int i = 0; i < methods.length; i++) {
if ("getPackageSizeInfo".equals(methods[i].getName())) {
Class<?>[]  paras = methods[i].getParameterTypes();
for(int j=0;j<paras.length;j++){
System.out.println(paras[j]); //获得参数类型
}
}
}****************************************************************/
Method method = PackageManager.class.getMethod("getPackageSizeInfo", new Class[]{String.class,IPackageStatsObserver.class});
method.invoke(pm, new Object[]{"cn.itcast.mobilesafe",new IPackageStatsObserver.Stub() {
public void onGetStatsCompleted(PackageStats pStats, boolean succeeded)
throws RemoteException {
System.out.println("----------------");
long cachesize = pStats.cacheSize;
long codesize = pStats.codeSize;
long datasize = pStats.dataSize;
System.out.println("datasize"+datasize);
System.out.println("codesize"+codesize);
System.out.println("cachesize"+cachesize);
}
}});
} catch (Exception e) {
e.printStackTrace();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: