关于Android10及以上应用内连接wifi后,不能访问互联网的坑!!!

问题 :关于Android10及以上应用内连接wifi后,不能访问互联网的坑!!!

在Android10以后,谷歌官方将应用内连接wifi的方式改变了

在Android10之前我们是调用addNetwork和enableNetwork

但在Android10以后以上方法不会生效

/**
     * Add a new network description to the set of configured networks.
     * The {@code networkId} field of the supplied configuration object
     * is ignored.
     * 

* The new network will be marked DISABLED by default. To enable it, * called {@link #enableNetwork}. * * @param config the set of variables that describe the configuration, * contained in a {@link WifiConfiguration} object. * If the {@link WifiConfiguration} has an Http Proxy set * the calling app must be System, or be provisioned as the Profile or Device Owner. * @return the ID of the newly created network description. This is used in * other operations to specified the network to be acted upon. * Returns {@code -1} on failure. * * @deprecated * a) See {@link WifiNetworkSpecifier.Builder#build()} for new * mechanism to trigger connection to a Wi-Fi network. * b) See {@link #addNetworkSuggestions(List)}, * {@link #removeNetworkSuggestions(List)} for new API to add Wi-Fi networks for consideration * when auto-connecting to wifi. * Compatibility Note: For applications targeting * {@link android.os.Build.VERSION_CODES#Q} or above, this API will always return {@code -1}. */ @Deprecated public int addNetwork(WifiConfiguration config) { if (config == null) { return -1; } config.networkId = -1; return addOrUpdateNetwork(config);

{@link android.os.Build.VERSION_CODES#Q} or above, this API will always return {@code -1}.

android Q或者更高的版本,这个方法始终返回-1,

这句话的意思就是AndroidQ以上不再适用

 

解决方案:

谷歌官方文档

https://developer.android.com/guide/topics/connectivity/wifi-bootstrap

 

关于Android10及以上应用内连接wifi后,不能访问互联网的坑!!!_第1张图片

如果你使用了以上的代码来连接wifi,那么你将会陷入无止境的“连接wifi后,无法上网”的窘境。

当然网上也有很多解决方案:

  1.  用registerNetworkCallback替换requestNetwork的
  2. 连接成功后,调用connectivityManager.bindProcessToNetwork(network)的

但是!!!完全没有用,即便是有用,也只能是小部分手机。

 

解决方案

没有解决方案!!对不没有看错,只要谷歌官方没有重视这个问题,他就没有解决方案

 

规避

既然这是Android10的特性,那我们就不用Android10的SDK

我们将项目的版本改为28以后

compileSdkVersion 28
targetSdkVersion 28

再使用 addNetwork或enableNetwork,就不会有这个限制的问题了

 

 

当然,这只是规避一下,坐等Android官方没有解决方案吧

 

在此做一个记录,方便以后来解决这些陈年BUG

 

 

 

 

 

 

你可能感兴趣的:(Android开发,android,安卓,wifi)