Android获取应用程序大小的方法

2019-12-10 20:13:39于丽

            Object maObject = maClass.newInstance();  

            /* 
             * 将私有域mPm赋值。因为mPm在SizeObserver的invokeGetSize中用到了, 
             * 却因为没有执行onCreate而没有初始化,所以要在此处初始化。 
             */  
            Field f_mPm = maClass.getDeclaredField("mPm");  
            f_mPm.setAccessible(true);              
            f_mPm.set(maObject, mmsCtx.getPackageManager());  

            /* 
             * 给mHandler赋值为重新定义的Handler,以便接收SizeObserver的 
             * onGetStatsCompleted回调方法中dispatch的消息,从中取PackageStats对象。 
             * */  
            Field f_mHandler = maClass.getDeclaredField("mHandler");  
            f_mHandler.setAccessible(true);  
            f_mHandler.set(maObject, new Handler() {  
                  public void handleMessage(Message msg) {  
                      if(msg.what == 1) {  
                          //此处获取到PackageStats对象  
                          ps = (PackageStats) msg.getData().getParcelable("ApplicationPackageStats");                           
                          Log.d("", ""+ps.codeSize);