可以通过 getActiveNetworkInfo() 函数来检查当前网络状态,并使用 PackageManager 类获取已安装应用程序的信息。
以下是检查当前网络状态的代码示例:
ConnectivityManager connectivityManager =
        (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
boolean isMobileDataEnabled = networkInfo != null &&
        networkInfo.getType() == ConnectivityManager.TYPE_MOBILE &&
        networkInfo.isConnectedOrConnecting();
然后,可以遍历所有已安装的应用程序并检查它们是否具有 ACCESS_NETWORK_STATE 和 ACCESS_WIFI_STATE 权限。对于那些具有这些权限的应用程序,您可以使用 TrafficStats 类来获取它们的数据使用情况。以下是获取应用程序使用的数据量的代码示例:
PackageManager packageManager = context.getPackageManager();
List packageInfos = packageManager.getInstalledPackages(PackageManager.GET_PERMISSIONS);
for (PackageInfo packageInfo : packageInfos) {
    String[] permissions = packageInfo.requestedPermissions;
    if (permissions != null) {
        for (String permission : permissions) {
            if (permission.equals(Manifest.permission.ACCESS_NETWORK_STATE) ||
                    permission.equals(Manifest.permission.ACCESS_WIFI_STATE)) {
                int uid = packageInfo.applicationInfo.uid;
                long txBytes = TrafficStats.getUidTxBytes(uid);
                long rxBytes = TrafficStats.getUidRxBytes(uid);
                // do something with txBytes and rxBytes
            }
        }
    }
}