Как определить недоступность сети в андроиде

Я хочу показать предупреждение о том, что соединение недоступно в моем приложении для Android.

Я вызываю запрос на отдых в своем приложении. Чтобы проверить этот сценарий недоступности сети, я вручную отключил Wi-Fi на своем ноутбуке (я тестирую в симуляторе).

Код, по которому я звоню в сервис, здесь

resp = client.execute(httpPostRequest);

и здесь я ловлю исключение

catch (IllegalStateException e) {
            //assertTrue(e.getLocalizedMessage(), false);
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            //assertTrue(e.getLocalizedMessage(), false);
            e.printStackTrace();
        } catch (IOException e) {
            //assertTrue(e.getLocalizedMessage(), false);
            e.printStackTrace();
        }

и когда я получаю исключение, я пытаюсь получить статус сетевого подключения устройства с помощью этой функции

public boolean IsInternetConnectted()
    {
        ConnectivityManager conMgr =  (ConnectivityManager)this.getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo i = conMgr.getActiveNetworkInfo();
        conMgr = null;
        if (i == null)
            return false;
        if (!i.isConnected())
            return false;
        if (!i.isAvailable())
            return false;
        return true;        
    }

даже если wi-fi отключен, мой симулятор возвращает true из этой функции.

Как решить эту ситуацию??


person Ankit HTech    schedule 05.11.2012    source источник
comment
Чтобы включить/выключить сотовую сеть в эмуляторе, нажмите F8 и проверьте   -  person Zombie    schedule 05.11.2012


Ответы (8)


Я нашел ту же ошибку в своем эмуляторе... Но попробуйте свой код на мобильном устройстве, этот код работает отлично, и на реальном устройстве не возникает никаких ошибок...

person Gautam Vasoya    schedule 05.11.2012

используйте этот фрагмент:

 // added as an instance method to an Activity
boolean isNetworkConnectionAvailable() {  
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo info = cm.getActiveNetworkInfo();     
    if (info == null) return false;
    State network = info.getState();
    return (network == NetworkInfo.State.CONNECTED || network == NetworkInfo.State.CONNECTING);
}     
person Community    schedule 05.11.2012

Здравствуйте, пожалуйста, проверьте следующий ответ:

http://stackoverflow.com/questions/13217676/how-to-check-the-real-internet-connected-in-android/13217956#13217956

Но я хочу предложить вам, чтобы вы тестировали код подключения на реальном устройстве, а не на эмуляторе. Потому что эмулятор какое-то время не давал точного вывода.

person Himanshu Dhakecha    schedule 05.11.2012

попробуй это

public static Boolean checknetwork(Context mContext) {

    NetworkInfo info = ((ConnectivityManager) mContext
            .getSystemService(Context.CONNECTIVITY_SERVICE))
            .getActiveNetworkInfo();
    if (info == null || !info.isConnected()) 
    {

        return false;
    }
    if (info.isRoaming()) {
        // here is the roaming option you can change it if you want to
        // disable internet while roaming, just return false
        return true;
    }

    return true;

}
person Sanket Kachhela    schedule 05.11.2012

Попробуй это:

public static boolean isOnline(Context context) {
        boolean state=false;
        ConnectivityManager cm = (ConnectivityManager)
        context.getSystemService(Context.CONNECTIVITY_SERVICE);


        NetworkInfo wifiNetwork =
            cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
            if (wifiNetwork != null) {
            state=wifiNetwork.isConnectedOrConnecting();
             }

            NetworkInfo mobileNetwork =
            cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
            if (mobileNetwork != null) {
            state=mobileNetwork.isConnectedOrConnecting();
            }

            NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
            if (activeNetwork != null) {
            state=activeNetwork.isConnectedOrConnecting();

            }

            return state;
      }

Для лучших результатов проверьте на реальном устройстве.

person Lokesh    schedule 05.11.2012

Отправьте HttpRequest и проверьте код ответа, который вы получаете, если его 200 вы подключены к Интернету, иначе вы не подключены и можете соответствующим образом уведомить пользователя

person saum22    schedule 05.11.2012

Проверка подключения к Интернету

 public class CheckNetwork {


private static final String TAG = CheckNetwork.class.getSimpleName();



public static boolean isInternetAvailable(Context context)
{
    NetworkInfo info = (NetworkInfo) ((ConnectivityManager)
    context.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();

    if (info == null)
    {
         Log.d(TAG,"no internet connection");
         //Toast.makeText(context, "No Internet Connection", 1000);
         return false;
    }
    else
    {
        if(info.isConnected())
        {
            Log.d(TAG," internet connection available...");
            return true;
        }
        else
        {
            Log.d(TAG," internet connection");
            return true;
        }

    }
}
 }

В вашем классе активности

        if(CheckNetwork.isInternetAvailable(YourActivity.this))
             {
               //your studd
             }

Используйте f7 для отключения и подключения в эмуляторе. Я не уверена. Погугли это. В качестве альтернативы вы можете использовать широковещательный приемник или службу.

person Raghunandan    schedule 05.11.2012

Попробуй это:

public static boolean isNetworkAvailable(Context context)
{
    ConnectivityManager cm = (ConnectivityManager) context
            .getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo info = cm.getActiveNetworkInfo();

    return (info != null);
}
person Artyom Kiriliyk    schedule 05.11.2012