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

Android Kotlin(Android12/SDK33)获取WiFi信号强度(dBm)咨询

Android 12(SDK 33)下获取WiFi信号强度(dBm)的适配方案(Flutter插件开发)

一、权限配置

首先在AndroidManifest.xml中添加必要权限:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

注意:Android 12及以上,获取WiFi信号强度必须申请ACCESS_FINE_LOCATION,即使仅获取当前连接的WiFi,这是系统强制要求的权限限制。

二、Kotlin端核心实现代码

通过ConnectivityManager和NetworkCapabilities获取当前WiFi连接的信号强度,替代已废弃的WifiManager相关API:

import android.content.Context
import android.net.ConnectivityManager
import android.net.NetworkCapabilities

private fun getCurrentWifiSignalDbm(context: Context): Int? {
    val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
    
    // 获取当前活跃网络
    val activeNetwork = connectivityManager.activeNetwork ?: return null
    val networkCapabilities = connectivityManager.getNetworkCapabilities(activeNetwork) ?: return null
    
    // 验证当前网络是否为WiFi
    if (!networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {
        return null
    }
    
    // 获取SignalStrength并提取RSSI(即dBm值)
    val signalStrength = networkCapabilities.signalStrength ?: return null
    return signalStrength.rssi
}

signalStrength.rssi返回的dBm值范围通常是-30(信号极强)到-100(信号极弱),返回-200表示无效信号值。

三、Flutter与Android端通信(MethodChannel实现)

在MainActivity中配置MethodChannel,将信号强度传递给Flutter端:

import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugin.common.MethodChannel

class MainActivity : FlutterActivity() {
    private val CHANNEL = "your.package.name/wifi_signal"

    override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
        super.configureFlutterEngine(flutterEngine)
        MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL).setMethodCallHandler { call, result ->
            when (call.method) {
                "getWifiDbm" -> {
                    // 先检查权限是否已授予
                    if (checkSelfPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) != android.content.pm.PackageManager.PERMISSION_GRANTED) {
                        result.error("PERMISSION_DENIED", "需要授予位置权限以获取WiFi信号强度", null)
                        return@setMethodCallHandler
                    }
                    
                    val dbm = getCurrentWifiSignalDbm(this)
                    dbm?.let {
                        result.success(it)
                    } ?: run {
                        result.error("NO_WIFI_CONNECTION", "未连接到WiFi网络", null)
                    }
                }
                else -> result.notImplemented()
            }
        }
    }

    // 上面的getCurrentWifiSignalDbm方法放在这里
    private fun getCurrentWifiSignalDbm(context: Context): Int? {
        val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
        
        val activeNetwork = connectivityManager.activeNetwork ?: return null
        val networkCapabilities = connectivityManager.getNetworkCapabilities(activeNetwork) ?: return null
        
        if (!networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {
            return null
        }
        
        val signalStrength = networkCapabilities.signalStrength ?: return null
        return signalStrength.rssi
    }
}

四、Flutter端调用代码

import 'package:flutter/services.dart';

class WifiSignalUtils {
  static const MethodChannel _channel = MethodChannel('your.package.name/wifi_signal');

  static Future<int?> getWifiSignalDbm() async {
    try {
      final int? dbm = await _channel.invokeMethod('getWifiDbm');
      return dbm;
    } on PlatformException catch (e) {
      print("获取WiFi信号强度失败: ${e.message}");
      return null;
    }
  }
}

注意事项

  1. 动态权限申请:在Flutter端需要先请求ACCESS_FINE_LOCATION权限,可以使用permission_handler插件来简化权限申请流程。
  2. 信号更新:如果需要实时监听信号强度变化,可以注册ConnectivityManager.NetworkCallback,在网络状态变化时重新获取信号强度。

内容的提问来源于stack exchange,提问作者Manh Huynh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 16:16:31