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

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

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

下面是两个AIDL文件的代码。。。

步骤(Android Studio):

1、在main文件夹下,建立一个aidl文件夹的文件夹

2、建立一个包,包名为android.content.pm

3、结构图

   *******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;

****************IPackageStatusObserver.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. Android的存储系统—Vold与MountService分析(三)
  2. Android(安卓)SDK、NDK、JNI的简单介绍
  3. 关于Android的浅杀
  4. android中SharedPreferences实现存储用户名功能
  5. Android(安卓)Widget ListView添加点击事件
  6. Android的线程和线程池(一)
  7. android httpclient 302自动跳转
  8. android 获取手机内存大小
  9. android 6.0 以上 动态申请多个权限

随机推荐

  1. Android(安卓)键盘驱动
  2. Android之 drawTextOnpath
  3. Android(安卓)-- 解决Android(安卓)Studi
  4. android ios vue 互调
  5. android复合控件
  6. EditeText标签字体大小设置 是否可编辑
  7. Android(安卓)各版本Gradle离线下载
  8. 去除启动edittext时候默认的焦点
  9. Android调用本机地图APP
  10. 2011.09.09 ——— android 2.2 修改安装