package cn.edu.buaa.act.sdp.malwaredetector.entity; import android.annotation.TargetApi; import android.content.Context; import android.content.pm.IPackageStatsObserver; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageStats; import android.graphics.drawable.Drawable; import android.os.Build; import android.os.RemoteException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import cn.edu.buaa.act.sdp.malwaredetector.util.DateUtil; /** * Created by yaodh on 2014/11/11. */ public class PackageInfoWithSize { String packageName; String installDate; String appName; Drawable icon; String version; long totalSize; public PackageInfoWithSize(Context context, PackageInfo packageInfo) { PackageManager packageManager = context.getPackageManager(); appName = packageInfo.applicationInfo.loadLabel(packageManager).toString(); packageName = packageInfo.packageName; version = packageInfo.versionName; icon = packageInfo.applicationInfo.loadIcon(packageManager); installDate = DateUtil.getDateFromLong(packageInfo.firstInstallTime, "yyyy-MM-dd"); totalSize = getPackageSize(context, packageInfo.packageName); } public String getPackageName() { return packageName; } public String getInstallDate() { return installDate; } public String getAppName() { return appName; } public Drawable getIcon() { return icon; } public String getVersion() { return version; } public long getTotalSize() { return totalSize; } public long getPackageSize(Context context, String packageName) { try { Method method = PackageManager.class.getMethod("getPackageSizeInfo", new Class[]{String.class, IPackageStatsObserver.class}); method.invoke(context.getPackageManager(), new Object[]{ packageName, new IPackageStatsObserver.Stub() { @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) @Override public void onGetStatsCompleted(PackageStats pStats, boolean succeeded) throws RemoteException { totalSize = pStats.cacheSize + pStats.codeSize + pStats.dataSize + pStats.externalCacheSize + pStats.externalDataSize + pStats.externalCodeSize + pStats.externalMediaSize + pStats.externalObbSize; } } }); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } return totalSize; } }