Как проверить подключение к Интернету в настоящее время доступно или нет в android

Я хочу также выполнить мое приложение офлайн, поэтому мне нужно проверить, доступно ли в настоящее время подключение к Интернету или нет. Может ли кто-нибудь сказать мне, как проверить, доступен ли интернет или нет в андроиде? Дайте образец кода. Я попытался с кодом ниже и проверил с помощью эмулятора, но он не работает.

public boolean isInternetConnection() 
{ 
 ConnectivityManager connectivityManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
 return connectivityManager.getActiveNetworkInfo().isConnectedOrConnecting(); 
}

Спасибо

8 ответов

Это сообщит, если вы подключены к сети:

boolean connected = false;
ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
 if(connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED || 
 connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.CONNECTED) {
 //we are connected to a network
 connected = true;
 }
 else
 connected = false;

Предупреждение: Если вы подключены к сети WiFi, которая не включает доступ в Интернет или требует аутентификации на основе браузера, connected все равно будет правдой.

Вам понадобится это разрешение в вашем манифесте:


Кроме того, имейте в виду, что иногда пользователь будет подключен к сети Wi-Fi, но для этой сети может потребоваться аутентификация на основе браузера. Большинство точек доступа в аэропортах и ​​гостиницах - это так, что вы можете обмануть ваше приложение, чтобы подумать, что у вас есть возможность подключения, а затем любые выборки URL будут получать страницу входа в Hotspot вместо страницы, которую вы ищете.

В зависимости от важности выполнения этой проверки, помимо проверки соединения с ConnectivityManager, я бы предложил включить код, чтобы проверить, что это работающее интернет-соединение, а не просто иллюзия. Вы можете сделать это, пытаясь найти известный адрес/ресурс с вашего сайта, например, изображение 1x1 PNG или 1-байтовый текстовый файл.


Используйте следующий код:

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

}

если isNetworkAvailable() возвращает true, тогда доступно подключение к Интернету, иначе интернет-соединение недоступно

Здесь нужно добавить ниже uses-Permission в ваше приложение Манифест файл


Вы можете просто попытаться установить TCP-соединение с удаленным хостом:

public boolean hostAvailable(String host, int port) {
 try (Socket socket = new Socket()) {
 socket.connect(new InetSocketAddress(host, port), 2000);
 return true;
 } catch (IOException e) {
 // Either we have a timeout or unreachable host or failed DNS lookup
 System.out.println(e);
 return false;
 }
}

Тогда:

boolean online = hostAvailable("www.google.com", 80);


используйте следующий код:

public static boolean isNetworkAvaliable(Context ctx) {
 ConnectivityManager connectivityManager = (ConnectivityManager) ctx
 .getSystemService(Context.CONNECTIVITY_SERVICE);
 if ((connectivityManager
 .getNetworkInfo(ConnectivityManager.TYPE_MOBILE) != null && connectivityManager
 .getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED)
 || (connectivityManager
 .getNetworkInfo(ConnectivityManager.TYPE_WIFI) != null && connectivityManager
 .getNetworkInfo(ConnectivityManager.TYPE_WIFI)
 .getState() == NetworkInfo.State.CONNECTED)) {
 return true;
 } else {
 return false;
 }
}

помните, что вам нужно добавить в свою манифест следующую строку:


попробуйте использовать ConnectivityManager

ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
 if (connectivity != null) {
 NetworkInfo[] info = connectivity.getAllNetworkInfo();
 if (info != null) {
 for (int i = 0; i < info.length; i++) {
 if (info[i].getState() == NetworkInfo.State.CONNECTED) {
 return true;
 }
 }
 }
 }
 return false

Также добавьте разрешение на AndroidManifest.xml


Используйте метод checkConnectivity:

if (checkConnectivity() == 1){
 //do something 
 }

Способ проверки подключения:

private int checkConnectivity() {
 boolean enabled = true;
 ConnectivityManager connectivityManager = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);
 NetworkInfo info = connectivityManager.getActiveNetworkInfo();
 if ((info == null || !info.isConnected() || !info.isAvailable())) {
 internet = 0;//sin conexion
 Toast.makeText(getApplicationContext(), "Sin conexión a Internet...", Toast.LENGTH_SHORT).show();
 enabled = false;
 } else {
 internet = 1;//conexión
 }
 return internet;
 }


package com.base64;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Base64;
import android.widget.ImageView;
import android.widget.Toast;
import com.androidquery.AQuery;
public class MainActivity extends AppCompatActivity {
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 if(isConnectingToInternet(MainActivity.this))
 {
 Toast.makeText(getApplicationContext(),"internet is available",Toast.LENGTH_LONG).show();
 }
 else {
 System.out.print("internet is not available");
 }
 }
 public static boolean isConnectingToInternet(Context context)
 {
 ConnectivityManager connectivity =
 (ConnectivityManager) context.getSystemService(
 Context.CONNECTIVITY_SERVICE);
 if (connectivity != null)
 {
 NetworkInfo[] info = connectivity.getAllNetworkInfo();
 if (info != null)
 for (int i = 0; i < info.length; i++)
 if (info[i].getState() == NetworkInfo.State.CONNECTED)
 {
 return true;
 }
 }
 return false;
 }
}
/* manifest */
<!--?xml version="1.0" encoding="utf-8"?-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.base64">
 <uses-permission android:name="android.permission.INTERNET">
 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE">
 <application android:allowbackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsrtl="true" android:theme="@style/AppTheme">
 <activity android:name=".MainActivity">
 <intent-filter>
 <action android:name="android.intent.action.MAIN">
 <category android:name="android.intent.category.LAUNCHER">
 </category></action></intent-filter>
 </activity>
 </application>
</uses-permission></uses-permission></manifest>

licensed under cc by-sa 3.0 with attribution.