获取 Android 10 后的移动数据用量

Get mobile data usage in Android 10

我正在尝试制作一个网络使用监控应用程序,它可以向用户显示移动数据使用历史记录。为此,我使用使用情况访问权限从 NetworkStatsManager 获取准确的数据使用情况统计信息。但这不再适用于 Android 10.

我正在使用 NetworkStatsManager.querySummaryForDevice which requires subscriber Id, which earlier I was able to obtain using TelephonyManager.getSubscriberId

但是 getSubscriberId 现在无法在 Android 10 中使用,因为它需要 READ_PRIVILEGED_PHONE_STATE 第三方应用程序无法拥有。

关于如何让它发挥作用有什么想法吗?我了解获取订阅者 ID 的限制,但我并不真正关心订阅者 ID,只要我获得移动数据使用情况即可,对此我有足够的权限。

目前无法获取您想要的信息,除非您的应用是个人资料或设备所有者应用。您可以只使用 TrafficStats 但不能使用查询,它会在重新启动时重置。

尝试在 querySummaryForDevice 方法中将 null 作为订户 ID 传递。这对我有用

调用NetworkStatsManager时解析subscriberId如下:

  • 在 Android 版本 10+(API 级别 >= 29)设备上 运行 时使用 null
  • 在 Android(API 级别 < 29)的早期版本中,您仍应解析 subscriberId(使用 TelephonyManager)

下面是一个示例代码,应该对您有所帮助:

public static String getSubscriberId() {
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
            TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
            return telephonyManager.getSubscriberId();
        } else {
            return null;
        }
    }

在 Android API Level 29 和 Android API Level 26 设备上为我工作。