2015-03-10 3 views
0

Я использую volley и asyntasks для загрузки данных из VPS и отображения их фрагментами и действиями. Я часто сталкиваюсь с этой ошибкой, когда подключен к общедоступной сети, а сетевой сигнал (очень) слабый. Я использую простую функцию проверки сети в приложении для отображения тоста, когда я не подключен к какой-либо сети. В этих случаях действия не запускаются и отображается тост. Однако, когда я в сети и сети сигнал очень слабый, начинает деятельность, 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). 

В этом состоянии приложения, когда я нажимаю на элементе navdrawer открываемого активности и выдает ту же ошибку. Это, как я могу проверить для подключения:

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 
    } 

Проверьте этот код. Надеюсь, это поможет.

+0

Спасибо, но для этого требуется уровень API 16. – erdomester

+0

Да, каково ваше требование API? , то я думаю, что info.isConnectedOrConnecting(), вероятно, поможет вам узнать текущий статус сети. Также, если исключение приходит после открытия операции, вы можете по-прежнему открывать диалог пользователю и закрывать действие, перехватывая исключение. – Satty

+0

Я знаю, но хочу предотвратить это. Мой минимум - API 14. 'isConnectedOrConnecting()' не помогает. – erdomester

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); 
    } 
} 

Таким образом, вы можете проверить уровень сигнала.

Смежные вопросы