我使用凌空和 asyntasks 从VPS下载数据并将其显示在片段和活动中。当我连接到公共网络并且网络信号(非常)弱时,我经常遇到这个错误。当我没有连接到任何网络时,我在应用程序中使用简单的网络检查功能来显示祝酒。在这些情况下,活动不会启动,并显示Toast。 但是,当我在线且网络信号非常弱时,活动开始,Volley运行并抛出错误
java.net.ConnectException: failed to connect to www.website.com/XX.XX.XX.XXX (port 80) after 2500ms: isConnected failed: EHOSTUNREACH (where Xs are the server address).
在我点击导航程序项目的应用程序状态下,它会打开活动并抛出相同的错误。 这是我检查连接的方式:
public static boolean isInternetAvailable(Context context)
{
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = connectivityManager.getActiveNetworkInfo();
if (info == null) {
Log.d(TAG,"no internet connection");
return false;
}
else
{
if(info.isConnected()) {
Log.d(TAG," internet connection available...");
return true;
}
else {
Log.d(TAG," noninternet connection");
return false;
}
}
}
您对解决此错误或升级网络检查功能以检查弱网络信号有什么想法吗?
答案 0 :(得分:1)
ConnectivityManager connectivityManager = (ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = connectivityManager.getActiveNetworkInfo();
DetailedState detailedState = info.getDetailedState();
if(detailedState == DetailedState.VERIFYING_POOR_LINK){
// Your checks goes here
}
请检查此代码。我希望它会有所帮助。
答案 1 :(得分:0)
我在另一个帖子上发现了这个:
Get Signal Strength in Android
public class myPhoneStateListener extends PhoneStateListener {
public int signalStrengthValue;
public void onSignalStrengthsChanged(SignalStrength signalStrength) {
super.onSignalStrengthsChanged(signalStrength);
if (signalStrength.isGsm()) {
if (signalStrength.getGsmSignalStrength() != 99)
signalStrengthValue = signalStrength.getGsmSignalStrength() * 2- 113;
else
signalStrengthValue = signalStrength.getGsmSignalStrength();
} else {
signalStrengthValue = signalStrength.getCdmaDbm();
}
txtSignalStr.setText("Signal Strength : " + signalStrengthValue);
}
}
所以你可以检查信号强度。