当前位置:首页 > 行业动态 > 正文

安卓和wifi通信

安卓系统通过WifiManager管理WiFi模块,支持IEEE 802.11协议实现无线通信,设备可扫描热点、完成认证及数据交互,支持2.4/5GHz频段,具备智能切换、网络共享及安全加密功能

安卓与WiFi通信核心要点

WiFi基础

WiFi是一种基于IEEE 802.11标准的无线局域网技术,安卓设备通过内置WiFi模块实现以下功能:

  • 扫描可用网络:获取周围WiFi热点列表
  • 连接认证:输入密码或使用已保存配置
  • 数据传输:通过IP协议进行网络通信
  • 状态管理:监控连接状态(连接中/已连接/断开)

安卓WiFi管理API

功能分类 核心类/方法 适用场景
基础状态获取 WifiManager.isWifiEnabled() 判断WiFi是否开启
WifiManager.getConnectionInfo() 获取当前连接信息
网络扫描 WifiManager.startScan() 触发WiFi网络扫描
WifiManager.getScanResults() 获取扫描结果列表
网络连接 WifiConfigurator.connect() Android 11+ 动态连接(需权限)
WifiNetworkSuggestion Android 10+ 网络建议(跨进程)
状态监听 WifiManager.addNetworkStateListener() 实时监听网络状态变化

完整连接流程(以Android 10+为例)

  1. 权限申请

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
  2. 创建网络建议

    安卓和wifi通信  第1张

    WifiNetworkSuggestion suggestion = new WifiNetworkSuggestion.Builder()
        .setSsid("TARGET_SSID")
        .setWpa2Passphrase("password")
        .build();
  3. 提交建议

    wifiManager.addNetworkSuggestions(Collections.singletonList(suggestion));
  4. 监听连接状态

    wifiManager.addNetworkStateListener(new NetworkStateListener() {
        @Override
        public void onNetworkStateChanged(NetworkInfo networkInfo) {
            // 处理状态变化
        }
    });

关键权限管理

权限类型 作用范围 申请时机
位置权限 Android 6.0+ 扫描/连接必需 运行时动态申请
CHANGE_WIFI_STATE 修改WiFi状态(开启/关闭) 安装时声明
ACCESS_WIFI_STATE 读取WiFi状态 安装时声明
ACCESS_BACKGROUND_LOCATION Android 10+ 后台连接 需在后台服务中声明

常见问题解决方案

问题1:Android 10+ 后台无法自动连接WiFi
解决方案

  • 添加requestLegacyBackgroundState()临时方案(仅限targetSdk<30)
  • 使用WorkManager在前台服务中处理连接逻辑
  • 引导用户手动添加网络(通过WifiNetworkSuggestion

问题2:WiFi扫描始终返回空列表
排查步骤

  1. 检查是否已声明ACCESS_FINE_LOCATION权限
  2. 确认设备硬件WiFi开关已打开
  3. 验证startScan()getScanResults()调用间隔(建议>500ms)
  4. 检查设备是否处于飞行模式

相关问题与解答

Q1:如何检测当前是否连接到指定WiFi?
A:通过WifiInfo获取BSSID比对:

WifiInfo info = wifiManager.getConnectionInfo();
boolean isConnected = "XX:XX:XX:XX:XX".equals(info.getBSSID());

Q2:Android 13如何适配WiFi权限变更?
A:需注意两点:

  1. 后台扫描需NEARBY_WIFI_SCANNING权限(替代位置权限)
  2. 使用WifiManager.getAvailableFeatures()检查设备支持情况
0