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,得到新的配置好信息的列表。