Как проверить подключение к интернету на Android? [дубликат]
этот вопрос уже есть ответ здесь:
- Как проверить доступ в интернет на Android? InetAddress не раз 49 ответы
Я хочу проверить подключение к интернету в каждом действии. Если он потерян, должно отображаться сообщение.
может ли один наставит меня, как достичь этого?
8 ответов:
можно использовать
для проверки состояния сети. ConnectivityManager conMgr = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); if ( conMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED || conMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.CONNECTED ) { // notify user you are online } else if ( conMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.DISCONNECTED || conMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.DISCONNECTED) { // notify user you are not online }
обратите внимание, что константы ConnectivityManager.TYPE_MOBILE и ConnectivityManager.TYPE_WIFI представляют типы соединений, и эти два значения не являются исчерпывающими. Смотрите здесь исчерпывающий перечень.
также убедитесь, что у вас есть необходимые разрешения для мониторинга состояния сети. Вам нужно добавить это разрешение в вашу AndroidManifest.XML-код:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
только одно соединение может быть активным в любой момент. Поэтому более простой ответ:
final ConnectivityManager conMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); final NetworkInfo activeNetwork = conMgr.getActiveNetworkInfo(); if (activeNetwork != null && activeNetwork.isConnected()) { // notify user you are online } else { // notify user you are not online }
Он также обслуживает любой новый тип сети, такой как ConnectivityManager#TYPE_WIMAX
также убедитесь, что у вас есть необходимые разрешения для мониторинга состояния сети. Вам нужно добавить это разрешение к вашему AndroidManifest.XML-код:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
вы можете сделать это, для различных типов сетевого статуса
public void checkNetworkStatus(){ final ConnectivityManager connMgr = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE); final android.net.NetworkInfo wifi = connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI); final android.net.NetworkInfo mobile = connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); if( wifi.isAvailable() ){ Toast.makeText(this, "Wifi" , Toast.LENGTH_LONG).show(); } else if( mobile.isAvailable() ){ Toast.makeText(this, "Mobile 3G " , Toast.LENGTH_LONG).show(); } else { Toast.makeText(this, "No Network " , Toast.LENGTH_LONG).show(); } }
вы можете проверить покрытие сети и доступность данных мобильных и wi-fi непосредственно с
на сети доступность
private boolean isNetworkAvailable() { ConnectivityManager conxMgr = (ConnectivityManager)getSystemService(CONNECTIVITY_SERVICE); NetworkInfo mobileNwInfo = conxMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); NetworkInfo wifiNwInfo = conxMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI); return ((mobileNwInfo== null ? false : mobileNwInfo.isAvailable()) || (wifiNwInfo == null ? false : wifiNwInfo.isAvailable())); }
на наличие данных при наличии сети
private boolean isDataAvailable() { ConnectivityManager conxMgr = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); NetworkInfo mobileNwInfo = conxMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); NetworkInfo wifiNwInfo = conxMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI); return ((mobileNwInfo== null? false : mobileNwInfo.isConnected() )|| (wifiNwInfo == null? false : wifiNwInfo.isConnected())); }
коррекция
if ( conMgr.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED || conMgr.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTING ) { //notify user you are online }
должно быть
if ( conMgr.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED || conMgr.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTED ) { //notify user you are online }
зарегистрировать широковещательный приемник для дескриптор CONNECTIVITY_ACTION. Смотрите это полный пример. Вы должны обновить статическую переменную "connectionAvailable", которая будет доступна везде и каждый раз через соответствующий геттер.
Не забудьте объявить широковещательный приемник в манифест file:
<receiver android:name=".NetworkConnectivityReceiver" android:enabled="true"> <intent-filter> <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/> </intent-filter> </receiver>
по вопросу "проверка в каждой деятельности", может быть, вам будет интересно использовать BaseActivity расширяется за счет вашей деятельности и управление тестом подключения и отображения сообщения.
внимание:использование событий (не опрос от деятельности) будет более эффективным.
вы не используете
ConnectivityManager.getNetworkInfo(0).getState()
иConnectivityManager.getNetworkInfo(1).getState()
правильно, вместо жесткого кодирования значений (1) и (0) используйтеConnectivityManager.TYPE_WIFI
иConnectivityManager.TYPE_MOBILE
Это логическое проверить, чтобы увидеть, если у вас есть доступ к сети. Он не определяет, какой вид доступа к сети-мобильный, wifi... он просто проверяет, есть ли вы в сети.
boolean mobileNwInfo = false; ConnectivityManager conxMgr = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); try { mobileNwInfo = conxMgr.getActiveNetworkInfo().isConnected(); } catch (NullPointerException e) { mobileNwInfo = false; } if ( mobileNwInfo == false ) { // Your code goes here... }