获取 Android 10 中的移动数据使用情况

nis*_*eri 5 android telephonymanager android-data-usage networkstatsmanager android-10.0

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

我正在使用NetworkStatsManager.querySummaryForDevice它需要订阅者 ID,之前我可以使用TelephonyManager.getSubscriberId.

getSubscriberId现在该功能在 Android 10 中无法使用,因为它需要READ_PRIVILEGED_PHONE_STATE第三方应用程序无法具备的功能。

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

dpe*_*uha 2

调用NetworkStatsManagerresolvesubscriberId时如下:

  • null在 Android 版本 10+(API 级别 >= 29)设备上运行时使用
  • 在之前版本的 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;
        }
    }
Run Code Online (Sandbox Code Playgroud)

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