TrafficStats Api android and calculation of daily data usage

后端 未结 4 1310
不思量自难忘°
不思量自难忘° 2020-12-01 14:49

Have a confusion over following two methods of TrafficStats of Android: getUidTxBytes(int uid) and getUidRxBytes(int uid) , These two methods return the num

4条回答
  •  忘掉有多难
    2020-12-01 15:49

    Here, I getting those apps, which has permission of Internet, You can change the Permission name and get apps as per you needed.

    ArrayList listApps;
    
     public void getAllAppList() {
    
        listApps = new ArrayList();
    
        PackageManager p = getPackageManager();
        List packages = p.getInstalledApplications(PackageManager.GET_META_DATA);
    
        for (ApplicationInfo applicationInfo : packages) {
    
            try {
    
                PackageInfo packageInfo = p.getPackageInfo(applicationInfo.packageName, PackageManager.GET_PERMISSIONS);
    
                String[] permissions = packageInfo.requestedPermissions;
    
                for (String permissionName : permissions) {
    
                    if (permissionName.equals("android.permission.INTERNET")) {
    
                        ApplicationInfo appInfo = packageInfo.applicationInfo;
    
                        AppObject appObject = new AppObject();
    
                        appObject.appDrawable = getPackageManager().getApplicationIcon(appInfo);
                        appObject.appName = (String) getPackageManager().getApplicationLabel(appInfo);
                        appObject.dataUsage = getDataUsage(appInfo);
    
                        listApps.add(appObject);
    
                    }
    
                }
            } catch (NullPointerException e) {
                e.printStackTrace();
            } catch (PackageManager.NameNotFoundException e) {
                e.printStackTrace();
            }
        }
    
        Debug.e("APP_SIZE", ":" + listApps.size());
    
        appsAdapter.addAll(listApps);
    
    }
    
    public String getDataUsage(ApplicationInfo appInfo) {
    
        int uid = appInfo.uid;
    
        double received = (double) TrafficStats.getUidRxBytes(uid) / (1024 * 1024);
        double sent = (double) TrafficStats.getUidTxBytes(uid) / (1024 * 1024);
    
        double total = received + sent;
    
        return String.format("%.2f", total) + " MB";
    
    }
    

提交回复
热议问题