为您的应用添加 5G 功能

Android 11 添加了支持在您的应用中使用 5G 的功能。本主题介绍了该功能,并概述了如何通过向您的应用添加特定于 5G 的功能来改善用户体验。

构建 5G 应用

在决定如何使用 5G 时,请考虑您尝试构建哪种类型的体验。5G 可以增强您的应用的一些方式包括

  • 由于 5G 的速度和延迟改进,自动使当前体验更快、更好。
  • 提升用户体验,例如显示 4k 视频或下载更高分辨率的游戏资源。
  • 在确认增加的数据使用不会给用户带来成本后,包括通常仅通过 Wi-Fi 提供的体验,例如主动下载通常保留给无计量 Wi-Fi 的内容。
  • 提供仅在高速和低延迟下才能使用的 5G 独有体验。

5G 功能

Android 11 引入了以下功能更改和增强功能

检查计量

在 Android 11 中添加了 NET_CAPABILITY_TEMPORARILY_NOT_METERED 功能,它会根据蜂窝运营商提供的信息告诉您当前使用的网络是否为无计量网络。

新标志与 NET_CAPABILITY_NOT_METERED 一起使用。现有标志指示网络是否始终为无计量网络,并适用于 Wi-Fi 和蜂窝连接。

这两个标志之间的区别在于 NET_CAPABILITY_TEMPORARILY_NOT_METERED 可能会在网络类型不变的情况下发生变化。目标 Android 11 的应用可以使用 NET_CAPABILITY_TEMPORARILY_NOT_METERED 标志。在运行 Android 9 及更低版本的设备上,操作系统不会报告该标志。对于在 Android 10 上运行的应用,此标志可能可用,具体取决于其运行的设备。

确定当前网络是暂时或永久无计量后,您可以显示更高分辨率的内容(例如 4k 视频)、上传日志、备份文件并主动下载内容。

以下部分介绍了向您的应用添加计量检查步骤。

注册网络回调

使用 ConnectivityManager.registerDefaultNetworkCallback() 注册网络回调,以监听 NetworkCapabilities 的变化。您可以通过重写 NetworkCallback 中的 onCapabilitiesChanged() 方法来检测 NetworkCapabilities 的变化。

registerDefaultNetworkCallback() 会在注册时立即触发注册的回调,从而向应用提供有关当前状态的信息。未来的回调对于应用在状态从非计费更改为计费或反之亦然时采取适当措施至关重要。

检查计费状态

使用您在网络回调中接收到的 NetworkCapabilites 对象来检查以下代码的输出

Kotlin

NetworkCapabilities.hasCapability(NET_CAPABILITY_NOT_METERED) ||
  NetworkCapabilities.hasCapability(NET_CAPABILITY_TEMPORARILY_NOT_METERED)

Java

NetworkCapabilities.hasCapability(NET_CAPABILITY_NOT_METERED) ||
  NetworkCapabilities.hasCapability(NET_CAPABILITY_TEMPORARILY_NOT_METERED)

如果值为真,则您可以将网络视为非计费网络。

其他注意事项

使用此功能时,请牢记以下事项

  • 使用 NET_CAPABILITY_TEMPORARILY_NOT_METERED 标志需要您使用 Android 11 SDK 编译应用。

  • NET_CAPABILITY_NOT_METERED 功能在网络上是永久性的。具有此功能的网络如果丢失该功能(变为计费),将自动断开连接。

  • 相反,NET_CAPABILITY_TEMPORARILY_NOT_METERED 可能会在网络上发生变化 *而不会断开连接*。因此,应用必须监听 onCapabilitiesChanged() 回调以处理网络恢复到计费状态(丢失 NET_CAPABILITY_TEMPORARILY_NOT_METERED 功能)的情况。

  • 网络不能同时具有 NET_CAPABILITY_NOT_METEREDNET_CAPABILITY_TEMPORARILY_NOT_METERED

5G 检测

从 Android 11 开始,您可以使用基于回调的 API 调用检测设备是否连接到 5G 网络。您可以检查连接是 5G NR(独立)还是 NSA(非独立)网络。

此 API 调用的某些用途可能包括

  • 在您的应用中显示 5G 品牌,以突出显示您提供的独特 5G 体验。

  • 仅当在 5G 网络上时,才在应用中激活独特的 5G 体验。您应该将此状态检查与 检查计费状态 配合使用。

  • 出于分析目的跟踪 5G 连接。

要测试 5G 检测而不使用 5G 设备,您可以使用 添加到 Android SDK 模拟器中的功能

检测 5G

调用 TelephonyManager.listen(),传入 LISTEN_DISPLAY_INFO_CHANGED,以确定用户是否具有 5G 网络连接。重写 onDisplayInfoChanged() 方法以确定用于显示目的的网络类型。一个例外是,如果运营商选择将 *5G* 作为其毫米波网络的 RAT 显示,则会返回 OVERRIDE_NETWORK_TYPE_NR_NSA

下表显示了与值对应的网络

返回类型 网络
OVERRIDE_NETWORK_TYPE_LTE_ADVANCED_PRO 高级专业 LTE (5Ge)
OVERRIDE_NETWORK_TYPE_NR_NSA 5G Sub-6 网络的 NR (5G)
OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE 5G 毫米波网络的 (5G+/5G UW)

带宽估算

带宽估计使用您在确定计费状态时使用的 NetworkCapabilities 对象。您可以使用该对象获取带宽估计值。

带宽估计方法 getLinkDownstreamBandwidthKbps()getLinkUpstreamBandwidthKbps() 的可靠性和准确性在 Android 11 中得到了改进,这是由于框架支持的升级以及平台/调制解调器错误修复以适应 5G。

带宽默认值仅提供应用启动时的指导。这将帮助您处理“空闲状态下启动”场景。您的应用应在用户开始使用应用后测量其观察到的内容,并动态调整其流行为。例如,您可以根据启动时的带宽估计选择要提供的视频分辨率。在用户使用应用时继续检查估计值;随着其连接类型和强度的变化,相应地调整应用的行为。