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

2019-12-10 19:54:58王旭

本文通过一段代码给大家介绍android获取app应用程序大小的方法,由于android对这种方法进行了封装,我们没有权限去调用这个方法,只能通过aidl,然后用java的反射机制去调用系统级方法,感兴趣的朋友一起学习吧

Android对这种方法进行了封装,我们没有权限去调用这个方法,所以我们只能通过AIDL,然后利用Java的反射机制去调用系统级的方法。

下面上代码:(注释比较详细)

 

 
  1. /**  * 作用:-----获取包的大小----- 
  2. * @param context 上下文  * @param pkgName app的包名 
  3. * @param appInfo 实体类,用于存放App的某些信息  */ 
  4. public static void getPkgSize(final Context context, String pkgName, final PhoneAppInfo appInfo) {  // getPackageSizeInfo是PackageManager中的一个private方法,所以需要通过反射的机制来调用 
  5. Method method;  try { 
  6. method = PackageManager.class.getMethod("getPackageSizeInfo",  new Class[]{String.class, IPackageStatsObserver.class}); 
  7. // 调用 getPackageSizeInfo 方法,需要两个参数:1、需要检测的应用包名;2、回调  method.invoke(context.getPackageManager(), pkgName, 
  8. new IPackageStatsObserver.Stub() {  @Override 
  9. public void onGetStatsCompleted(PackageStats pStats, boolean succeeded) throws RemoteException {  if (succeeded && pStats != null) { 
  10. synchronized (PhoneAppInfo.class) {  appInfo.setCatchSize(pStats.cacheSize);//缓存大小 
  11. appInfo.setDataSize(pStats.dataSize); //数据大小  appInfo.setCodeSize(pStats.codeSize); //应用大小 
  12. appInfo.setAppSize(pStats.cacheSize + pStats.codeSize + pStats.dataSize);//应用的总大小  Log.d("asdasdxx",appInfo.getAppSize()+""); 
  13. }  } 
  14. }  }); 
  15. } catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) {  e.printStackTrace(); 
  16. }  }