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

来源:互联网 发布:类似snapchat的软件 编辑:程序博客网 时间:2024/06/06 02:01

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();        }    }}
0 0