Я хочу проверить подключение к Интернету в каждом мероприятии. Если он потерян, сообщение должно отображаться.Как проверить подключение к Интернету в Android?
Может ли кто-нибудь посоветовать мне, как этого достичь?
Я хочу проверить подключение к Интернету в каждом мероприятии. Если он потерян, сообщение должно отображаться.Как проверить подключение к Интернету в Android?
Может ли кто-нибудь посоветовать мне, как этого достичь?
Вы можете использовать ConnectivityManager, чтобы проверить состояние сети.
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 представляют типы соединений и эти два значения не являются исчерпывающими. См. here для исчерпывающего списка.
Также убедитесь, что у вас есть необходимое разрешение для контроля состояния сети. Вам нужно добавить это разрешение вашего AndroidManifest.xml:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
это дает мне следующее сообщение об ошибке ConnectivityService: Ни пользователь, ни 10026 текущий процесс не имеет android.permission.ACCESS_NETWORK_STATE. на conMgr.getNetworkInfo – UMAR
Вы должны добавить эту строку в AndroidManifest.xml: <использует-разрешение андроида: имя = «android.permission.ACCESS_NETWORK_STATE»> использует-разрешение> –
нормально одна вещь я заметил. когда Wi-Fi подключен к беспроводному модему, интернет-покрытие там или нет, он всегда говорит, что да, вы подключены, он проверяет только совместимость Wi-Fi, а не подключение к интернету, и как справиться с такой ситуацией? – UMAR
Коррекция
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
}
Хорошо, что одна вещь, которую я заметил ... когда Wi-Fi подключен к беспроводному модему Интернет-покрытие есть или нет, он всегда говорит, что да, вы подключены, он проверяет только совместимость Wi-Fi, а не подключение к Интернету, поэтому как справиться с такой ситуацией ? – UMAR
только одно соединение может быть активным в любой точке. Так проще ответ:
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" />
Лучший ответ. +1 –
Существует имя метода 'isConnected()' для сетевой информации, которое может заменить вашу строку '.getState() == ...' и сделать ее еще проще? – bytebender
Nice pick up #bytebender. Я внесла поправки в решение. Еще проще :-) – William
Вы можете сделать это, для различных типов состояния сети
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();
}
}
Вы можете проверить покрытие сети и доступность данных Mobile и плетеным фи непосредственно
Для покрытия сети доступности
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()));
}
Вы не используете ConnectivityManager.getNetworkInfo(0).getState()
и ConnectivityManager.getNetworkInfo(1).getState()
должным образом, вместо того, чтобы жестко прописывать значения (1) и (0) используют ConnectivityManager.TYPE_WIFI
и ConnectivityManager.TYPE_MOBILE
Это логическое проверьте, есть ли у вас доступ к сети. Он не определяет, какой вид доступа к сети - мобильный, Wi-Fi ..., он просто проверяет, подключен ли он к сети.
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...
}
Зарегистрируйте широковещательный приемник к ручкой CONNECTIVITY_ACTION. См. Это full example.Вы должны обновить статическую переменную 'connectionAvailable', которая будет доступна везде и каждый раз через соответствующий получатель.
Не забудьте объявить приемник вещания в манифесте файл:
<receiver android:name=".NetworkConnectivityReceiver" android:enabled="true">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
</intent-filter>
</receiver>
По вопросу «проверки в каждой деятельности», может быть, вы были бы заинтересованы в использовании BaseActivity продолженного вашей деятельности и управления проверкой возможности подключения и отображения сообщения.
Также обратите внимание, что с использованием событий (не опрос по видам деятельности) будет более эффективным.
Это может помочь некоторым http://www.gadgetsaint.com/android/no-internet-connectivity-android/ – ASP