Have been trying this but does not get the exact mobile data consumption. I am storing data in a db per hour and pushing it to server in hourly basis but it does not return me the exact amount of data consumed per app
public void getMobileDataPerApp() {
// arrayMobileConsumption.clear();
DecimalFormat df = new DecimalFormat("0.0");
final PackageManager pm =getPackageManager();
// List<ApplicationInfo> packages = pm.getInstalledApplications(0);
ActivityManager activityManager = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> appProcesses = activityManager.getRunningAppProcesses();
//final List<ActivityManager.RunningTaskInfo> recentTasks = activityManager.getRunningTasks(Integer.MAX_VALUE);
for (int i = 0; i < appProcesses.size(); i++)
{
Log.d("Executed app", "Application executed : " +appProcesses.get(i).processName+ "\t\t ID: "+appProcesses.get(i).pid+"");
// String packageName = activityManager.getRunningTasks(1).get(0).topActivity.getPackageName();
//String packageName = appProcesses.get(i)..getPackageName();
ApplicationInfo app = null;
if(appProcesses.get(i).uid > 1026)
{
try {
app = pm.getApplicationInfo(appProcesses.get(i).processName, 0);
/* if((app.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) == 1) {
//it's a system app, not interested
} else if ((app.flags & ApplicationInfo.FLAG_SYSTEM) == 1) {
//Discard this one
//in this case, it should be a user-installed app
} else {*/
if (Util.isConnectedMobile(this)) {
long delta_tx = TrafficStats.getUidTxBytes(app.uid) - tx;
long delta_rx = TrafficStats.getUidRxBytes(app.uid) - rx;
tx = TrafficStats.getUidTxBytes(app.uid);
rx = TrafficStats.getUidRxBytes(app.uid);
mobil_tx = mobil_tx + delta_tx;
mobil_rx = mobil_rx + delta_rx;
datarecivedPerAppTotal = mobil_tx + mobil_tx;
String name = (String) pm.getApplicationLabel(app);
}
Aucun commentaire:
Enregistrer un commentaire