在项目中创建,android.content.pm 包名。里面创建两个aidl文件。PackageStats.aidl 和IPackageStatsObserver.aidl。

PackageStats.aidl

/* //device/java/android/android/view/WindowManager.aidl**** Copyright 2007, The Android Open Source Project**** Licensed under the Apache License, Version 2.0 (the "License"); ** you may not use this file except in compliance with the License. ** You may obtain a copy of the License at ****     http://www.apache.org/licenses/LICENSE-2.0 **** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License.*/package android.content.pm; parcelable PackageStats;

IPackageStatsObserver.aidl

/***** Copyright 2007, The Android Open Source Project**** Licensed under the Apache License, Version 2.0 (the "License");** you may not use this file except in compliance with the License.** You may obtain a copy of the License at****     http://www.apache.org/licenses/LICENSE-2.0**** Unless required by applicable law or agreed to in writing, software** distributed under the License is distributed on an "AS IS" BASIS,** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.** See the License for the specific language governing permissions and** limitations under the License.*/package android.content.pm; import android.content.pm.PackageStats; /** * API for package data change related callbacks from the Package Manager. * Some usage scenarios include deletion of cache directory, generate * statistics related to code, data, cache usage(TODO) * {@hide} */ oneway interface IPackageStatsObserver { void onGetStatsCompleted(in PackageStats pStats, boolean succeeded); }

 1 import android.app.Activity;  2 import android.content.pm.IPackageStatsObserver;  3 import android.content.pm.PackageManager;  4 import android.content.pm.PackageStats;  5 import android.os.Bundle;  6 import android.os.Handler;  7 import android.os.Message;  8 import android.widget.TextView;  9 10 public class MainActivity extends Activity { 11 12 private TextView tv; 13 private static final String ATTR_PACKAGE_STATS = "PackageStats"; 14 15  @Override 16 public void onCreate(Bundle savedInstanceState) { 17 super.onCreate(savedInstanceState); 18 19 tv = new TextView(this); 20 21  setContentView(tv); 22 23 getpkginfo("com.xj.notebook"); 24  } 25 26 private Handler mHandler = new Handler() { 27 public void handleMessage(Message msg) { 28 switch (msg.what) { 29 case 1: 30 String infoString = ""; 31 PackageStats newPs = msg.getData().getParcelable( 32  ATTR_PACKAGE_STATS); 33 if (newPs != null) { 34 infoString += "应用程序大小: " + formatFileSize(newPs.codeSize); 35 infoString += "\n数据大小: " + formatFileSize(newPs.dataSize); 36 infoString += "\n缓存大小: " + formatFileSize(newPs.cacheSize); 37  } 38  tv.setText(infoString); 39 break; 40 default: 41 break; 42  } 43  } 44  }; 45 46 public void getpkginfo(String pkg) { 47 PackageManager pm = getPackageManager(); 48 try { 49 Method getPackageSizeInfo = pm.getClass().getMethod( 50 "getPackageSizeInfo", String.class, 51 IPackageStatsObserver.class); 52 getPackageSizeInfo.invoke(pm, pkg, new PkgSizeObserver()); 53 } catch (Exception e) { 54  } 55  } 56 57 class PkgSizeObserver extends IPackageStatsObserver.Stub { 58 public void onGetStatsCompleted(PackageStats pStats, boolean succeeded) { 59 Message msg = mHandler.obtainMessage(1); 60 Bundle data = new Bundle(); 61  data.putParcelable(ATTR_PACKAGE_STATS, pStats); 62  msg.setData(data); 63  mHandler.sendMessage(msg); 65  } 66  } 67 68 /** 69  * 获取文件大小 70 */ 71 public static String formatFileSize(long length) { 72 String result = null; 73 int sub_string = 0; 74 if (length >= 1073741824) { 75 sub_string = String.valueOf((float) length / 1073741824).indexOf( 76 "."); 77 result = ((float) length / 1073741824 + "000").substring(0, 78 sub_string + 3) + "GB"; 79 } else if (length >= 1048576) { 80 sub_string = String.valueOf((float) length / 1048576).indexOf("."); 81 result = ((float) length / 1048576 + "000").substring(0, 82 sub_string + 3) + "MB"; 83 } else if (length >= 1024) { 84 sub_string = String.valueOf((float) length / 1024).indexOf("."); 85 result = ((float) length / 1024 + "000").substring(0, 86 sub_string + 3) + "KB"; 87 } else if (length < 1024) 88 result = Long.toString(length) + "B"; 89 return result; 90  } 91 }

<uses-permission android:name="android.permission.GET_PACKAGE_SIZE"/> 

更多相关文章

  1. Android多屏幕适配之字体大小、行间距和字间距
  2. [Android] Eclipse Android中设置模拟器屏幕大小几种方法
  3. 【Android Demo】Android中取得手机屏幕大小
  4. Android应用程序支持大小不同的屏幕
  5. android中修改tablayout中的字体大小和颜色
  6. Android 读取文件File的大小
  7. android.inputmethodservice.KeyboardView 自定义键盘 字体大小
  8. android 版本号比较大小
  9. android获取屏幕大小

随机推荐

  1. Android(安卓)Activity和Intent机制学习
  2. MAC 安装Eclipse: Failed to get the req
  3. android paint类
  4. Android短彩信收发流程(Framework)
  5. Android(安卓)Lock 随笔
  6. Android(安卓)ViewManager实例
  7. Android(安卓)Volley完全解析(三),定制自
  8. Android(安卓)mutex
  9. Mac系统中,Eclipse没有显示设备
  10. 命令模式与Android(安卓)Handler的工作原