Android Wifi的forget()操作實(shí)例詳解
Android Wifi的forget()操作實(shí)例詳解
我們?cè)谔幚砟硞€(gè)Wifi連接時(shí),有時(shí)會(huì)需要忘掉當(dāng)前連接的密碼信息。執(zhí)行這項(xiàng)操作,我們需要調(diào)用WifiManager::forget()函數(shù):
/**
* Delete the network in the supplicant config.
*
* This function is used instead of a sequence of removeNetwork()
* and saveConfiguration().
*
* @param config the set of variables that describe the configuration,
* contained in a {@link WifiConfiguration} object.
* @param listener for callbacks on success or failure. Can be null.
* @throws IllegalStateException if the WifiManager instance needs to be
* initialized again
* @hide
*/
public void forget(int netId, ActionListener listener) {
if (netId < 0) throw new IllegalArgumentException("Network id cannot be negative");
validateChannel();
sAsyncChannel.sendMessage(FORGET_NETWORK, netId, putListener(listener));
}
從函數(shù)介紹可知,調(diào)用forget()函數(shù),當(dāng)前網(wǎng)絡(luò)連接的配置信息就會(huì)從wpa_supplicant.conf中刪掉;之后這個(gè)網(wǎng)絡(luò)就不會(huì)有自動(dòng)重連的動(dòng)作,因?yàn)閏onf文件中已經(jīng)沒有該網(wǎng)絡(luò)的配置信息。
跟蹤FORGET_NETWORK消息,WifiServiceImpl::ClientHandler處理:
case WifiManager.FORGET_NETWORK:
if (isOwner(msg.sendingUid)) {
mWifiStateMachine.sendMessage(Message.obtain(msg));
} else {
Slog.e(TAG, "Forget is not authorized for user");
replyFailed(msg, WifiManager.FORGET_NETWORK_FAILED,
WifiManager.NOT_AUTHORIZED);
}
break;
簡(jiǎn)單地將該消息轉(zhuǎn)發(fā)給WifiStateMachine。此時(shí)Wifi是連接狀態(tài),WifiStateMachine中當(dāng)前狀態(tài)是ConnectedState,它的父狀態(tài)ConnectModeState處理:
case WifiManager.FORGET_NETWORK:
// Debug only, remember last configuration that was forgotten
WifiConfiguration toRemove
= mWifiConfigStore.getWifiConfiguration(message.arg1);
if (toRemove == null) {
lastForgetConfigurationAttempt = null;
} else {
lastForgetConfigurationAttempt = new WifiConfiguration(toRemove);
}
// check that the caller owns this network
netId = message.arg1;
if (!mWifiConfigStore.canModifyNetwork(message.sendingUid, netId,
/* onlyAnnotate */ false)) {
logw("Not authorized to forget network "
+ " cnid=" + netId
+ " uid=" + message.sendingUid);
replyToMessage(message, WifiManager.FORGET_NETWORK_FAILED,
WifiManager.NOT_AUTHORIZED);
break;
}
if (mWifiConfigStore.forgetNetwork(message.arg1)) {
replyToMessage(message, WifiManager.FORGET_NETWORK_SUCCEEDED);
broadcastWifiCredentialChanged(WifiManager.WIFI_CREDENTIAL_FORGOT,
(WifiConfiguration) message.obj);
} else {
loge("Failed to forget network");
replyToMessage(message, WifiManager.FORGET_NETWORK_FAILED,
WifiManager.ERROR);
}
break;
mWifiConfigStore.forgetNetwork():
/**
* Forget the specified network and save config
*
* @param netId network to forget
* @return {@code true} if it succeeds, {@code false} otherwise
*/
boolean forgetNetwork(int netId) {
if (showNetworks) localLog("forgetNetwork", netId);
WifiConfiguration config = mConfiguredNetworks.get(netId);
boolean remove = removeConfigAndSendBroadcastIfNeeded(netId);
if (!remove) {
//success but we dont want to remove the network from supplicant conf file
return true;
}
if (mWifiNative.removeNetwork(netId)) {
if (config != null && config.isPasspoint()) {
writePasspointConfigs(config.FQDN, null);
}
mWifiNative.saveConfig();
writeKnownNetworkHistory(true);
return true;
} else {
loge("Failed to remove network " + netId);
return false;
}
}
根據(jù)傳入的當(dāng)前網(wǎng)絡(luò)的netId,分別調(diào)用WifiNative的removeNetwork()、saveConfig()方法刪除conf文件的配置信息并進(jìn)行保存;執(zhí)行完成后,forget()函數(shù)結(jié)束了。通過代碼我們發(fā)現(xiàn),執(zhí)行forget()函數(shù)并不會(huì)引起WifiStateMachine中狀態(tài)的切換。
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
- Android wifi 調(diào)試詳解及簡(jiǎn)單實(shí)例
- Android 如何查看Wifi密碼
- Android判斷wifi是5G還是2.4G
- 通過WIFI(不用數(shù)據(jù)線)連接Android手機(jī)調(diào)試
- Android獲取當(dāng)前手機(jī)網(wǎng)絡(luò)類型(2g、3g、4g、wifi)以及手機(jī)型號(hào)、版本號(hào)代碼
- android編程實(shí)現(xiàn)設(shè)置、打開wifi熱點(diǎn)共享供他人連接的方法
- Android開發(fā)之Wifi基礎(chǔ)教程
- Android獲取當(dāng)前已連接的wifi信號(hào)強(qiáng)度的方法
- 在Android里完美實(shí)現(xiàn)基站和WIFI定位
相關(guān)文章
Android中實(shí)現(xiàn)長(zhǎng)按照片彈出右鍵菜單功能的實(shí)例代碼
這篇文章主要介紹了Android中實(shí)現(xiàn)長(zhǎng)按照片彈出右鍵菜單功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-01-01
Android開發(fā)微信APP支付功能的要點(diǎn)小結(jié)
微信支付現(xiàn)在在日常生活中隨處可見,而關(guān)于Android開發(fā)微信支付的文章網(wǎng)上也很多,所以這篇文章主要介紹的是在Android開發(fā)微信APP支付功能的要注意的要點(diǎn),有需要的可以參考借鑒。2016-08-08
Anroid ListView分組和懸浮Header實(shí)現(xiàn)方法
這篇文章主要介紹了Anroid ListView分組和懸浮Header實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2016-11-11
打飛機(jī)游戲終極BOSS Android實(shí)戰(zhàn)打飛機(jī)游戲完結(jié)篇
打飛機(jī)游戲終極BOSS,Android實(shí)戰(zhàn)打飛機(jī)游戲完結(jié)篇,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-07-07
Android XML設(shè)置屏幕方向(android:screenOrientation)詳解
這篇文章主要介紹了Android XML設(shè)置屏幕方向(android:screenOrientation)詳解的相關(guān)資料,需要的朋友可以參考下2017-04-04
使用Timer實(shí)現(xiàn)網(wǎng)頁勻速加載的進(jìn)度條樣式
這篇文章主要介紹了使用Timer實(shí)現(xiàn)網(wǎng)頁勻速加載的進(jìn)度條樣式,在使用WebView加載網(wǎng)頁時(shí)有時(shí)候網(wǎng)速等原因加載比較慢時(shí),影響用戶的體驗(yàn)度,今天小編給大家分享使用timer實(shí)現(xiàn)網(wǎng)頁勻速加載的進(jìn)度條樣式,需要的的朋友參考下吧2017-01-01
Android Retrofit2數(shù)據(jù)解析代碼解析
這篇文章主要介紹了Android Retrofit2數(shù)據(jù)解析代碼解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-12-12
Android開發(fā)之多媒體文件獲取工具類實(shí)例【音頻,視頻,圖片等】
這篇文章主要介紹了Android開發(fā)之多媒體文件獲取工具類,結(jié)合實(shí)例形式分析了Android獲取音頻,視頻及圖片等多媒體資源的相關(guān)操作技巧,需要的朋友可以參考下2017-10-10

