获取 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 设备上为我工作。
我正在尝试制作一个网络使用监控应用程序,它可以向用户显示移动数据使用历史记录。为此,我使用使用情况访问权限从 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 设备上为我工作。