Android10自动连接WiFi问题的解决
说明:
本文主要说明扫码之后自动连接WiFi的一些处理,扫码的流程相对简单,网上教程也比较多,对于目前Android各个版本也没有太多变化。
问题描述:
最近在做项目的时候,发现以前的项目有扫描二维码自动连接WiFi的功能,设备改了生成二维码的方式,然后发现手机无法自动连接WiFi了。
问题原因:
经过代码调试发现:(我都是真机调试)
wifiManager.addNetwork(WifiConfiguration);
在添加WiFi的时候,这行代码始终返回-1,换用同事手机竟然神奇的可以连接,然后一脸蒙蔽,裂开了,不怕有问题,就怕有的有问题,有的没问题。
问题解决:
区别:我测试手机 小米10 android Q(andorid10)的系统,同事手机荣耀 android P的系统,大胆猜测是不是android10又搞了什么奇怪的东西
根因:皇天不负有心人,上代码:
/**
*Addanewnetworkdescriptiontothesetofconfigurednetworks.
*The{@codenetworkId}fieldofthesuppliedconfigurationobject
*isignored.
*
*ThenewnetworkwillbemarkedDISABLEDbydefault.Toenableit,
*called{@link#enableNetwork}.
*
*@paramconfigthesetofvariablesthatdescribetheconfiguration,
*containedina{@linkWifiConfiguration}object.
*Ifthe{@linkWifiConfiguration}hasanHttpProxyset
*thecallingappmustbeSystem,orbeprovisionedastheProfileorDeviceOwner.
*@returntheIDofthenewlycreatednetworkdescription.Thisisusedin
*otheroperationstospecifiedthenetworktobeactedupon.
*Returns{@code-1}onfailure.
*
*@deprecated
*a)See{@linkWifiNetworkSpecifier.Builder#build()}fornew
*mechanismtotriggerconnectiontoaWi-Finetwork.
*b)See{@link#addNetworkSuggestions(List)},
*{@link#removeNetworkSuggestions(List)}fornewAPItoaddWi-Finetworksforconsideration
*whenauto-connectingtowifi.
*CompatibilityNote:Forapplicationstargeting
*{@linkandroid.os.Build.VERSION_CODES#Q}orabove,thisAPIwillalwaysreturn{@code-1}.
*/
@Deprecated
publicintaddNetwork(WifiConfigurationconfig){
if(config==null){
return-1;
}
config.networkId=-1;
returnaddOrUpdateNetwork(config);
}
这是WifiManager.class中addNetwork方法的描述,注意注释中最后一行
{@linkandroid.os.Build.VERSION_CODES#Q}orabove,thisAPIwillalwaysreturn{@code-1}.
android Q或者更高的版本,这个方法始终返回-1,至此问题原因分析完毕,接下来开始解决:官网一顿操作:Android10 的新方案如下连接:https://developer.android.google.cn/guide/topics/connectivity/wifi-bootstrap
代码如下:
publicvoidtest()
{
if(android.os.Build.VERSION.SDK_INT>=android.os.Build.VERSION_CODES.Q)
{
NetworkSpecifierspecifier=
newWifiNetworkSpecifier.Builder()
.setSsidPattern(newPatternMatcher("此处WiFi名称",PatternMatcher.PATTERN_PREFIX))
.setWpa2Passphrase("此处WiFi密码")
.build();
NetworkRequestrequest=
newNetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
.removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
.setNetworkSpecifier(specifier)
.build();
ConnectivityManagerconnectivityManager=(ConnectivityManager)
context.getSystemService(Context.CONNECTIVITY_SERVICE);
ConnectivityManager.NetworkCallbacknetworkCallback=newConnectivityManager.NetworkCallback(){
@Override
publicvoidonAvailable(Networknetwork){
//dosuccessprocessinghere..
}
@Override
publicvoidonUnavailable(){
//dofailureprocessinghere..
}
};
connectivityManager.requestNetwork(request,networkCallback);
//Releasetherequestwhendone.
//connectivityManager.unregisterNetworkCallback(networkCallback);
}
}
注:我用的是WPA的 加密模式,亲测可用。至此完结,撒花。
到此这篇关于Android10自动连接WiFi问题的解决的文章就介绍到这了,更多相关Android10自动连接WiFi内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!