如何在 android 9 上赋予 WiFi 比以太网更高的优先级?
Posted
技术标签:
【中文标题】如何在 android 9 上赋予 WiFi 比以太网更高的优先级?【英文标题】:How to give WiFi higher priority than Ethernet on android 9? 【发布时间】:2022-01-12 13:19:04 【问题描述】:我正在开发 android 9,我想优先使用 WiFi over Ethernet。
我尝试在我的config.xml
文件中赋予 wifi 比以太网更高的优先级,如下所示,但我的以太网仍然具有更高的优先级。
<string-array translatable="false" name="networkAttributes">
<item>"wifi,1,1,2,6000,true"</item>
<item>"ethernet,9,9,0,6000,true"</item>
</string-array>
我在网上搜索,发现默认网络偏好可以在ConnectivityManager.java
中给出。但它在 API28 中显示已弃用。
@Deprecated
public static final int DEFAULT_NETWORK_PREFERENCE = TYPE_WIFI;
另外,getNetworkInfo
和 startUsingNetworkFeature
也已弃用。
@Deprecated
@RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE)
public NetworkInfo getNetworkInfo(int networkType)
@Deprecated
public int startUsingNetworkFeature(int networkType, String feature)
如何在 android 9 上赋予 WIFI 比以太网更高的优先级?
【问题讨论】:
两个问题;你能更新Android源代码并有一个自定义图像吗?例如,更新 AOSP 作为潜在修复的一部分,还是只能依赖 SDK?第二个问题,以太网对于您的用例是否总是具有相同的名称?例如,以太网是否总是命名为eth0
?
@AlwaysLearning:是的。我可以更新 android 源代码,是的,以太网总是被命名为 eth0。
【参考方案1】:
关于如何处理这个问题,您有两种选择。
选项 1:更新 AOSP 源代码
在 Android 9 中,ConnectivityService
将使用静态网络分数来确定使用各种网络传输类型(以太网、Wi-Fi 还是蜂窝网络等)的优先级。
以太网的网络得分为 70 (link),而 Wi-Fi 的网络得分为 60 (link)。
在您的情况下,如果我希望 Wi-Fi 优先于以太网,您可以更改分数以反映新的优先级(例如,在上面的 Wi-Fi 链接中将 Wi-Fi 更改为 71 或类似地,将以太网的分数降低到比如说59在它的工厂里)。
Wi-Fi 示例:
private static final int SCORE_FILTER = 71;
选项 2:使用资源叠加层
有一个资源覆盖可用于手动配置以太网网络上的网络功能,名为config_ethernet_interfaces
(link)。
<!-- Configuration of Ethernet interfaces in the following format:
<interface name|mac address>;[Network Capabilities];[IP config];[Override Transport]
Where
[Network Capabilities] Optional. A comma seprated list of network capabilities.
Values must be from NetworkCapabilities#NET_CAPABILITY_* constants.
The NOT_ROAMING, NOT_CONGESTED and NOT_SUSPENDED capabilities are always
added automatically because this configuration provides no way to update
them dynamically.
[IP config] Optional. If empty or not specified - DHCP will be used, otherwise
use the following format to specify static IP configuration:
ip=<ip-address/mask> gateway=<ip-address> dns=<comma-sep-ip-addresses>
domains=<comma-sep-domains>
[Override Transport] Optional. An override network transport type to allow
the propagation of an interface type on the other end of a local Ethernet
interface. Value must be from NetworkCapabilities#TRANSPORT_* constants. If
left out, this will default to TRANSPORT_ETHERNET.
-->
<string-array translatable="false" name="config_ethernet_interfaces">
<!--
<item>eth1;12,13,14,15;ip=192.168.0.10/24 gateway=192.168.0.1 dns=4.4.4.4,8.8.8.8</item>
<item>eth2;;ip=192.168.0.11/24</item>
<item>eth3;12,13,14,15;ip=192.168.0.12/24;1</item>
-->
</string-array>
这是基于以太网接口名称的索引,因此您需要在所有情况下使用相同的以太网名称,例如eth0
对于大多数人来说。您可以更新上述配置以使用这些功能。在您的情况下,您可以省略 NOT_RESTRICTED
功能 (link),在这种情况下,以太网永远不会被用作默认网络,只会让 Wi-Fi 的优先级更高。
<!-- Restricting eth0 -->
<string-array translatable="false" name="config_ethernet_interfaces">
<item>eth0;11,12,14;;</item>
</string-array>
事实上,Android Cuttlefish 目标 (link) 今天出于类似的原因这样做。请注意,上述配置会将eth0
标记为受限,因此它可能无法获得IP 或根本无法使用(除非可能是网络访问受限的应用程序)。如果您想要不同的行为,您可以随时使用这些功能。
【讨论】:
非常感谢!有效!我使用了选项 1。我找不到 wifinetworkfactory.java 来增加 wifi 的优先级。所以,我只是在 EthernetNetworkFactory.java 中将以太网的优先级降低到 30。此外,由于某种原因,使用选项 2,我的以太网将无法获得 IP。所以,我正在使用选项 1。无论如何,它有效。谢谢。 是的,当然。很高兴它起作用了,我根据您的评论添加了一些上下文来稍微更新了这个问题。编码愉快!以上是关于如何在 android 9 上赋予 WiFi 比以太网更高的优先级?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Android 9.0(PIE) 中获取 WIFI SSID?
如何模拟像素比以在 Windows 上使用 Google Chrome 或 Firefox 测试媒体查询?