Android 11 增加了在应用中支持 5G 的功能。本主题涵盖了这些功能,并概述了向应用添加 5G 特定功能如何改善用户体验。
为 5G 构建
在决定如何与 5G 结合时,请考虑您希望构建哪种类型的体验。5G 增强您的应用的一些方式包括:
- 由于 5G 的速度和延迟改进,自动使现有体验更快更好。
- 提升用户体验,例如通过显示 4K 视频或下载更高分辨率的游戏资源。
- 在确认增加的数据使用量不会给用户带来额外费用后,可以包含通常只通过 Wi-Fi 提供的体验,例如主动下载通常为不计量 Wi-Fi 保留的内容。
- 提供 5G 独有的体验,这些体验仅在高速度和低延迟下有效。
5G 功能
Android 11 引入了以下功能变更和增强功能:
检查计量性
`NET_CAPABILITY_TEMPORARILY_NOT_METERED
` 是 Android 11 中新增的一项功能,它会根据蜂窝运营商提供的信息,告知您当前使用的网络是否为非计量网络。
新标志与 `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()` 会导致注册的回调在注册时立即触发,从而向应用提供有关当前状态的信息。当状态从未计量变为计量或反之亦然时,将来的回调对于应用采取适当行动至关重要。
检查计量性
使用您在网络回调中收到的 `NetworkCapabilities
` 对象来检查以下代码的输出:
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)
如果值为 true,则可以将该网络视为非计量网络。
其他注意事项
使用此功能时,请记住以下几点:
使用 `
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_METERED
` 和 `NET_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
` 对象。您可以使用该对象获取带宽估算。
由于对框架支持的升级以及平台/调制解调器错误修复以适应 5G,Android 11 中带宽估算方法 `getLinkDownstreamBandwidthKbps()
` 和 `getLinkUpstreamBandwidthKbps()
` 的可靠性和准确性得到了提高。
带宽默认值仅提供应用启动时的指导。这应该有助于您处理“空闲时启动”场景。您的应用应在用户开始使用应用后测量其看到的内容,并动态调整其流式传输行为。例如,您可以根据启动时的带宽估算选择要提供的视频分辨率。在用户使用应用时继续检查估算值;随着连接类型和强度的变化,相应地调整您的应用行为。