android切換wifi
① Android的WiFi功能總結
先進行WiFi許可權的聲明
<!-- 獲取WiFi狀態 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- api <= Android29調用setWifiEnabled -->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<!-- 定位許可權(api >= 23 用於 WIFI掃描)-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
注意:ACCESS_FINE_LOCATION和ACCESS_COARSE_LOCATION是危險級許可權需要使用中還需要動態申請,申請其中一個即可。
WifiManager mWifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
if (Build.VERSION.SDK_INT >=Build.VERSION_CODES.R) {
Intent panelIntent =new Intent(Settings.Panel.ACTION_WIFI);
startActivityForResult(panelIntent,null);
}else{ mWifiManager.setWifiEnabled(!isEnable);}
可以通過監聽系統廣播來了解WiFi狀態。
WIFI_STATE_CHANGED_ACTION:WiFi開關狀態;
SCAN_RESULTS_AVAILABLE_ACTION:WiFi列表變化;
RSSI_CHANGED_ACTION:WiFi信號強度變化。
IntentFilter mFilter =new IntentFilter();
mFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
mFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
mFilter.addAction(WifiManager.RSSI_CHANGED_ACTION);
mReceiver =new BroadcastReceiver() {
@Override
public void onReceive(Context context,Intent intent) {
handleEvent(intent);
}
};
registerReceiver(mReceiver, mFilter);
private void handleEvent(Intent intent) {
String action = intent.getAction();
if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(action)) {
final int wifiState =mWifiManager.getWifiState();
if(wifiState ==WifiManager.WIFI_STATE_ENABLED){
postDelayed(()->{mRefreshLayout.autoRefresh();},1000);
}
}else if (WifiManager.SCAN_RESULTS_AVAILABLE_ACTION.equals(action)) {
}else if (WifiManager.RSSI_CHANGED_ACTION.equals(action)) {
if(System.currentTimeMillis() -mLastUpateWifiRssiTime <1000){//刷新太快
return;
}
}
updateWifiChange();
}
切記:wifistate切換到WifiManager.WIFI_STATE_ENABLED,mWifiManager.isWifiEnabled()需要有個等待時間切換。
3的基礎上解析廣播應答
private void updateWifiChange() {
final int wifiState =mWifiManager.getWifiState();
switch (wifiState) {
case WifiManager.WIFI_STATE_ENABLED:
ArrayListresults = (ArrayList)mWifiManager.getScanResults();
updateApListView(results);
mWlanSb.setChecked(mWifiManager.isWifiEnabled() );
break;
case WifiManager.WIFI_STATE_ENABLING:
break;
case WifiManager.WIFI_STATE_DISABLING:
mAdapter.clearData();
mWlanSb.setChecked(mWifiManager.isWifiEnabled() );
break;
case WifiManager.WIFI_STATE_DISABLED:
break;
}
}
② 如何進行android中的啟動和關閉WiFi服務
一般是手機上的應用有聯網行為,而沒有網路可用的情況下的一種提示。 您可嘗試如下操作: 1. 重啟手機試試 2. 設定--應用程序管理器--全部--Android 系統/設定--清除數據試試 3. 換其他sim卡試試 4. 備份重要數據恢復出廠設置,排除第三方軟體影響 5.去設置里找到一個是否在Wifi斷開後自動連接移動數據的選項,把它設成了《否》。手機[設置]-[移動網路]-[網路切換提示],你可以試試。 6.還可以下載個360衛士,最好是最新版 , 先選擇(安全防護),在選擇(軟體流量管理),就出來一個軟體的列表 ,這時候你只需要打鉤,就可以管理軟體使用數據還是wifi上網了,希望對你有幫助
③ android wifi會自動切換
這個是自動設置的,在wifi信號很弱的情況下就牽動到移動數據,如果移動數據,有wifi連接的話就會自動斷開,這是設置的不是自動切換,在手動設置裡面設置成自動切換,他就會,在,wifi弱,和,有wifi的情況下,在,信號與數據之間,切換。
④ Android-WiFi詳解
WiFi是一種無線聯網技術,常見的是使用無線路由器。那麼在這個信號覆蓋的范圍內都可以採用WiFi連接的方式進行聯網。如果無線路由器連接了一個ADSL線路或者其他的聯網線路,則又被稱為「熱點」。
在Android中對WiFi操作,Android本身提供一些有用的包,在anroid.net.wifi包下面。
是一種特殊的 Ad-hoc LAN (一種支持點對點訪問的無線網路應用模式)的應用,一個無線網路至少由一個連接到有線網路的AP和若干無線工作站組成,這種配置稱為一個基本服務裝置。一群計算機設定相同的
BSS名稱,即可自成一個group,而此BSS名稱,即所謂BSSID。通常,手機WLAN中,bssid其實就是無線路由的MAC地址。
網路ID。
無線網路的安全認證模式。
SSID(Service Set Identif)用於標識無線區域網,SSID不同的無線網路是無法進行互訪的。
wifi無線連接的描述,包括接入點,網路連接狀態,隱藏的接入點,IP地址,連接速度,MAC地址,網路ID,信號強度等信息。這里簡單介紹一下這里的方法:
用來管理我們的wifi 連接,這里已經定義好了一些類,可以供我們使用,獲取WiFi網卡狀態。
WIFI網卡的狀態是由一系列的整形常量來表示的。
WiFi需求申請許可權,在AndroidManifest.xml文件中填寫。
1.打開WiFi
2.掃描WiFi信號
3.得到掃描WIFI結果
4.根據WIFI的名稱SSID判定指定WIFI是否已經配置好,配置好則返回其networkId,用於連接。之前嘗試了BSSID地址沒成功,所以只能使用SSID
5.如果需要連接的WIFI沒有配置好,即沒有保存密碼。則為指定名稱ssid的WIFI添加密碼信息psw,添加成功後返回給其分配的networId,同於連接
6.根據步驟6配置好需要連接的WIFI密碼信息後,下面通過networkId連接指定WIFI。在連接經過步驟6剛添加配置信息的WIFI信號之前需要重新執行下步驟4,得到新的配置好信息的列表。