2.wifi开发

本文详细介绍如何使用Android系统连接WiFi,包括开启WiFi、搜索并获取WiFi列表、连接WiFi及验证连接状态等步骤。提供了具体的代码实现,如创建WiFi配置、设置密码类型等。


1.打开wif

2.搜索wifi,得到wifi列表

3.连接wifi

4.连接成功,连接失败

5.忘记wifi密码


1.

// 取得WifiManager对象

mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);

mWifiManager.setWifiEnabled(true);

2.

mWifiManager.startScan();
filter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);

  扫描结果监听

mWifiManager.getScanResults();

3.

public int addWiFiNetwork(String SSID, String password, Data type) {


    // 创建WiFi配置
    WifiConfiguration configuration = createWifiConfig(SSID, password, type);

    // 添加WIFI网络
    int networkId = mWifiManager.addNetwork(configuration);

    if (networkId == -1) {
        return -1;
    }

    // 使WIFI网络有效
    mWifiManager.enableNetwork(networkId, true);
    mWifiManager.saveConfiguration();
    return networkId;
}
//类型我看了一下源码,一般都只有3种  1 没密码  2 wep 3 wpa ,下面的创建config方式是网络上别人写的

private WifiConfiguration createWifiConfig(String SSID, String password, Data type) {
    WifiConfiguration config = new WifiConfiguration();
    config.allowedAuthAlgorithms.clear();
    config.allowedGroupCiphers.clear();
    config.allowedKeyManagement.clear();
    config.allowedPairwiseCiphers.clear();
    config.allowedProtocols.clear();
    config.SSID = "\"" + SSID + "\"";

    if (type == Data.WIFI_CIPHER_NOPASS) {
        config.wepKeys[0] = "";
        config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
        config.wepTxKeyIndex = 0;
    } else if (type == Data.WIFI_CIPHER_WEP) {
        config.hiddenSSID = true;
        config.wepKeys[0] = "\"" + password + "\"";
        config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.SHARED);
        config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
        config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
        config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
        config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);
        config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
        config.wepTxKeyIndex = 0;
    } else if (type == Data.WIFI_CIPHER_WPA) {
        config.preSharedKey = "\"" + password + "\"";
        config.hiddenSSID = true;
        config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
        config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
        config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
        config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
        config.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
        config.status = WifiConfiguration.Status.ENABLED;
    } else if (type == Data.WIFI_CIPHER_WPA2) {
        config.preSharedKey = "\"" + password + "\"";
        config.hiddenSSID = true;
        config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
        config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
        config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
        config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
        config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
        config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
        config.status = WifiConfiguration.Status.ENABLED;
    }

    return config;
}

4.

wifi连接成功的广播

WifiManager.NETWORK_STATE_CHANGED_ACTION


NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
if (null != info && info.getDetailedState() == NetworkInfo.DetailedState.CONNECTED) {
   //成功连接
}

wifi连接失败的广播

WifiManager.SUPPLICANT_STATE_CHANGED_ACTION
int error = intent.getIntExtra(WifiManager.EXTRA_SUPPLICANT_ERROR, 0);
if (WifiManager.ERROR_AUTHENTICATING == error) {
    //密码错误,认证失败
  
}

5.

mWifiManager.removeNetwork(networkId);
mWifiManager.saveConfiguration();



### 功能 `android.hardware.wifi` 相关类和接口主要用于在 Android 系统中管理和操作 Wi-Fi 功能。它允许应用程序与设备的 Wi-Fi 硬件进行交互,实现诸如连接到 Wi-Fi 网络、扫描可用的 Wi-Fi 网络、获取 Wi-Fi 连接状态等功能。例如,`IWifi.java` 可能是用于与 Wi-Fi 硬件接口进行通信的 Java 接口,通过它可以调用底层的 Wi-Fi 功能服务 [^1]。 ### 使用方法 在 Android 开发中,使用 `android.hardware.wifi` 相关功能通常需要以下步骤: 1. 获取 `WifiManager` 实例: ```java WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); ``` 2. 检查 Wi-Fi 状态并开启 Wi-Fi: ```java if (!wifiManager.isWifiEnabled()) { wifiManager.setWifiEnabled(true); } ``` 3. 扫描可用的 Wi-Fi 网络: ```java wifiManager.startScan(); List<ScanResult> scanResults = wifiManager.getScanResults(); ``` 4. 连接到指定的 Wi-Fi 网络: ```java WifiConfiguration wifiConfig = new WifiConfiguration(); wifiConfig.SSID = "\"Your_WiFi_SSID\""; wifiConfig.preSharedKey = "\"Your_WiFi_Password\""; int netId = wifiManager.addNetwork(wifiConfig); wifiManager.disconnect(); wifiManager.enableNetwork(netId, true); wifiManager.reconnect(); ``` ### 常见问题及解决办法 #### 1. 不同 Android 版本 Wi-Fi 流程差异问题 不同 Android 版本在 `android.hardware.wifi` 相关的底层实现上可能存在差异。例如,Android 9 Pie 走的是 `hardware/interfaces/wifi/1.2` 中的 `default/wifi.cpp`,而 Android 10(Android Q)走的流程对应的是 `hardware/interfaces/wifi/1.3/default/wifi.cpp` [^2]。 解决办法:开发时需要针对不同的 Android 版本进行适配,根据版本号选择合适的实现路径。 #### 2. Wi-Fi 权限问题 应用程序在使用 `android.hardware.wifi` 功能时,可能会遇到权限不足的问题,导致无法正常扫描或连接 Wi-Fi 网络。 解决办法:在 `AndroidManifest.xml` 中添加必要的权限: ```xml <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> ``` 如果是 Android 6.0(API 级别 23)及以上版本,还需要在运行时请求权限。 #### 3. 连接失败问题 可能由于密码错误、网络不可用等原因导致 Wi-Fi 连接失败。 解决办法:检查输入的 Wi-Fi 密码是否正确,确保目标 Wi-Fi 网络正常工作。可以通过捕获异常并进行相应的错误处理: ```java try { // 连接 Wi-Fi 代码 } catch (Exception e) { e.printStackTrace(); // 处理连接失败的情况 } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值