android statistic 3g traffic for each APP, how?

前端 未结 4 1178
无人共我
无人共我 2020-12-13 15:37

For statistic network traffic per APP, what I\'m using now is Android TrafficStats

That I can get result like following :

  • Youtube 50.30 MBytes
4条回答
  •  甜味超标
    2020-12-13 16:28

    After a long struggle, I am able to find the Solution for getting data over any interface for each installed Application in android device.

    As Android provides TrafficStats Apis but these APIs are providing compile Data statistics for each app uid since device boot and Even APIs are not supporting to get the data over any interface for a particular application. Even if we rely over TraffiucStates APIS ,we get a new data statistics for each Application.

    So I thought to use the hidden APIs to use this..

    Here I am mentioning the Steps to get the data statistics for each application over any Interface in Android...

    1. Establish a "INetworkStatsSession" session

      import android.net.INetworkStatsSession;
      INetworkStatsSession mStatsSession = mStatsService.openSession();
      
    2. Create a Network Template according to interface which you want to measure..

      import static android.net.NetworkTemplate.buildTemplateEthernet;
      import static android.net.NetworkTemplate.buildTemplateMobile3gLower;
      import static android.net.NetworkTemplate.buildTemplateMobile4g;
      import static android.net.NetworkTemplate.buildTemplateMobileAll;
      import static android.net.NetworkTemplate.buildTemplateWifiWildcard;
      
      import android.net.NetworkTemplate;
      
      private NetworkTemplate mTemplate;
      
      mTemplate = buildTemplateMobileAll(getActiveSubscriberId(this
                  .getApplicationContext()));
      
    3. GetActive SubscriberID:

      private static String getActiveSubscriberId(Context context) {
          final TelephonyManager tele = TelephonyManager.from(context);
          final String actualSubscriberId = tele.getSubscriberId();
          return SystemProperties.get(TEST_SUBSCRIBER_PROP, actualSubscriberId);
      }
      
    4. Collect the network HIStory of respective application byt passing application UIDs...

      private NetworkStatsHistory collectHistoryForUid(NetworkTemplate template,
          int uid, int set) throws RemoteException {
          final NetworkStatsHistory history = mStatsSession.getHistoryForUid(
                  template, uid, set, TAG_NONE, FIELD_RX_BYTES | FIELD_TX_BYTES);
          return history;
      
      }
      
    5. Get the total Consumption data:

      public void showConsuption(int UID){
          NetworkStatsHistory history = collectHistoryForUid(mTemplate, UID,
                  SET_DEFAULT);
      
          Log.i(DEBUG_TAG, "load:::::SET_DEFAULT:.getTotalBytes:"+ Formatter.formatFileSize(context, history.getTotalBytes()));
      
          history = collectHistoryForUid(mTemplate, 10093,
                  SET_FOREGROUND);
          Log.i(DEBUG_TAG, "load::::SET_FOREGROUND::.getTotalBytes:"+ Formatter.formatFileSize(context, history.getTotalBytes()));
      
          history = collectHistoryForUid(mTemplate, 10093,
                  SET_ALL);
          Log.i(DEBUG_TAG, "load::::SET_ALL::.getTotalBytes:"+ Formatter.formatFileSize(context, history.getTotalBytes()));
      
      }
      

提交回复
热议问题