如何获取android中最近1个月的数据使用情况?

2023-11-23

我需要获取上个月的数据使用统计信息。

有什么方法可以在android中明智地计算数据使用日期吗?

I used 交通统计用于获取数据使用情况的类,但它提供了自设备启动以来给定 UID 的设备的所有数据使用情况。


对于那些仍在寻找的人,请将其放入 onCreate 中。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    installedTime = getInstalledTime();
    if (checkUserStatePermission()) {
        startActivityForResult(new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS), REQUEST_USAGE_PERMISSION);

    } else {
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED
                
       ) {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_PHONE_STATE
                    }, REQUEST_PHONE_STATE);
        }
        else getInternetUsage();
    }
}

然后你的活动中的这些方法,重要的在本例中,installedTime 是月份的开始时间(长)

private void getInternetUsage() {
    NetworkStatsManager networkStatsManager = (NetworkStatsManager) getSystemService(Context.NETWORK_STATS_SERVICE);
    NetworkStats.Bucket bucketWifi, bucketMobile;

    try {

        bucketWifi = networkStatsManager.querySummaryForDevice(ConnectivityManager.TYPE_WIFI,
                "",
                installedTime,
                System.currentTimeMillis());

        bucketMobile = networkStatsManager.querySummaryForDevice(ConnectivityManager.TYPE_MOBILE,
                getSubscriberId(),
                installedTime,
                System.currentTimeMillis());


        Log.d("MOBILE INTERNET UP", bucketMobile.getTxBytes() / (1024f * 1024f) + " MB");
        Log.d("MOBILE INTERNET DOWN", bucketMobile.getRxBytes() / (1024f * 1024f) + " MB");


        Log.d("WIFI INTERNET UP", bucketWifi.getTxBytes() / (1024f * 1024f) + " MB");
        Log.d("WIFI INTERNET DOWN", bucketWifi.getRxBytes() / (1024f * 1024f) + " MB");


    } catch (RemoteException e) {
        e.printStackTrace();
    }
}


/*
we can pass null above Q
 */
@SuppressLint({"MissingPermission", "HardwareIds"})
public String getSubscriberId() {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
        TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
        return telephonyManager.getSubscriberId();
    } else {
        return null;
    }
}
private boolean checkUserStatePermission() {
    AppOpsManager appOps = (AppOpsManager)
            getSystemService(Context.APP_OPS_SERVICE);
    int mode = appOps.checkOpNoThrow("android:get_usage_stats",
            android.os.Process.myUid(), getPackageName());
    return mode != AppOpsManager.MODE_ALLOWED;
}

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == REQUEST_USAGE_PERMISSION) {
        if (checkUserStatePermission()) {
            Toast.makeText(this, "permission denied", Toast.LENGTH_SHORT).show();
            finish();
        } else {
            getInternetUsage();
        }

    }
}

PS:我刚刚根据这个要求编辑了我的代码,所以它可能有一些语法错误

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何获取android中最近1个月的数据使用情况? 的相关文章

随机推荐