入门
Copy a setup prompt with the install steps and the full markdown guide for this plugin.
Set up this Capacitor plugin in the project.
Use the package manager already used by the project.
Install these package(s): `@capgo/capacitor-wifi`
Run the required Capacitor sync/update step after installation.
Read this markdown guide for the full setup steps: https://raw.githubusercontent.com/Cap-go/website/refs/heads/main/apps/docs/src/content/docs/zh/docs/plugins/wifi/getting-started.mdx
Use that guide for platform-specific steps, native file edits, permissions, config changes, imports, and usage setup.
If that guide references other docs pages, read them too.
-
安装软件包
Terminal window npm i @capgo/capacitor-wifiTerminal window pnpm add @capgo/capacitor-wifiTerminal window yarn add @capgo/capacitor-wifiTerminal window bun add @capgo/capacitor-wifi -
与原生项目同步
Terminal window npx cap syncTerminal window pnpm cap syncTerminal window yarn cap syncTerminal window bunx cap sync -
配置权限
Android:添加到
AndroidManifest.xml:<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />iOS:添加到
Info.plist:<key>NSLocationWhenInUseUsageDescription</key><string>We need location access to scan WiFi networks</string>
导入插件并管理 WiFi 连接:
import { CapacitorWifi } from '@capgo/capacitor-wifi';
// Get current WiFi connection infoconst getWifiInfo = async () => { const info = await CapacitorWifi.getWifiInfo(); console.log('Connected to:', info.ssid); console.log('IP Address:', info.ip);};
// Scan for available networksconst scanNetworks = async () => { const { networks } = await CapacitorWifi.scan(); networks.forEach(network => { console.log(`SSID: ${network.ssid}, Signal: ${network.level}`); });};
// Connect to a networkconst connectToWifi = async () => { await CapacitorWifi.connect({ ssid: 'MyNetwork', password: 'mypassword' });};API 参考
Section titled “API 参考”getWifiInfo()
Section titled “getWifiInfo()”获取有关当前连接的 WiFi 网络的信息。
interface WifiInfo { ssid: string; // Network name bssid: string; // MAC address of access point ip: string; // Device IP address frequency: number; // Network frequency (MHz) linkSpeed: number; // Connection speed (Mbps) signalStrength: number; // Signal strength (0-100)}
const info = await CapacitorWifi.getWifiInfo();扫描可用的 WiFi 网络。
interface WifiNetwork { ssid: string; // Network name bssid: string; // MAC address level: number; // Signal level (dBm) frequency: number; // Network frequency capabilities: string; // Security capabilities}
const { networks } = await CapacitorWifi.scan();连接(选项)
Section titled “连接(选项)”连接到 WiFi 网络。
interface ConnectOptions { ssid: string; // Network name password?: string; // Network password (if secured) isHiddenSsid?: boolean; // Whether SSID is hidden}
await CapacitorWifi.connect({ ssid: 'MyNetwork', password: 'mypassword'});断开连接()
Section titled “断开连接()”与当前 WiFi 网络断开连接。
await CapacitorWifi.disconnect();获取SSID()
Section titled “获取SSID()”获取当前连接网络的SSID。
const { ssid } = await CapacitorWifi.getSSID();console.log('Connected to:', ssid);获取IP()
Section titled “获取IP()”获取当前设备IP地址。
const { ip } = await CapacitorWifi.getIP();console.log('IP Address:', ip);import { CapacitorWifi } from '@capgo/capacitor-wifi';
export class WifiService { async getCurrentNetwork() { try { const info = await CapacitorWifi.getWifiInfo(); return { name: info.ssid, strength: this.getSignalQuality(info.signalStrength), speed: `${info.linkSpeed} Mbps`, ip: info.ip }; } catch (error) { console.error('Failed to get WiFi info:', error); return null; } }
async scanAndConnect(targetSsid: string, password: string) { try { // Scan for networks const { networks } = await CapacitorWifi.scan();
// Find target network const targetNetwork = networks.find(n => n.ssid === targetSsid);
if (!targetNetwork) { throw new Error(`Network ${targetSsid} not found`); }
console.log(`Found network with signal: ${targetNetwork.level} dBm`);
// Connect to network await CapacitorWifi.connect({ ssid: targetSsid, password: password });
console.log('Connected successfully!'); return true; } catch (error) { console.error('Connection failed:', error); return false; } }
async findBestNetwork(preferredNetworks: string[]) { const { networks } = await CapacitorWifi.scan();
// Filter to preferred networks const available = networks.filter(n => preferredNetworks.includes(n.ssid) );
if (available.length === 0) { return null; }
// Sort by signal strength available.sort((a, b) => b.level - a.level);
return available[0]; }
async monitorConnection(callback: (info: WifiInfo | null) => void) { const checkConnection = async () => { try { const info = await CapacitorWifi.getWifiInfo(); callback(info); } catch (error) { callback(null); } };
// Check every 5 seconds const interval = setInterval(checkConnection, 5000);
// Initial check await checkConnection();
// Return cleanup function return () => clearInterval(interval); }
private getSignalQuality(strength: number): string { if (strength >= 80) return 'Excellent'; if (strength >= 60) return 'Good'; if (strength >= 40) return 'Fair'; return 'Poor'; }
async getNetworkSecurity(ssid: string): Promise<string> { const { networks } = await CapacitorWifi.scan(); const network = networks.find(n => n.ssid === ssid);
if (!network) { return 'Unknown'; }
const caps = network.capabilities.toLowerCase();
if (caps.includes('wpa3')) return 'WPA3'; if (caps.includes('wpa2')) return 'WPA2'; if (caps.includes('wpa')) return 'WPA'; if (caps.includes('wep')) return 'WEP';
return 'Open'; }}网络质量评估
Section titled “网络质量评估”const assessNetworkQuality = async () => { const info = await CapacitorWifi.getWifiInfo();
const quality = { signal: info.signalStrength >= 70 ? 'Excellent' : info.signalStrength >= 50 ? 'Good' : info.signalStrength >= 30 ? 'Fair' : 'Poor', speed: info.linkSpeed >= 100 ? 'Fast' : info.linkSpeed >= 50 ? 'Medium' : 'Slow', frequency: info.frequency >= 5000 ? '5GHz' : '2.4GHz' };
console.log('Network Quality:', quality); return quality;};自动连接到首选网络
Section titled “自动连接到首选网络”const autoConnect = async (preferredNetworks: Array<{ ssid: string, password: string }>) => { const { networks } = await CapacitorWifi.scan();
for (const preferred of preferredNetworks) { const found = networks.find(n => n.ssid === preferred.ssid);
if (found) { try { await CapacitorWifi.connect({ ssid: preferred.ssid, password: preferred.password }); console.log(`Connected to ${preferred.ssid}`); return true; } catch (error) { console.error(`Failed to connect to ${preferred.ssid}`); } } }
return false;};网络变化检测
Section titled “网络变化检测”class NetworkMonitor { private currentSsid: string | null = null; private listeners: Array<(ssid: string | null) => void> = [];
async start() { setInterval(async () => { try { const { ssid } = await CapacitorWifi.getSSID();
if (ssid !== this.currentSsid) { this.currentSsid = ssid; this.notifyListeners(ssid); } } catch (error) { if (this.currentSsid !== null) { this.currentSsid = null; this.notifyListeners(null); } } }, 3000); }
onNetworkChange(callback: (ssid: string | null) => void) { this.listeners.push(callback); }
private notifyListeners(ssid: string | null) { this.listeners.forEach(listener => listener(ssid)); }}- 权限:扫描网络前请求位置权限
- 错误处理:始终将 WiFi 操作包装在 try-catch 块中
- 用户反馈:网络运行时显示加载指示器
- 安全:切勿以纯文本形式存储 WiFi 密码
- 测试:在真实设备上进行测试,因为 WiFi API 可能无法在模拟器中运行
- 需要位置权限才能扫描网络
- 无法以编程方式连接到网络(将打开“设置”)
- 对网络详细信息的访问受到限制
Android
Section titled “Android”- 完全编程式 WiFi 控制
- 需要位置权限才能进行网络扫描
- 可以以编程方式连接/断开连接
扫描返回空:检查位置权限是否已授予 无法连接到网络:验证密码是否正确且网络是否在范围内 getWifiInfo 失败:确保设备已连接到 WiFi 网络 权限被拒绝:向平台配置文件添加所需的权限