Как программно показать использование данных для всех приложений? - программирование

Как программно показать использование данных для всех приложений?

В Android 4.0 и далее у нас есть опции управления использованием данных в телефоне. Пожалуйста, проверьте прилагаемый скриншот для дальнейшего понимания.

http://developer.android.com/about/versions/android-4.0-highlights.html

Теперь у меня есть требование проверить эти вещи (все использование данных приложения в определенный период времени/конкретные дни) из моего приложения. Как я могу это достичь? Я также использую приведенный ниже класс для использования в сети.

http://developer.oesf.biz/em/developer/reference/eggplant/android/net/NetworkStatsHistory.html

Пожалуйста, проверьте приведенные ниже ссылки. Мне нужно разработать такое же приложение.

Спасибо, что поделились своим кодом, но мне нужно знать данные, используемые каждым приложением, а не все приложения. До сих пор я заметил в ссылках, что никто не говорит об использовании данных отдельными приложениями. Я уже знаю, как показывать установленные устройства в устройстве. Теперь я хотел бы знать, какие данные используются каждым приложением.

Я использую приведенный ниже код для списка установленных приложений в устройстве.

private ArrayList<PInfo> getInstalledApps(boolean getSysPackages) {
    ArrayList<PInfo> res = new ArrayList<PInfo>();

    List<PackageInfo> packs = getPackageManager().getInstalledPackages(0);

    for (int i=0; i<packs.size(); i++) {
        PackageInfo p = packs.get(i);
        if ((!getSysPackages) && (p.versionName == null)) {
            continue ;
        }
        PInfo newInfo = new PInfo();
        newInfo.setAppname(p.applicationInfo.loadLabel(getPackageManager()).toString());
        newInfo.setPname(p.packageName);
        newInfo.setVersionName(p.versionName);
        newInfo.setVersionCode(p.versionCode);
        newInfo.setIcon(p.applicationInfo.loadIcon(getPackageManager()));

        res.add(newInfo);
    }
    return res;
}

Как узнать, какие данные используются каждым приложением?

На самом деле, мне нужно решение, которое позволяет использовать данные приложений в заданный период времени, то есть между двумя днями.

4b9b3361

Ответ 1

Сначала вы получите список всех текущих процессов процесса:

List<RunningAppProcessInfo>

Затем получите UID для каждого приложения и затем отправьте и получите трафик приложения:

// Get running processes
ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
List<RunningAppProcessInfo> runningApps = manager.getRunningAppProcesses();

for (RunningAppProcessInfo runningApp : runningApps) {

  // Get UID of the selected process
  int uid = ((RunningAppProcessInfo)getListAdapter().getItem(position)).uid;

  // Get traffic data
  long received = TrafficStats.getUidRxBytes(uid);
  long send   = TrafficStats.getUidTxBytes(uid);
  Log.v("" + uid , "Send :" + send + ", Received :" + received);
}

Ответ 2

Вы можете использовать android.net.TrafficStats для получения сведений об использовании сети.

Пожалуйста, найдите пример программы ниже для этого.

package com.anchit.trafficstatus;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;

public class TrafficStatus extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        Log.e("bytes recvd", "" + android.net.TrafficStats.getMobileRxBytes());

        Log.e("Total", "Bytes received" + android.net.TrafficStats.getTotalRxBytes());
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
}