android - 如何检测安卓应用程序中的慢速互联网连接
问题描述
我想检测手机的互联网连接速度是慢还是高速互联网。
现在他们已经弃用NetworkInfo
并建议我们应该使用ConnectivityManager#getNetworkCapabilities
它我能够获得信号强度但无法弄清楚如何使用返回的整数值networkCapabilities.getSignalStrength()
它返回一个整数值,我得到这些值(-39、-71、-31)。我的问题是我们应该如何定义信号强度好/差。
这是我获取信号强度的代码:
ConnectivityManager cm = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);
Network activeNetwork = cm.getActiveNetwork();
NetworkCapabilities networkCapabilities = cm.getNetworkCapabilities(activeNetwork);
int signalStrength = networkCapabilities.getSignalStrength();
解决方案
首先,这是一种指导性方法,而不是对问题的直接回答。
int signalStrength = networkCapabilities.getSignalStrength();
文件:
这是一个有符号整数,值越高表示信号越强。确切的单位取决于承载。例如,Wi-Fi 使用 wifi 代码报告的相同 RSSI 单位。
这意味着signalStrength
持有与信号承载相关的值;例如,如果承载是 WiFi,signalStrength
则将反映相同的 WiFi RSSI 单元。
RSSI 或“接收信号强度指示器”是衡量您的设备从接入点或路由器接收信号的能力的指标。该值有助于确定您是否有足够的信号来获得良好的无线连接。
因此,您需要将这些单位映射到某个质量指标,以了解信号是否弱/强。这是依赖于通信/信号而不是编程的观点......这个线程和这个线程可能会在 WiFi 承载的情况下为您提供帮助。
但是您需要根据它们的 RSSI 单位为其他类型的信号承载定制此质量级别。
例如GSM 信号,您可以使用CellSignalStrengthGsm,它具有getRssi()
CellSignalStrengthLte
用于LTE等。
您还可以从 android.telephony API 的SignalStrength
类中获取信号强度级别......有一个getLevel()
方法返回一个从 0 到 4 的整数,表示一般信号质量。在这里你可以找到一个听众。
推荐阅读
- sql - 您可以结合 case 和 top 语句来标记哪些值在前几个(Microsoft SQL)
- python - 格式化多维数组
- javascript - 有没有办法在导出对象的同时保留 JavaScript 中的变量?
- amazon-web-services - AWS 目标组运行状况不佳
- r - x 轴作为周数,辅助 x 轴作为日期
- html - 如果 Thymeleaf 中的条件。验证日期是 DayOfWeek。使用 th:text 它打印 MONDAY 但如果我进行检查它不起作用
- python - 将多个 blob 输入到 azure 函数 python
- http - 在 Google 搜索结果中仅显示不安全的网站
- python - 无法从数据框中删除行
- sql - Pervasive SQL 2000i 数据库上次事务查询