如何在连接网络时显示与用户的慢速互联网连接注意:不是网络类型(2G,3G,4G,WIFI)
确定网络速度 - (慢速上网速度)
使用NetworkInfo类,ConnectivityManager和TelephonyManager来确定您的网络类型。
从互联网下载任何文件并计算文件中的字节数所花费的时间。 (唯一可能的方法来确定速度检查)
我已经为我的项目尝试了以下逻辑,你也看看这个,希望它能帮助你。
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
//should check null because in airplane mode it will be null
NetworkCapabilities nc = cm.getNetworkCapabilities(cm.getActiveNetwork());
int downSpeed = nc.getLinkDownstreamBandwidthKbps();
int upSpeed = nc.getLinkUpstreamBandwidthKbps();
检查移动网络的互联网速度以使用此代码
ConnectivityManager connectivityManager = (ConnectivityManager)this.getSystemService(CONNECTIVITY_SERVICE);
NetworkCapabilities nc = connectivityManager.getNetworkCapabilities(connectivityManager.getActiveNetwork());
var downSpeed = nc.getLinkDownstreamBandwidthKbps();
var upSpeed = nc.getLinkUpstreamBandwidthKbps();
如果检查wifi网络的互联网速度使用此代码
public int getWifiLevel()
{
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
int linkSpeed = wifiManager.getConnectionInfo().getRssi();
int level = WifiManager.calculateSignalLevel(linkSpeed, 5);
return level;
}
更多细节请参考此链接
https://android.jlelse.eu/designing-android-apps-to-handle-slow-network-speed-dedc04119aac
我希望这可以帮到你!
谢谢。
你不能直接检查它。
但是,您可以ping服务器并查看响应是否需要很长时间或根本不会返回。
你也可以做最快的。在大多数应用程序中,这没有多大意义,因为它对用户数据的影响很大。
你可以做的最基本的事情是探测一个正常运行时间几乎为100%的网址,比方说,www.google.com
。从您开始请求到完成请求的时间,您只需测量您为请求下载的数据量。所以你有数据(空间)和花费的时间。只需按时间划分空间即可获得网络速度。这有点不精确,因为它还取决于您探测的URL。
似乎android不直接允许这个。您可以尝试下载某些文件以确定您的互联网速度。以下是连接质量列表:
您可以查看本文https://android.jlelse.eu/designing-android-apps-to-handle-slow-network-speed-dedc04119aac中的详细信息
你可以使用Facebook的Network Connection Class。
它的ConnectionClassStateChangeListener有一个名为onBandwidthStateChange
的方法,它返回一个ConnectionQuality类的实例:
public interface ConnectionClassStateChangeListener {
public void onBandwidthStateChange(ConnectionQuality bandwidthState);
}
ConnectionQuality类是一个枚举类,定义如下:
public enum ConnectionQuality {
/**
* Bandwidth under 150 kbps.
*/
POOR,
/**
* Bandwidth between 150 and 550 kbps.
*/
MODERATE,
/**
* Bandwidth between 550 and 2000 kbps.
*/
GOOD,
/**
* EXCELLENT - Bandwidth over 2000 kbps.
*/
EXCELLENT,
/**
* Placeholder for unknown bandwidth. This is the initial value and will stay at this value
* if a bandwidth cannot be accurately found.
*/
UNKNOWN
}
需要最低api:21。我使用ConnectivityManager
结合NetworkCapabilities
来获得下游和上游带宽。工作得很好。您可以根据以kbps为单位的速度来决定速度是2G,3G还是4G。
ConnectivityManager cm = (ConnectivityManager)this.getSystemService(CONNECTIVITY_SERVICE);
NetworkCapabilities nc = cm.getNetworkCapabilities(cm.getActiveNetwork());
var downSpeed = nc.getLinkDownstreamBandwidthKbps();
var upSpeed = nc.getLinkUpstreamBandwidthKbps();
下载文件会使解决方案过度设计,因为毕竟,您不对用户的互联网连接负责 - 他们是(或者更确切地说是他们的服务提供商)!根据当前状态向他们提供信息对于大多数用例来说已经足够了。这使您可以在执行操作之前快速检查当前链接速度。