概述
二,功能清单
-
打开和关闭wifi
-
扫描附近的wifi,并展示在ListView上
-
ListView下拉刷新
-
广播动态获取wifi的状态
-
通过输入密码连接到wifi
-
直接连接配置过的wifi
-
断开指定连接
-
开启和关闭热点
三,认识相关类和概念
三个关键类:
-
WifiManager(wifi统一管理,进行各种wifi操作)
-
WifiInfo(描述当前连接的wifi热点信息)
-
WiFiConfiguration(wifi网络配置信息)
-
ScanResult(描述扫描出的wifi热点信息)
四大关键术语:
-
[ SSID(描述wifi热点的名称)
-
BSSID(热点的MAC地址)
-
NetworkID(数字型的id)
-
RSSI(描述wifi信号强弱的值,官方叫做level)
四,注册广播接收者
五,广播接收者
/**
- 广播接收者
*/
public static class NetworkBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//获得WifiManager的实例对象
WifiManager wifiManager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
switch (intent.getAction()) {
//WIFI状态发生变化
case WifiManager.WIFI_STATE_CHANGED_ACTION:
switch (intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN)) {
case WifiManager.WIFI_STATE_ENABLING:
Log.i(TAG, “onReceive: 正在打开 WIFI…”);
break;
case WifiManager.WIFI_STATE_ENABLED:
Log.i(TAG, “onReceive: WIFI 已打开”);
mCallBackHandler.sendEmptyMessage(WIFI_STATE_ENABLED);
break;
case WifiManager.WIFI_STATE_DISABLING:
Log.i(TAG, “onReceive: 正在关闭 WIFI…”);
break;
case WifiManager.WIFI_STATE_DISABLED:
Log.i(TAG, “onReceive: WIFI 已关闭”);
mCallBackHandler.sendEmptyMessage(WIFI_STATE_DISABLED);
break;
case WifiManager.WIFI_STATE_UNKNOWN:
default:
Log.i(TAG, “onReceive: WIFI 状态未知!”);
break;
}
break;
// WIFI扫描完成
case WifiManager.SCAN_RESULTS_AVAILABLE_ACTION:
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
boolean isUpdated = intent.getBooleanExtra(WifiManager.EXTRA_RESULTS_UPDATED, false);
Log.i(TAG, "onReceive: WIFI扫描 " + (isUpdated ? “完成” : “未完成”));
} else {
Log.i(TAG, “onReceive: WIFI扫描完成”);
}
Message scanResultsMessage = Message.obtain();
scanResultsMessage.what = SCAN_RESULTS_UPDATED;
scanResultsMessage.obj = wifiManager.getScanResults();
mCallBackHandler.sendMessage(scanResultsMessage);
break;
//WIFI网络状态变化通知
case WifiManager.NETWORK_STATE_CHANGED_ACTION:
WifiInfo wifiInfo = intent.getParcelableExtra(WifiManager.EXTRA_WIFI_INFO);
if (null != wifiInfo && wifiInfo.getSupplicantState() == SupplicantState.COMPLETED) {
String ssid = wifiInfo.getSSID();
Log.i(TAG, "onReceive: 网络连接成功 ssid = " + ssid);
}
break;
//WIFI连接状态变化的时候
case WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION:
boolean isConnected = intent.getBooleanExtra(WifiManager.EXTRA_SUPPLICANT_CONNECTED, false);
Log.i(TAG, "onReceive: SUPPLICANT_CONNECTION_CHANGE_ACTION isConnected = " + isConnected);
break;
//wifi连接结果通知 WIFI连接请求状态发生改变
case WifiManager.SUPPLICANT_STATE_CHANGED_ACTION:
// 获取连接状态
SupplicantState supplicantState = intent.getParcelableExtra(WifiManager.EXTRA_NEW_STATE);
Message logMessage = Message.obtain();
logMessage.what = WIFI_CONNECT_LOG;
logMessage.obj = supplicantState.toString();
logMessage.obj = supplicantState.toString();
mCallBackHandler.sendMessage(logMessage);
switch (supplicantState) {
case INTERFACE_DISABLED: // 接口禁用
Log.i(TAG, “onReceive: INTERFACE_DISABLED 接口禁用”);
break;
case DISCONNECTED:// 断开连接
// Log.i(TAG, “onReceive: DISCONNECTED:// 断开连接”);
// break;
case INACTIVE: // 不活跃的
WifiInfo connectFailureInfo = wifiManager.getConnectionInfo();
Log.i(TAG, "onReceive: INACTIVE 不活跃的 connectFailureInfo = " + connectFailureInfo);
if (null != connectFailureInfo) {
Message wifiConnectFailureMessage = Message.obtain();
wifiConnectFailureMessage.what = WIFI_CONNECT_FAILURE;
wifiConnectFailureMessage.obj = connectFailureInfo.getSSID();
mCallBackHandler.sendMessage(wifiConnectFailureMessage);
// 断开连接
int networkId = connectFailureInfo.getNetworkId();
boolean isDisable = wifiManager.disableNetwork(networkId);
boolean isDisconnect = wifiManager.disconnect();
Log.i(TAG, "onReceive: 断开连接 = " + (isDisable && isDisconnect));
}
break;
case SCANNING: // 正在扫描
Log.i(TAG, “onReceive: SCANNING 正在扫描”);
break;
case AUTHENTICATING: // 正在验证
Log.i(TAG, “onReceive: AUTHENTICATING: // 正在验证”);
break;
case ASSOCIATING: // 正在关联
Log.i(TAG, “onReceive: ASSOCIATING: // 正在关联”);
break;
case ASSOCIATED: // 已经关联
Log.i(TAG, “onReceive: ASSOCIATED: // 已经关联”);
break;
case FOUR_WAY_HANDSHAKE: // 四次握手
Log.i(TAG, “onReceive: FOUR_WAY_HANDSHAKE:”);
break;
case GROUP_HANDSHAKE: // 组握手
Log.i(TAG, “onReceive: GROUP_HANDSHAKE:”);
break;
case COMPLETED: // 完成
Log.i(TAG, “onReceive: WIFI_CONNECT_SUCCESS: // 完成”);
WifiInfo connectSuccessInfo = wifiManager.getConnectionInfo();
if (null != connectSuccessInfo) {
Message wifiConnectSuccessMessage = Message.obtain();
wifiConnectSuccessMessage.what = WIFI_CONNECT_SUCCESS;
wifiConnectSuccessMessage.obj = connectSuccessInfo.getSSID();
mCallBackHandler.sendMessage(wifiConnectSuccessMessage);
}
break;
case DORMANT: // 休眠
Log.i(TAG, “onReceive: DORMANT:”);
break;
case UNINITIALIZED: // 未初始化
Log.i(TAG, “onReceive: UNINITIALIZED: // 未初始化”);
break;
case INVALID: // 无效的
Log.i(TAG, “onReceive: INVALID: // 无效的”);
break;
default:
break;
}
break;
《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享
default:
break;
}
}
}
相关API请参阅:官网WifiManagerAPI
六,权限
七,打开WIFI
/**
- 打开Wifi
*/
public void openWiFi() {
if (!isWifiEnabled() && null != mWifiManager) {
mWifiManager.setWifiEnabled(true);
}
}
八,关闭WIFI
/**
- 关闭Wifi
*/
public void closeWiFi() {
if (isWifiEnabled() && null != mWifiManager) {
mWifiManager.setWifiEnabled(false);
}
}
九,扫描附近的WIFI
/**
- 扫描附近的WIFI
*/
public void startScan() {
if (null != mWifiManager) {
mWifiManager.startScan();
}
}
十,获取WIFI列表
/**
-
获取最近扫描的WIFI热点
-
@return WIFI热点列表
*/
public List getScanResults() {
// 得到扫描结果
if (null != mWifiManager) {
return mWifiManager.getScanResults();
}
return null;
}
十一,通过密码连接到WIFI
/**
-
连接到开放网络
-
@param ssid 热点名
-
@return 配置是否成功
*/
public boolean connectOpenNetwork(@NonNull String ssid) {
// 获取networkId
int networkId = setOpenNetwork(ssid);
if (-1 != networkId) {
// 保存配置
boolean isSave = saveConfiguration();
// 连接网络
boolean isEnable = enableNetwork(networkId);
return isSave && isEnable;
}
return false;
最后
以上就是缥缈煎饼为你收集整理的Android入门项目(六,进阶学习的全部内容,希望文章能够帮你解决Android入门项目(六,进阶学习所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复