Как проверить, есть ли интернет-соединение в Java? - PullRequest
56 голосов
/ 10 сентября 2009

Как проверить, можно ли подключиться к интернету через Java? Один из способов будет:

final URL url = new URL("http://www.google.com");
final URLConnection conn = url.openConnection();
... if we got here, we should have net ...

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

Ответы [ 15 ]

2 голосов
/ 24 мая 2015
public boolean checkInternetConnection()
{
     boolean status = false;
     Socket sock = new Socket();
     InetSocketAddress address = new InetSocketAddress("www.google.com", 80);

     try
     {
        sock.connect(address, 3000);
        if(sock.isConnected()) status = true;
     }
     catch(Exception e)
     {
         status = false;       
     }
     finally
     {
        try
         {
            sock.close();
         }
         catch(Exception e){}
     }

     return status;
}
2 голосов
/ 24 апреля 2013

Этот код содержится в тестовом классе jUnit, который я использую, чтобы проверить, доступно ли соединение. Я всегда получаю соединение, но если вы проверите длину контента, оно должно быть -1, если не известно:

  try {
    URL url = new URL("http://www.google.com");
    URLConnection connection = url.openConnection();

    if(connection.getContentLength() == -1){
          fail("Failed to verify connection");
    }
  } 
  catch (IOException e) {
      fail("Failed to open a connection");
      e.printStackTrace();
  }
2 голосов
/ 10 сентября 2009

1) Выясните, где ваше приложение должно подключаться.

2) Настройте рабочий процесс для проверки InetAddress.isReachable для отслеживания соединения с этим адресом.

0 голосов
/ 10 августа 2018

Следующий фрагмент кода позволяет нам получить статус сети на нашем устройстве Android

public class MainActivity extends AppCompatActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            TextView mtv=findViewById(R.id.textv);
            ConnectivityManager connectivityManager=
                  (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                if(((Network)connectivityManager.getActiveNetwork())!=null)
                    mtv.setText("true");
                else
                    mtv.setText("fasle");
            }
        }
    }
0 голосов
/ 18 июля 2017

Существует также опция Gradle --offline, которая может привести к желаемому поведению.

...