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

В 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

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

  • http://developer.android.com/sdk/images/4.0/usage-all-lg.png

  • http://developer.android.com/sdk/images/4.0/usage-maps-lg.png

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

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

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; } 

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

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

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

Во-первых, получите список всех запущенных приложений:

 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); } 

Вы можете использовать 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; } }