13

Я работаю над живым проектом. и когда пользователь нажимает на приложение. появится экран приветствия (на этом экране есть веб-просмотр). и если интернет не подключен, приложение отключается. В основном, моя проблема заключается в том, чтобы проверить программно, что мобильный телефон подключен к Интернету или нет. если нет, то не извлекайте данные из webservice в webview и не отобразите диалоговое окно с надписью «Проверьте подключение к Интернету»Android - программно проверьте подключение к Интернету и диалог отображения, если не подключен

При проведении исследований я нашел много вещей, и я попытался реализовать это. но, его не удовлетворяющих мое требование

мой код,

public boolean isOnline() { 
    ConnectivityManager cm = 
     (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo netInfo = cm.getActiveNetworkInfo(); 
    if (netInfo != null && netInfo.isConnectedOrConnecting()) { 
     return true; 
    } 
    else 
    { 
     Description.setVisibility(View.INVISIBLE); 
     new AlertDialog.Builder(WelcomePage.this) 
     .setTitle(getResources().getString(R.string.app_name)) 
     .setMessage(
       getResources().getString(
         R.string.internet_error)) 
     .setPositiveButton("OK", null).show(); 
    } 
    return false; 
} 

я зову эту функцию в doInBackground() из AsyncTask

Пожалуйста, помогите!

+0

ли это подключение к Интернету проверки или подключение Wi-Fi. Я подозреваю, что последнее, и что интернет-соединение может быть проверено только пингом? – carl

ответ

10

Наконец-то я получил ответ.

ConnectivityManager conMgr = ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); 
NetworkInfo netInfo = conMgr.getActiveNetworkInfo(); 
if (netInfo == null){ 
    Description.setVisibility(View.INVISIBLE); 
    new AlertDialog.Builder(WelcomePage.this) 
     .setTitle(getResources().getString(R.string.app_name)) 
     .setMessage(getResources().getString(R.string.internet_error)) 
     .setPositiveButton("OK", null).show(); 
}else{ 
    dialog = ProgressDialog.show(WelcomePage.this, "", "Loading...", true,false); 
    new Welcome_Page().execute(); 
} 
+1

, это не должно быть ожидаемым ответом, поскольку вы сами спрашивали, как проверить подключение к Интернету, а не сетевое подключение, и приведенный выше ответ показывает последние part – therealprashant

+1

Это приведет к использованию Welcome_Page(), если устройство подключено к сети, но не использует баланс данных (интернет) – Khan

0

doInBackground работает на другой теме, чем основной пользовательский интерфейс, поэтому вы не можете создать здесь диалог. Вместо этого переопределите onPreExecute в вашем AsyncTask и выполните там тест.

+0

мой код является правильным или неправильным? –

+0

@Java_Android это выглядит хорошо для меня - его просто нужно переместить на другой метод (тот, который работает в потоке пользовательского интерфейса). – Phil

+0

@ Phil..Не работает в onCreate(). –

-2

Подключение к Интернету также проверьте либо в onCreate(), либо onResume() метод. Внутри AsyncTask нет необходимости звонить.

или Вы можете позвонить перед тем звонка AsyncTask выполнить() метод

if(isOnline) 
{ 
    MyAsyncTask task=new MyAMyAsyncTask(); 
    task.execute(); 

} 

else 
{ 
// no internet connection 
} 
+0

Я пробовал оба. но все еще дает ошибку ... –

+0

Какая ошибка вы получили, когда пытаетесь? –

19

Вы можете оформить эту библиотеку:

https://github.com/novoda/merlin

Вы просто implement Connectable, и вы получите обратный вызов, когда сеть идет или поднимается.

Поэтому вы можете показать свое диалоговое окно в этом сценарии.

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

example

Создать Merlin (используя Merlin.Builder())

merlin = new Merlin.Builder().withConnectableCallbacks().build(context); 

Bind и отменить услугу в вашей деятельности

@Override 
protected void onResume() { 
    super.onResume(); 
    merlin.bind(); 
} 

@Override 
protected void onPause() { 
    super.onPause(); 
    merlin.unbind(); 
} 

Reg Истр для обратных вызовов

merlin.registerConnectable(new Connectable() { 
     @Override 
     public void onConnect() { 
      // Do something! 
     } 
}); 

MerlinActivity в демо показывает простой способ Declutter Merlin из основного кода приложения.

+0

Я очень сожалею ... я не могу получить вас .. может у, пожалуйста, объясните в более простой форме. –

+0

если у вас есть https://github.com/novoda/merlin и прокрутите вниз, прочитайте, прочитайте меня, это объясняет это очень просто – Blundell

+0

ok ... спасибо. –

5

Это простая функция, которая проверяет ваше подключение к Интернету. Если Connected возвращает true, в противном случае false.

public boolean isInternetOn() { 

     // get Connectivity Manager object to check connection 
     ConnectivityManager connec = 
       (ConnectivityManager) getSystemService(getBaseContext().CONNECTIVITY_SERVICE); 

     // Check for network connections 
     if (connec.getNetworkInfo(0).getState() == android.net.NetworkInfo.State.CONNECTED || 
       connec.getNetworkInfo(0).getState() == android.net.NetworkInfo.State.CONNECTING || 
       connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.CONNECTING || 
       connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.CONNECTED) { 


      return true; 

     } else if (
       connec.getNetworkInfo(0).getState() == android.net.NetworkInfo.State.DISCONNECTED || 
         connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.DISCONNECTED) { 


      return false; 
     } 
     return false; 
    } 
} 

Вот проект, проверить подключение к Интернету, а также проверить URL, которые являются действительными или содержать в разъединяет this.

1

Я пробовал различные методы, описанные выше, кроме того, я был пойман в некоторых случаях. Итак, наконец, я использую ниже фрагмент кода, чтобы сделать сетевой вызов ...

try { 
    InetAddress address = InetAddress.getByName("www.stackoverflow.com"); 
    //Connected to working internet connection 
} catch (UnknownHostException e) { 
    e.printStackTrace(); 
    //Internet not available 
} 

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

1

Проверьте подключение к интернету

ConnectivityManager mgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
NetworkInfo netInfo = mgr.getActiveNetworkInfo(); 

     if (netInfo != null) { 
      if (netInfo.isConnected()) { 
       // Internet Available 
      }else { 
       //No internet 
      } 
     } else { 
      //No internet 
     } 

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

  • Нет связанных вопросов^_^