You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React-Native中如何处理expo-barcode-scanner扫描到的Wi-Fi类型QR码

React Native处理WiFi类非链接二维码的实现方案

React Native 本身没有内置专门处理非链接格式二维码的API,这类自定义格式的二维码都需要你先手动解析协议内容,再调用对应原生能力实现需求,具体实现步骤如下:

步骤1:解析WiFi二维码的标准格式

你扫描得到的WiFi二维码内容遵循ZXing定义的标准WiFi二维码协议,结构为:WIFI:T:[加密类型];S:[WiFi名称];P:[WiFi密码];H:[是否为隐藏网络];;,你可以写个简单的解析函数提取字段:

// 输入扫描得到的原始data字符串,返回解析后的WiFi信息对象
const parseWifiQrData = (rawData) => {
  const wifiInfo = {};
  if (!rawData.startsWith('WIFI:')) return null;
  // 移除前缀和结尾的多余分号
  const content = rawData.slice(5).replace(/;+$/, '');
  const keyValuePairs = content.split(';');
  
  keyValuePairs.forEach(item => {
    const [key, value] = item.split(':');
    switch(key) {
      case 'T': 
        wifiInfo.security = value; 
        break;
      case 'S': 
        wifiInfo.ssid = value; 
        break;
      case 'P': 
        wifiInfo.password = value; 
        break;
      case 'H': 
        wifiInfo.isHidden = value === 'true'; 
        break;
    }
  });
  return wifiInfo.ssid ? wifiInfo : null;
}

步骤2:调用WiFi连接能力实现自动连接

因为你使用的是Expo生态,推荐直接用适配Expo的expo-wifi库实现WiFi连接,无需原生修改:

  • 先安装依赖:npx expo install expo-wifi
  • 在app.json中配置对应权限:
    安卓端添加ACCESS_FINE_LOCATION、CHANGE_WIFI_STATE权限,iOS端添加NSLocalNetworkUsageDescription权限说明
  • 连接逻辑示例:
import * as Wifi from 'expo-wifi';

// 扫描成功后的处理逻辑
const handleBarCodeScanned = async ({ type, data }) => {
  if (type !== 'org.iso.QRCode') return;
  // 先判断是不是WiFi格式二维码
  if (data.startsWith('WIFI:')) {
    const wifiInfo = parseWifiQrData(data);
    if (!wifiInfo) return;
    try {
      await Wifi.connectAsync(wifiInfo.ssid, {
        password: wifiInfo.password,
        type: wifiInfo.security === 'WPA' ? Wifi.WiFiSecurityType.WPA : Wifi.WiFiSecurityType.WEP,
        isHidden: wifiInfo.isHidden || false
      });
      console.log('WiFi连接成功');
    } catch (error) {
      console.log('WiFi连接失败:', error.message);
    }
  } else {
    // 其他类型二维码的处理逻辑
    Linking.openURL(data).catch(err => console.log('非链接格式二维码', err));
  }
};

注意事项

  • 安卓10及以上版本需要用户授予位置权限才能调用WiFi连接接口
  • iOS端需要在开发者账号中开启Access WiFi Information能力才能正常调用连接方法

内容的提问来源于stack exchange,提问作者Jose Bernardo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 09:54:05