如何在 android 9 上赋予 WiFi 比以太网更高的优先级?

How to give WiFi higher priority than Ethernet on android 9?

我正在研究 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;

此外,getNetworkInfostartUsingNetworkFeature 也已弃用。

@Deprecated
    @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE)
    public NetworkInfo getNetworkInfo(int networkType) {
@Deprecated
    public int startUsingNetworkFeature(int networkType, String feature) {

如何在 android 9 上将 WIFI 设置为高于以太网的优先级?

关于如何处理此问题,您有两种选择。

选项 1:更新 AOSP 源代码

在 Android9 中,ConnectivityService 将使用静态 网络得分 来确定使用各种网络传输类型(以太网与 Wi-Fi)的优先级与蜂窝等)。

以太网的网络得分为 70 (link) while Wi-Fi has a network score of 60 (link)。

在你的情况下,如果我想优先考虑 Wi-Fi 而不是以太网,你可以更改分数以反映新的优先级(例如,在上面的 Wi-Fi link 中将 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 或根本无法使用(除了网络访问受限的潜在应用程序)。如果您想要不同的行为,您可以随时使用这些功能。