package com.num.helpers; import java.util.ArrayList; import java.util.List; import java.util.Set; import java.util.TreeSet; import com.num.models.Application; import com.num.models.Usage; import com.num.utils.AppUsageUtil; import android.app.ActivityManager; import android.app.ActivityManager.RunningAppProcessInfo; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.net.TrafficStats; public class AppUsageHelper { private static PackageManager mPm; private static ArrayList<String> getRunningProcesses(Context context){ ActivityManager manager = (ActivityManager) context.getSystemService("activity"); List<RunningAppProcessInfo> processes = manager.getRunningAppProcesses(); String s = processes.get(0).processName; ArrayList<String> runningProcessNames = new ArrayList<String>(); for(RunningAppProcessInfo p: processes) runningProcessNames.add(p.processName); return runningProcessNames; } public static Usage getUsageData(Context context) { Usage usage = new Usage(); List<Application> result = new ArrayList<Application>(); usage.setApplications(result); mPm = context.getPackageManager(); ArrayList<String> runningNames = getRunningProcesses(context); List<ApplicationInfo> allInfo = mPm.getInstalledApplications(0); Set<Integer> uids = new TreeSet<Integer>(); long total_recv=TrafficStats.getTotalRxBytes(); long total_sent=TrafficStats.getTotalTxBytes(); long mobile_recv=TrafficStats.getMobileRxBytes(); long mobile_sent=TrafficStats.getMobileTxBytes(); for (ApplicationInfo info : allInfo) { Integer uid = info.uid; if (uids.contains(uid)) continue; uids.add((Integer) uid); long recv = TrafficStats.getUidRxBytes(uid); long sent = TrafficStats.getUidTxBytes(uid); // remove those application which do not sent and recv data if (recv > 0 || sent > 0) { Application app = new Application(); app.setName(AppUsageUtil.getAppLabel(context, uid)); app.setPackageName(AppUsageUtil.getAppPkg(context,uid)); app.setIcon(AppUsageUtil.getAppIcon(context, uid)); app.setTotal_recv(TrafficStats.getUidRxBytes(uid)); app.setTotal_sent(TrafficStats.getUidTxBytes(uid)); app.setIsRunning(runningNames.contains(AppUsageUtil.getAppPkg(context,uid))); result.add(app); } } usage.setTotal_recv(total_recv); usage.setTotal_sent(total_sent); usage.setMobile_recv(mobile_recv); usage.setMobile_sent(mobile_sent); return usage; } }