Android10自動連接WiFi問題的解決
說明:
本文主要說明掃碼之后自動連接WiFi的一些處理,掃碼的流程相對簡單,網(wǎng)上教程也比較多,對于目前Android各個版本也沒有太多變化。
問題描述:
最近在做項目的時候,發(fā)現(xiàn)以前的項目有掃描二維碼自動連接WiFi的功能,設(shè)備改了生成二維碼的方式,然后發(fā)現(xiàn)手機(jī)無法自動連接WiFi了。
問題原因:
經(jīng)過代碼調(diào)試發(fā)現(xiàn):(我都是真機(jī)調(diào)試)
wifiManager.addNetwork(WifiConfiguration);
在添加WiFi的時候,這行代碼始終返回-1,換用同事手機(jī)竟然神奇的可以連接,然后一臉蒙蔽,裂開了,不怕有問題,就怕有的有問題,有的沒問題。
問題解決:
區(qū)別:我測試手機(jī) 小米10 android Q(andorid 10)的系統(tǒng),同事手機(jī)榮耀 android P的系統(tǒng),大膽猜測是不是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或者更高的版本,這個方法始終返回-1,至此問題原因分析完畢,接下來開始解決:官網(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() {
@Override
public void onAvailable(Network network) {
// do success processing here..
}
@Override
public void onUnavailable() {
// do failure processing here..
}
};
connectivityManager.requestNetwork(request, networkCallback);
// Release the request when done.
// connectivityManager.unregisterNetworkCallback(networkCallback);
}
}
注:我用的是WPA的 加密模式,親測可用。至此完結(jié),撒花。
到此這篇關(guān)于Android10自動連接WiFi問題的解決的文章就介紹到這了,更多相關(guān)Android10自動連接WiFi內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android Build Variants 為項目設(shè)置變種版本的方法
下面小編就為大家分享一篇Android Build Variants 為項目設(shè)置變種版本的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-01-01
Android開發(fā)技巧之像QQ一樣輸入文字和表情圖像
QQ聊天輸入框,在輸入框中可以同時輸入文字和表情圖像。實際上,這種效果在Android SDK中只需要幾行代碼就可以實現(xiàn),本文將會介紹如何實現(xiàn)像QQ一樣輸入表情圖像2013-01-01
Android編程實現(xiàn)類似天氣預(yù)報圖文字幕垂直滾動效果的方法
這篇文章主要介紹了Android編程實現(xiàn)類似天氣預(yù)報圖文字幕垂直滾動效果的方法,涉及Android基于布局及事件響應(yīng)實現(xiàn)圖文滾動效果的相關(guān)操作技巧,需要的朋友可以參考下2017-08-08
Android Gridview布局出現(xiàn)滾動條或組件沖突解決方法
這篇文章主要介紹了Android Gridview布局出現(xiàn)滾動條或組件沖突解決方法,GridView是一個在二維可滾動的網(wǎng)格中展示內(nèi)容的控件。網(wǎng)格中的內(nèi)容通過使用adapter自動插入到布局中2022-07-07
Android使用SQLite數(shù)據(jù)庫的示例
本篇文章主要介紹了Android使用SQLite數(shù)據(jù)庫的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-01-01

