javaandroidandroid-trafficstatsnetworkstatsmanager

Android mobile usage history NetworkStatsManager


I'm making an App for Android 6.0 and I want to use the new class NetworkStatsManager for getting mobile data usage.

I added all permission I need in manifest and require the permission runtime.

When I call the method:

bucket = networkStatsManager.querySummaryForDevice(ConnectivityManager.TYPE_WIFI, "", fromDate.getTime(), toDate.getTime());

return the right value for WIFI usage.

But if i replace TYPE_WIFI with TYPE_MOBILE the result is always 0.

    NetworkStats.Bucket bucket = null;
    try {
        bucket = networkStatsManager.querySummaryForDevice(ConnectivityManager.TYPE_MOBILE, "", fromDate.getTime(), toDate.getTime());

        if(bucket == null){
            Log.i("Info", "Error");
        }else{
            Log.i("Info", "Total: " + (bucket.getRxBytes() + bucket.getTxBytes()));
        }

    } catch (RemoteException e) {
        e.printStackTrace();
    }

Solution

  • I found a solution of this problem with hidden APIs (android statistic 3g traffic for each APP, how?) and when trying to retrieve mobile data usage information with TYPE_MOBILE was necessary to inform the SubscriberID, unlike when I tryed to get information TYPE WIFI.

    Try this code

        TelephonyManager  tm = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
        String subscriberID = tm.getSubscriberId();
    
        NetworkStats networkStatsByApp = networkStatsManager.queryDetailsForUid(ConnectivityManager.TYPE_MOBILE, subscriberID, start, end, uid);
    

    So when you are using TYPE_MOBILE, it's necessary to you use a valid subscriberID.