Android10自動(dòng)連接WiFi問(wèn)題的解決
說(shuō)明:
本文主要說(shuō)明掃碼之后自動(dòng)連接WiFi的一些處理,掃碼的流程相對(duì)簡(jiǎn)單,網(wǎng)上教程也比較多,對(duì)于目前Android各個(gè)版本也沒(méi)有太多變化。
問(wèn)題描述:
最近在做項(xiàng)目的時(shí)候,發(fā)現(xiàn)以前的項(xiàng)目有掃描二維碼自動(dòng)連接WiFi的功能,設(shè)備改了生成二維碼的方式,然后發(fā)現(xiàn)手機(jī)無(wú)法自動(dòng)連接WiFi了。
問(wèn)題原因:
經(jīng)過(guò)代碼調(diào)試發(fā)現(xiàn):(我都是真機(jī)調(diào)試)
wifiManager.addNetwork(WifiConfiguration);
在添加WiFi的時(shí)候,這行代碼始終返回-1,換用同事手機(jī)竟然神奇的可以連接,然后一臉蒙蔽,裂開(kāi)了,不怕有問(wèn)題,就怕有的有問(wèn)題,有的沒(méi)問(wèn)題。
問(wèn)題解決:
區(qū)別:我測(cè)試手機(jī) 小米10 android Q(andorid 10)的系統(tǒng),同事手機(jī)榮耀 android P的系統(tǒng),大膽猜測(cè)是不是android 10又搞了什么奇怪的東西
根因:皇天不負(fù)有心人,上代碼:
/** * Add a new network description to the set of configured networks. * The {@code networkId} field of the supplied configuration object * is ignored. * <p/> * 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. * <b>Compatibility Note:</b> 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); }
這是WifiManager.class中addNetwork方法的描述,注意注釋中最后一行
{@link android.os.Build.VERSION_CODES#Q} or above, this API will always return {@code -1}.
android Q或者更高的版本,這個(gè)方法始終返回-1,至此問(wèn)題原因分析完畢,接下來(lái)開(kāi)始解決:官網(wǎng)一頓操作:Android 10 的新方案如下連接:https://developer.android.google.cn/guide/topics/connectivity/wifi-bootstrap
代碼如下:
public void test() { if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) { NetworkSpecifier specifier = new WifiNetworkSpecifier.Builder() .setSsidPattern(new PatternMatcher('此處WiFi名稱', PatternMatcher.PATTERN_PREFIX)) .setWpa2Passphrase('此處WiFi密碼') .build(); NetworkRequest request = new NetworkRequest.Builder() .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) .removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .setNetworkSpecifier(specifier) .build(); ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback() {@Overridepublic void onAvailable(Network network) { // do success processing here..} @Overridepublic void onUnavailable() { // do failure processing here..} }; connectivityManager.requestNetwork(request, networkCallback); // Release the request when done. // connectivityManager.unregisterNetworkCallback(networkCallback); } }
注:我用的是WPA的 加密模式,親測(cè)可用。至此完結(jié),撒花。
到此這篇關(guān)于Android10自動(dòng)連接WiFi問(wèn)題的解決的文章就介紹到這了,更多相關(guān)Android10自動(dòng)連接WiFi內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. jsp文件下載功能實(shí)現(xiàn)代碼2. jsp實(shí)現(xiàn)登錄驗(yàn)證的過(guò)濾器3. 如何在jsp界面中插入圖片4. ASP動(dòng)態(tài)網(wǎng)頁(yè)制作技術(shù)經(jīng)驗(yàn)分享5. 詳解瀏覽器的緩存機(jī)制6. .Net Core和RabbitMQ限制循環(huán)消費(fèi)的方法7. Xml簡(jiǎn)介_(kāi)動(dòng)力節(jié)點(diǎn)Java學(xué)院整理8. phpstudy apache開(kāi)啟ssi使用詳解9. JSP之表單提交get和post的區(qū)別詳解及實(shí)例10. .Net加密神器Eazfuscator.NET?2023.2?最新版使用教程
