在安卓设备中,网络信号强度主要通过 TelephonyManager
或 WifiManager
获取,具体取决于网络类型(移动数据或WiFi),以下是关键步骤:
READ_PHONE_STATE
权限。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) } }
// 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开始,getSignalStrength()
方法被限制,只能获取粗略值(如 SIGNAL_STRENGTH_GOOD
、SIGNAL_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(百分比) } } });
解答:
WifiManager.isWifiEnabled()
和 connectivityManager.getActiveNetworkInfo().getType()
判断。TelephonyManager.getNetworkType()
或 NetworkCapabilities.getTransportType()
获取具体类型(如 NETWORK_TYPE_LTE
表示4G,NETWORK_TYPE_NR
表示5G)。READ_PHONE_STATE
权限怎么办?解答: