#java #android #android_studio
В общем есть приложение, имеет 3 активити: Loading Page (splash screen); WebView для конкретного сайта; Активити с картинкой об отсутствии интернета. Вопрос: как во время работы 1 активити проверить подключение к интернету и, в случае если его нет, кинуть на 3 активити, а если есть, то на 2?
Ответы
Ответ 1
Обычно советуют решения на базе ConnectivityManager, но оно показывает лишь факт подключения к какой-либо сети, что не говорит о том, что есть связь с интернетом. Если вы подключитесь к локальной сети по Wi-fi, то метод вернёт true, но доступа к интернету может и не быть, т.к. это локальная сеть. Я бы рекомендовал пинговать адрес, чтоб наверняка сказать, есть ли инет: public boolean isOnline() { 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) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } return false; } Можно прям из UI потока. Или подключиться попробовать: public boolean isOnline() { try { int timeoutMs = 1500; Socket sock = new Socket(); SocketAddress sockaddr = new InetSocketAddress("8.8.8.8", 53); sock.connect(sockaddr, timeoutMs); sock.close(); return true; } catch (IOException e) { return false; } } Нужен пермишен:Но это не будет работать в UI потоке, нужно завернуть, к примеру, в AsyncTask: class InternetCheck extends AsyncTask { private Consumer mConsumer; public interface Consumer { void accept(Boolean internet); } public InternetCheck(Consumer consumer) { mConsumer = consumer; execute(); } @Override protected Boolean doInBackground(Void... voids) { try { Socket sock = new Socket(); sock.connect(new InetSocketAddress("8.8.8.8", 53), 1500); sock.close(); return true; } catch (IOException e) { return false; } } @Override protected void onPostExecute(Boolean internet) { mConsumer.accept(internet); } } Использовать так: new InternetCheck(internet -> { /* делаем здесь что-то после получения результата */ }); Источник Ответ 2
if(isConnected()){ Intent intent = new Intent(this, ActivityTwo.class); startActivity(intent); }else{ Intent intent = new Intent(this, ActivityThree.class); startActivity(intent); } public boolean isConnected() { boolean connected = false; try { ConnectivityManager cm = (ConnectivityManager)getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo nInfo = cm.getActiveNetworkInfo(); connected = nInfo != null && nInfo.isAvailable() && nInfo.isConnected(); return connected; } catch (Exception e) { Log.e("Connectivity Exception", e.getMessage()); } return connected; }
Комментариев нет:
Отправить комментарий