The @capgo/capacitor-wifi package allows you to manage WiFi connectivity in your Capacitor app. In this tutorial, we'll guide you through installing and using this package to scan networks, connect to WiFi, and monitor connection status.
To install the @capgo/capacitor-wifi package, run the following command in your project's root directory:
npm install @capgo/capacitor-wifi
npx cap sync
Add the following permissions to your AndroidManifest.xml file:
<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" />
Add the following to your Info.plist file:
<key>NSLocationWhenInUseUsageDescription</key>
<string>We need location access to scan WiFi networks</string>
The @capgo/capacitor-wifi package provides the following API methods:
This method retrieves information about the currently connected WiFi network.
import { CapacitorWifi } from '@capgo/capacitor-wifi';
async function getWifiInfo() {
try {
const info = await CapacitorWifi.getWifiInfo();
console.log('SSID:', info.ssid);
console.log('BSSID:', info.bssid);
console.log('IP Address:', info.ip);
console.log('Frequency:', info.frequency, 'MHz');
console.log('Link Speed:', info.linkSpeed, 'Mbps');
console.log('Signal Strength:', info.signalStrength, '%');
} catch (error) {
console.error('Failed to get WiFi info:', error);
}
}
This method scans for available WiFi networks.
import { CapacitorWifi } from '@capgo/capacitor-wifi';
async function scanNetworks() {
try {
const { networks } = await CapacitorWifi.scan();
networks.forEach(network => {
console.log('SSID:', network.ssid);
console.log('Signal Level:', network.level, 'dBm');
console.log('Frequency:', network.frequency, 'MHz');
console.log('Security:', network.capabilities);
console.log('---');
});
return networks;
} catch (error) {
console.error('Scan failed:', error);
}
}
This method connects to a WiFi network.
import { CapacitorWifi } from '@capgo/capacitor-wifi';
async function connectToNetwork() {
const options = {
ssid: 'MyNetwork',
password: 'mypassword',
isHiddenSsid: false
};
try {
await CapacitorWifi.connect(options);
console.log('Connected successfully!');
} catch (error) {
console.error('Connection failed:', error);
}
}
Options:
ssid (string, required): Network namepassword (string, optional): Network password for secured networksisHiddenSsid (boolean, optional): Whether the SSID is hiddenThis method disconnects from the current WiFi network.
import { CapacitorWifi } from '@capgo/capacitor-wifi';
async function disconnectFromNetwork() {
try {
await CapacitorWifi.disconnect();
console.log('Disconnected successfully');
} catch (error) {
console.error('Disconnect failed:', error);
}
}
This method retrieves the SSID of the currently connected network.
import { CapacitorWifi } from '@capgo/capacitor-wifi';
async function getCurrentSSID() {
try {
const { ssid } = await CapacitorWifi.getSSID();
console.log('Connected to:', ssid);
return ssid;
} catch (error) {
console.error('Failed to get SSID:', error);
}
}
This method retrieves the current device IP address.
import { CapacitorWifi } from '@capgo/capacitor-wifi';
async function getIPAddress() {
try {
const { ip } = await CapacitorWifi.getIP();
console.log('IP Address:', ip);
return ip;
} catch (error) {
console.error('Failed to get IP:', error);
}
}
import { CapacitorWifi } from '@capgo/capacitor-wifi';
export class WifiManager {
async getCurrentNetwork() {
try {
const info = await CapacitorWifi.getWifiInfo();
return {
name: info.ssid,
strength: this.getSignalQuality(info.signalStrength),
speed: `${info.linkSpeed} Mbps`,
frequency: info.frequency >= 5000 ? '5GHz' : '2.4GHz',
ip: info.ip
};
} catch (error) {
console.error('Failed to get network info:', error);
return null;
}
}
async scanAndConnect(ssid, password) {
try {
// First, scan for networks
const { networks } = await CapacitorWifi.scan();
// Find target network
const targetNetwork = networks.find(n => n.ssid === ssid);
if (!targetNetwork) {
throw new Error(`Network "${ssid}" not found`);
}
console.log(`Found network with signal: ${targetNetwork.level} dBm`);
// Connect to the network
await CapacitorWifi.connect({
ssid,
password
});
console.log('Successfully connected!');
return true;
} catch (error) {
console.error('Connection failed:', error);
return false;
}
}
async findStrongestNetwork(preferredNetworks) {
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 (highest first)
available.sort((a, b) => b.level - a.level);
return {
ssid: available[0].ssid,
signalLevel: available[0].level
};
}
getSignalQuality(strength) {
if (strength >= 80) return 'Excellent';
if (strength >= 60) return 'Good';
if (strength >= 40) return 'Fair';
return 'Poor';
}
getSecurityType(capabilities) {
const caps = 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';
}
}
// Usage
const wifiManager = new WifiManager();
// Get current network info
const network = await wifiManager.getCurrentNetwork();
console.log('Current network:', network);
// Scan and connect
await wifiManager.scanAndConnect('MyNetwork', 'password123');
// Find strongest preferred network
const strongest = await wifiManager.findStrongestNetwork([
'HomeWiFi',
'OfficeWiFi'
]);
import { CapacitorWifi } from '@capgo/capacitor-wifi';
export class NetworkMonitor {
constructor() {
this.currentSsid = null;
this.listeners = [];
this.intervalId = null;
}
start(intervalMs = 5000) {
this.stop(); // Clear any existing interval
this.intervalId = setInterval(async () => {
await this.checkConnection();
}, intervalMs);
// Initial check
this.checkConnection();
}
stop() {
if (this.intervalId) {
clearInterval(this.intervalId);
this.intervalId = null;
}
}
async checkConnection() {
try {
const { ssid } = await CapacitorWifi.getSSID();
if (ssid !== this.currentSsid) {
const oldSsid = this.currentSsid;
this.currentSsid = ssid;
this.notifyListeners({
type: 'change',
oldSsid,
newSsid: ssid
});
}
} catch (error) {
if (this.currentSsid !== null) {
const oldSsid = this.currentSsid;
this.currentSsid = null;
this.notifyListeners({
type: 'disconnected',
oldSsid
});
}
}
}
onNetworkChange(callback) {
this.listeners.push(callback);
// Return unsubscribe function
return () => {
const index = this.listeners.indexOf(callback);
if (index > -1) {
this.listeners.splice(index, 1);
}
};
}
notifyListeners(event) {
this.listeners.forEach(listener => listener(event));
}
}
// Usage
const monitor = new NetworkMonitor();
// Start monitoring
monitor.start(3000); // Check every 3 seconds
// Listen for network changes
const unsubscribe = monitor.onNetworkChange((event) => {
if (event.type === 'change') {
console.log(`Network changed from ${event.oldSsid} to ${event.newSsid}`);
} else if (event.type === 'disconnected') {
console.log(`Disconnected from ${event.oldSsid}`);
}
});
// Stop monitoring when done
// monitor.stop();
// unsubscribe();
import { CapacitorWifi } from '@capgo/capacitor-wifi';
export class AutoConnectManager {
constructor(preferredNetworks) {
// preferredNetworks: [{ ssid: 'Network1', password: 'pass1' }, ...]
this.preferredNetworks = preferredNetworks;
}
async tryConnect() {
try {
// Scan for networks
const { networks } = await CapacitorWifi.scan();
// Try to connect to preferred networks in order
for (const preferred of this.preferredNetworks) {
const found = networks.find(n => n.ssid === preferred.ssid);
if (found) {
console.log(`Attempting to connect to ${preferred.ssid}...`);
try {
await CapacitorWifi.connect({
ssid: preferred.ssid,
password: preferred.password
});
console.log(`Successfully connected to ${preferred.ssid}`);
return {
success: true,
ssid: preferred.ssid
};
} catch (error) {
console.error(`Failed to connect to ${preferred.ssid}:`, error);
}
}
}
return {
success: false,
error: 'No preferred networks found'
};
} catch (error) {
console.error('Auto-connect failed:', error);
return {
success: false,
error: error.message
};
}
}
async connectToBest() {
const { networks } = await CapacitorWifi.scan();
// Filter to preferred networks
const available = networks
.filter(n => this.preferredNetworks.some(p => p.ssid === n.ssid))
.sort((a, b) => b.level - a.level); // Sort by signal strength
if (available.length === 0) {
throw new Error('No preferred networks in range');
}
const best = available[0];
const credentials = this.preferredNetworks.find(p => p.ssid === best.ssid);
await CapacitorWifi.connect({
ssid: best.ssid,
password: credentials.password
});
return best.ssid;
}
}
// Usage
const autoConnect = new AutoConnectManager([
{ ssid: 'HomeWiFi', password: 'homepass123' },
{ ssid: 'OfficeWiFi', password: 'officepass456' }
]);
// Try to connect to any preferred network
const result = await autoConnect.tryConnect();
// Or connect to the strongest preferred network
const connectedSsid = await autoConnect.connectToBest();
The @capgo/capacitor-wifi package provides comprehensive WiFi management capabilities for your Capacitor app. With features for scanning networks, connecting programmatically (on Android), and monitoring connection status, you can create robust WiFi-dependent features in your application.