欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 国际 > Android 网络请求的选择逻辑(Connectivity Modules)

Android 网络请求的选择逻辑(Connectivity Modules)

2025/6/23 3:46:25 来源:https://blog.csdn.net/qq_38666896/article/details/148742150  浏览:    关键词:Android 网络请求的选择逻辑(Connectivity Modules)

代码分析

ConnectivityManager

packages/modules/Connectivity/framework/src/android/net/ConnectivityManager.java

许多APN已经弃用,应用层统一用 requestNetwork() 来请求网络。

 [ConnectivityManager]
 [ConnectivityManager] example

 [ConnectivityManager] requestNetwork()
 [ConnectivityManager] requestNetwork()

sendRequestForNetwork
 [ConnectivityManager] sendRequestForNetwork

sendRequestForNetwork

此接口是针对“任何类型网络请求”都会执行的公共逻辑,包括 WiFi、Cellular(蜂窝数据)、以太网、有线、蓝牙等。

只负责请求的注册、回调的挂钩、AIDL通信与系统服务托管,并不区分底层是wifi还是cellular真正的“分配哪个网络(WiFi还是Cellular)”的事,是在系统服务 ConnectivityService(以及更下游的 NetworkAgent、NetworkFactory)里完成判断和分配的。

NetworkCapabilities need 这个参数规定了请求的网络属性和能力,由 ConnectivityService(system service) 进行分配:

  • 指定 TRANSPORT_WIFI(只想要WiFi网络,NetworkCapabilities.TRANSPORT_WIFI)
  • 指定 TRANSPORT_CELLULAR(只想用数据蜂窝,NetworkCapabilities.NET_CAPABILITY_INTERNET)
  • 可以“都不指定”或者指定多个,系统帮自动选择或监听。
  • Android 自 9.0(API 28)起,ConnectivityService/NetworkStack 支持“IP over Bluetooth”(PAN,也叫 Bluetooth tethering 蓝牙网络共享)的情况,可以作为一种网络传输方式存在
    • 在 NetworkCapabilities 的定义中,TRANSPORT_BLUETOOTH 已经是一个合法的 Transport 类型。即——如果有蓝牙 PAN 设备连接,Android 会将其当做一种“有能力提供 IP 网络通信”的链路。
    private NetworkRequest sendRequestForNetwork(int asUid, NetworkCapabilities need,NetworkCallback callback, int timeoutMs, NetworkRequest.Type reqType, int legacyType,CallbackHandler handler) {printStackTrace();checkCallbackNotNull(callback);//非默认跟踪请求,如果没指定网络能力(need)就是非法调用。if (reqType !=

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词