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

安卓判断网络信号强度

Android通过TelephonyManager.getSignalStrength()获取网络信号强度,需申请

获取网络信号强度的方法

在安卓设备中,网络信号强度主要通过 TelephonyManagerWifiManager 获取,具体取决于网络类型(移动数据或WiFi),以下是关键步骤:

安卓判断网络信号强度

权限配置

  • 移动网络信号:需声明 READ_PHONE_STATE 权限。
  • WiFi信号:需声明 ACCESS_WIFI_STATE 权限。
  • 注意READ_PHONE_STATE 属于危险权限,需动态申请。
<!-AndroidManifest.xml -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

获取移动网络信号强度

// Java示例
TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
List<CellInfo> cellInfoList = telephonyManager.getAllCellInfo();
for (CellInfo info : cellInfoList) {
    if (info instanceof CellInfoLte) {
        int signalStrength = ((CellInfoLte) info).getRssi(); // 取值范围:0~-120(dBm)
    }
}
// Kotlin示例
val telephonyManager = getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
val cellInfoList = telephonyManager.allCellInfo
cellInfoList.forEach { info ->
    if (info is CellInfoLte) {
        val signalStrength = info.rsrp // Android Q+ 推荐使用Rsrp(取值范围:-140~-44)
    }
}

获取WiFi信号强度

// Java示例
WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
int wifiSignal = wifiInfo.getRssi(); // 取值范围:0~-100(dBm)

信号强度与质量的映射关系

信号强度(dBm) 信号质量描述 移动网络信号等级(通常为1~5级)
-50 ~ -70 极强 5
-70 ~ -85 4
-85 ~ -100 中等 3
-100 ~ -115 2
< -115 极弱/无信号 1 或无信号

Android Q(API 29)及以上的限制

从Android Q开始,getSignalStrength() 方法被限制,只能获取粗略值(如 SIGNAL_STRENGTH_GOODSIGNAL_STRENGTH_MODERATE等),无法直接获取原始dBm值,此时需改用 NetworkCallback 监听网络状态:

// 注册NetworkCallback
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkRequest request = new NetworkRequest.Builder().build();
connectivityManager.registerNetworkCallback(request, new ConnectivityManager.NetworkCallback() {
    @Override
    public void onAvailable(Network network) {
        super.onAvailable(network);
        // 通过NetworkCapabilities获取信号信息
        NetworkCapabilities capabilities = connectivityManager.getNetworkCapabilities(network);
        if (capabilities != null) {
            int level = capabilities.getSignalStrength(); // 0~100(百分比)
        }
    }
});

实际应用场景

  1. 实时显示信号图标:根据信号强度动态调整UI中的信号格数。
  2. 网络质量预警:当信号低于阈值时,提示用户切换网络或暂停数据传输。
  3. 自动切换网络:结合信号强度和网络类型,选择最优网络(如从4G切换到WiFi)。

相关问题与解答

问题1:如何判断当前使用的是4G/5G还是WiFi?

解答

安卓判断网络信号强度

  • WiFi:通过 WifiManager.isWifiEnabled()connectivityManager.getActiveNetworkInfo().getType() 判断。
  • 移动网络:通过 TelephonyManager.getNetworkType()NetworkCapabilities.getTransportType() 获取具体类型(如 NETWORK_TYPE_LTE 表示4G,NETWORK_TYPE_NR 表示5G)。

问题2:如果用户拒绝授予READ_PHONE_STATE权限怎么办?

解答

安卓判断网络信号强度

  • 提供降级方案:若无法获取移动信号强度,仅依赖WiFi信号或通过网络质量回调间接判断。
  • 提示用户必要性:在请求权限时说明用途(如“需要获取信号强度以优化网络连接”