版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/chaoyu168/article/details/82226830
//获取apk大小
public static String getPkgSize(final Context context, String pkgName) throws NoSuchMethodException,
InvocationTargetException, IllegalAccessException {
// getPackageSizeInfo是PackageManager中的一个private方法,所以需要通过反射的机制来调用
Method method = PackageManager.class.getMethod("getPackageSizeInfo",
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 {
// 子线程中默认无法处理消息循环,自然也就不能显示Toast,所以需要手动Looper一下
Looper.prepare();
// 从pStats中提取各个所需数据
// Toast.makeText(context, "缓存大小=" + Formatter.formatFileSize(context, pStats.cacheSize) +
// "\n数据大小=" + Formatter.formatFileSize(context, pStats.dataSize) +
// "\n程序大小=" + Formatter.formatFileSize(context, pStats.codeSize),
// Toast.LENGTH_LONG).show();
// 遍历一次消息队列,弹出Toast
long totalsize1 = pStats.cacheSize + pStats.dataSize + pStats.codeSize;
DecimalFormat df=new DecimalFormat("0.00");
totalsize = df.format(Double.valueOf(totalsize1 /1024/ 1024D));
Looper.loop();
}
});
return totalsize;
}
添加权限:
<uses-permission android:name="android.permission.GET_PACKAGE_SIZE"/>
目录结构为上图:
1、创建包:android.content.pm
2、创建两个AIDL文件IPackageStatsObserver.aidl 、PackageStats.aidl
AIDL下载地址:https://download.csdn.net/download/chaoyu168/10636731