Android - программно проверьте подключение к Интернету и диалог отображения, если не подключен
Я работаю над живым проектом. и когда пользователь нажимает на приложение. появится экран приветствия (на этом экране есть веб-просмотр). и если интернет не подключен, приложение отключается. В основном, моя проблема заключается в том, чтобы проверить программно, что мобильный телефон подключен к Интернету или нет. если нет, то не извлекайте данные из webservice в webview и покажите диалоговое окно с надписью "Проверьте подключение к Интернету"
во время исследования я нашел много вещей, и я попытался реализовать это. но, не удовлетворяя моему требованию
мой код,
public boolean isOnline() {
ConnectivityManager cm =
(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
if (netInfo != null && netInfo.isConnectedOrConnecting()) {
return true;
}
else
{
Description.setVisibility(View.INVISIBLE);
new AlertDialog.Builder(WelcomePage.this)
.setTitle(getResources().getString(R.string.app_name))
.setMessage(
getResources().getString(
R.string.internet_error))
.setPositiveButton("OK", null).show();
}
return false;
}
Я вызываю эту функцию в doInBackground()
из AsyncTask
Пожалуйста, помогите!
Ответы
Ответ 1
Наконец-то я получил ответ.
ConnectivityManager conMgr = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = conMgr.getActiveNetworkInfo();
if (netInfo == null){
Description.setVisibility(View.INVISIBLE);
new AlertDialog.Builder(WelcomePage.this)
.setTitle(getResources().getString(R.string.app_name))
.setMessage(getResources().getString(R.string.internet_error))
.setPositiveButton("OK", null).show();
}else{
dialog = ProgressDialog.show(WelcomePage.this, "", "Loading...", true,false);
new Welcome_Page().execute();
}
Ответ 2
Вы можете проверить эту библиотеку:
https://github.com/novoda/merlin
Вы просто implement Connectable
, и вы получите обратный вызов, когда сеть опустится или появится.
Поэтому вы можете показать свое диалоговое окно в этом сценарии.
Вы также можете запросить библиотеку для текущего состояния и не выполнять сетевую задачу
![example]()
Создайте Merlin (используя Merlin.Builder())
merlin = new Merlin.Builder().withConnectableCallbacks().build(context);
Свяжите и отвяжите службу в своей деятельности
@Override
protected void onResume() {
super.onResume();
merlin.bind();
}
@Override
protected void onPause() {
super.onPause();
merlin.unbind();
}
Регистрация для обратных вызовов
merlin.registerConnectable(new Connectable() {
@Override
public void onConnect() {
// Do something!
}
});
MerlinActivity в демонстрации показывает простой способ объявить Merlin из вашего основного кода приложения.
Ответ 3
Это простая функция, которая проверяет ваше интернет-соединение. Если Connected возвращает true, в противном случае false.
public boolean isInternetOn() {
// get Connectivity Manager object to check connection
ConnectivityManager connec =
(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
// Check for network connections
if (connec.getNetworkInfo(0).getState() == android.net.NetworkInfo.State.CONNECTED ||
connec.getNetworkInfo(0).getState() == android.net.NetworkInfo.State.CONNECTING ||
connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.CONNECTING ||
connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.CONNECTED) {
return true;
} else if (
connec.getNetworkInfo(0).getState() == android.net.NetworkInfo.State.DISCONNECTED ||
connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.DISCONNECTED) {
return false;
}
return false;
}
}
Вот проект, проверить подключение к Интернету, а также проверить URL, которые являются действительными или содержать в разъединяет этом.
Ответ 4
Проверить подключение к Интернету
ConnectivityManager mgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = mgr.getActiveNetworkInfo();
if (netInfo != null) {
if (netInfo.isConnected()) {
// Internet Available
}else {
//No internet
}
} else {
//No internet
}
Ответ 5
Я пробовал разные методы, описанные выше, кроме того, я был пойман в некоторых случаях. Итак, наконец, я использую ниже фрагмент кода для создания сетевого вызова...
try {
InetAddress address = InetAddress.getByName("www.stackoverflow.com");
//Connected to working internet connection
} catch (UnknownHostException e) {
e.printStackTrace();
//Internet not available
}
Это может быть полезно во многих аспектах. Если что-то не в порядке, сообщите мне.
Ответ 6
if (InternetConnection.checkConnection(context)) {
// Internet Available...
} else {
// Internet Not Available...
}
просто скопируйте ниже класс
public class InternetConnection {
/** CHECK WHETHER INTERNET CONNECTION IS AVAILABLE OR NOT */
public static boolean checkConnection(Context context) {
final ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connMgr.getActiveNetworkInfo();
if (activeNetworkInfo != null) { // connected to the internet
Toast.makeText(context, activeNetworkInfo.getTypeName(), Toast.LENGTH_SHORT).show();
if (activeNetworkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
// connected to wifi
return true;
} else if (activeNetworkInfo.getType() == ConnectivityManager.TYPE_MOBILE) {
// connected to the mobile provider data plan
return true;
}
}
return false;
}
}
Дайте следующее разрешение на манифест
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
Ответ 7
doInBackground
работает на другом потоке, чем основной пользовательский интерфейс, поэтому вы не можете создать здесь диалог. Вместо этого переопределите onPreExecute в AsyncTask
и выполните там тест.
Ответ 8
public boolean isOnline() {
NetworkInfo activeNetworkInfo = ((ConnectivityManager)
getSystemService(CONNECTIVITY_SERVICE)).getActiveNetworkInfo();
return activeNetworkInfo != null &&
activeNetworkInfo.isConnectedOrConnecting();
}
Ответ 9
Интернет-соединение также проверяет либо в методе onCreate()
, либо onResume()
. Нет необходимости вызывать внутри AsyncTask.
или Вы можете позвонить перед вызовом метода execute() AsyncTask
if(isOnline)
{
MyAsyncTask task=new MyAMyAsyncTask();
task.execute();
}
else
{
// no internet connection
}