17

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

各アプリケーションで使用されるデータを知るにはどうすればよいですか?

実際には、特定の期間、つまり 2 日間のアプリケーションのデータ使用量を示すソリューションが必要です。

4

4 に答える 4

3

2015 年の Arunendra のソリューションは、SDK 28 (Pie) ではすぐには機能しませんでした。

そこで、次のように修正しました。

void networkUsage() {
    // Get running processes
    ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
    List<ActivityManager.RunningAppProcessInfo> runningApps = manager.getRunningAppProcesses();
    for (ActivityManager.RunningAppProcessInfo runningApp : runningApps) {
        long received = TrafficStats.getUidRxBytes(runningApp.uid);
        long sent = TrafficStats.getUidTxBytes(runningApp.uid);
        Log.d(LOG_TAG, String.format(Locale.getDefault(), 
                "uid: %1d - name: %s: Sent = %1d, Rcvd = %1d", runningApp.uid, runningApp.processName, sent, received));
    }
}
于 2018-11-29T08:35:48.680 に答える