Android 9系统中如何设置WiFi优先级高于以太网
Android 9(API 28)设置WiFi优先级高于以太网的解决方案
场景1:定制ROM全局修改优先级
第一步:修正config.xml配置
你之前配置不生效的核心原因是搞反了networkAttributes中优先级数值的规则:数值越大,网络优先级越高。你将以太网的优先级设为9、WiFi设为1,自然以太网优先级更高。
修改frameworks/base/core/res/res/values/config.xml中的对应配置:
<string-array translatable="false" name="networkAttributes"> <!-- 第二个参数为基础优先级,设为高于以太网的值即可 --> <item>"wifi,15,1,2,6000,true"</item> <item>"ethernet,5,9,0,6000,true"</item> </string-array>
修改后全编译ROM刷入设备即可生效,单独替换framework-res.apk可能因签名、权限问题不生效。
第二步:兜底修改ConnectivityService逻辑
如果修改config.xml后仍不生效,可直接修改系统服务的评分逻辑:
找到frameworks/base/services/core/java/com/android/server/ConnectivityService.java,在网络评分计算的逻辑分支中,强制同条件下WiFi的最终评分比以太网高20分以上,即可保证WiFi优先被选作默认网络。
场景2:单个应用优先使用WiFi
不需要修改系统源码,直接用Android 9官方推荐的NetworkRequest替代已废弃的接口即可实现:
- 先在AndroidManifest.xml中申请权限:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
- 代码中注册网络回调,绑定进程默认网络为WiFi:
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); // 构建仅匹配WiFi的网络请求 NetworkRequest wifiRequest = new NetworkRequest.Builder() .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) .build(); ConnectivityManager.NetworkCallback wifiCallback = new ConnectivityManager.NetworkCallback() { @Override public void onAvailable(@NonNull Network network) { super.onAvailable(network); // 将当前进程的所有网络请求默认路由到WiFi ConnectivityManager.setProcessDefaultNetwork(network); } }; // 注册回调监听WiFi状态 cm.registerNetworkCallback(wifiRequest, wifiCallback);
不需要的时候调用cm.unregisterNetworkCallback(wifiCallback)注销回调即可。
内容的提问来源于stack exchange,提问作者Sourabrt
相关产品推荐
相关产品推荐

