解决方案 »

  1.   

    TrafficStats.getUidRxBytes(int uid)能够获取到同一个user id自开机以来接受了多少个字节。如果你没有几个apk共用同一个user id。那么返回的值就代表你这个apk自开机以来接受的字节数。
    TrafficStats.getMobileRxBytes()能够获取到自开机以来手机通过移动网络接受到的字节数。
    SDK没有提供每个app通过移动网络获取到字节数的api。
      

  2.   

    我要下载疯狂android讲义啊,赶紧给我积分啊我去!!!!
      

  3.   

    我解决了先得到你的应用程序的包名,然后根据你联网的状态来统计流量
     
    public void method() {
    ConnectivityManager connectMgr = (ConnectivityManager) this
    .getSystemService(Context.CONNECTIVITY_SERVICE);
    ApplicationInfo info = getApplicationInfo();
    NetworkInfo netinfo = connectMgr.getActiveNetworkInfo();
    if (netinfo != null || netinfo.isAvailable()) {
    System.out.println("========================");
    if (netinfo.getType() == ConnectivityManager.TYPE_MOBILE) {
    System.out.println(info.packageName);
    String name = info.packageName;
    if (name.equals("com.example.demo")
    || name == "com.example.demo") {
    int uid = info.uid;
    System.out.println(uid + ".............");
    System.out.println("所消耗2G/3G流量"+TrafficStats.getUidRxBytes(uid) + TrafficStats.getUidTxBytes(uid));
    }
    }
    if (netinfo.getType() == ConnectivityManager.TYPE_WIFI) {
    System.out.println(info.packageName);
    String name = info.packageName;
    if (name.equals("com.example.demo")
    || name == "com.example.demo") {
    int uid = info.uid;
    System.out.println(uid + ".............");
    System.out.println(TrafficStats.getUidRxBytes(uid));
    System.out.println(TrafficStats.getUidTxBytes(uid));
    System.out.println("所消耗的wifi的流量="+((int)TrafficStats.getUidRxBytes(uid)+(int)TrafficStats.getUidTxBytes(uid)));
    }
    }
    } }