2015-09-07 6 views
4

Добрый день, у меня есть приложение с 2 видами деятельности: главная и подробная страница.Проверьте подключение к Интернету во время работы

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

Проблема заключается в том, что, когда я подробно описываю страницу и выключаю Wi-Fi, я хотел бы завершить эту работу, как я могу реализовать эту функциональность? меня проверить в главном классе деятельности что-то вроде этого:

private boolean isNetworkAvailable() { 
    ConnectivityManager connectivityManager 
      = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); 
    return activeNetworkInfo != null && activeNetworkInfo.isConnected(); 
} 

It`s прекрасно работает, когда я запустить приложение с интернетом или без этого, но когда я выключить WiFi во время выполнения он Безразлично Работает.

В любом случае, спасибо!

+0

Просто повторите вызов 'isNetworkAvailable()'. Проверьте: вернитесь к основному действию и попытайтесь повторно открыть детали - он работает. –

+0

@ FrankN.Stein Я бы хотел, чтобы без закрытия и перезапуска приложения я мог это сделать, но для пользователя он должен быть автоматически. Мне нужен какой-то вещательный приемник, я думаю, но я не уверен –

+0

или просто зарегистрируюсь в журнале ... – Shmuel

ответ

5

Вы должны Monitor for Changes in Connectivity

ConnectivityManager транслирует CONNECTIVITY_ACTION ("android.net.conn.CONNECTIVITY_CHANGE") действия, когда детали подключения изменились. Вы можете зарегистрировать широковещательный приемник в манифесте, чтобы прослушать эти изменения и соответствующим образом возобновить (или приостановить) ваши фоновые обновления.

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

public class InternetReceiver extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent intent) {  

    if (isConnected()) 
     Log.d("NetReceiver", "Internet is connected"); 
    else 
     Log.d("NetReceiver", "Internet is not connected");  
    } 
}; 

Этот метод проверяет соединения из всех интернет-источников, в том числе 3g

public boolean isConnected() { 

Runtime runtime = Runtime.getRuntime(); 
try { 

    Process ipProcess = runtime.exec("/system/bin/ping -c 1 8.8.8.8"); 
    int exitValue = ipProcess.waitFor(); 
    return (exitValue == 0); 

    } catch (IOException e)   { Log.e("ERROR", "IOException",e); } 
    catch (InterruptedException e) { Log.e("ERROR", "InterruptedException",e); } 

return false; 
} 

В вашем файле манифеста добавьте это:

<receiver android:name=".InternetReceiver"> 
<intent-filter> 
    <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
</intent-filter> 

Вот Source

+0

. Следующий шаг - это экземпляр этого класса (в на страницеСоздание()) и вызов метода isConnected()? –

+0

Нет, 'isConnected()' будет называться сам всякий раз, когда состояние Интернета отключено. Вам не нужно ничего делать, это красота «BroadcastReceiver» .. Он будет срабатывать при вызове определенного события –

0

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

  • Создать вспомогательный метод, который проверяет состояние интернет или соединение
  • Создать тему или Runnable
  • Внутри пробега() бечевки или Runnable, вызовите вспомогательный метод
  • в OnCreate() вашего MainActivity, начать тему или Runnable для запуска каждые п сек/мин
3

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

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