Intereting Posts
Запуск AnimationDrawable в Android Genymotion – виртуальное устройство не получило IP-адрес Как я могу заставить свой эмулятор Android использовать VPN-интерфейс моего компьютера? Функциональность Spinner не работает на Android 6.0.1 Динамические ссылки Firebase не имеют глубокой связи с коротким URL-адресом на пользовательских вкладках Разница между eng и отладкой пользователя в Android Настроить на элементе click listener внутри onBindViewHolder () с помощью RecyclerView.Adapter Eclipse ADT: название проекта «appcompat_v7» создается после создания каждого нового проекта Android SQL: проверьте, существует ли запись в базе данных Android правильно очищает / удаляет Какие файлы следует добавить к игнорированию SVN в проекте с помощью Android Studio Улучшение синтаксического анализа Java / Kotlin JSON Невозможно изменить размер RelativeLayout внутри ScrollView, чтобы заполнить весь экран. Селектор даты в Android с одним днем ​​и месяцем Android – соглашение об именах пакетов

Wifi Connect-Disconnect Listener

Какому слушателю мой класс должен реализовать inorder для автоматической проверки кода, если Wi-Fi соединяется / отключается?

Я могу вручную проверить подключение / отключение Wi-Fi, но каждый раз, когда мне нужно подключить / отключить WIFI из настроек Android, а затем запустите мою программу для получения результата.

Пожалуйста помоги. Thanx заранее.

Мой текущий код так же прост, как:

WifiManager wifi = (WifiManager)getSystemService(Context.WIFI_SERVICE); if (wifi.isWifiEnabled()==true) { tv.setText("You are connected"); } else { tv.setText("You are NOT connected"); } 

Solutions Collecting From Web of "Wifi Connect-Disconnect Listener"

На самом деле вы проверяете, включен ли Wi-Fi, что не обязательно означает, что он подключен . Это просто означает, что режим Wi-Fi на телефоне включен и может подключаться к сетям Wi-Fi.

Именно так я слушаю фактические подключения Wi-Fi в своем широковещательном приемнике:

 public class WifiReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { ConnectivityManager conMan = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo netInfo = conMan.getActiveNetworkInfo(); if (netInfo != null && netInfo.getType() == ConnectivityManager.TYPE_WIFI) Log.d("WifiReceiver", "Have Wifi Connection"); else Log.d("WifiReceiver", "Don't have Wifi Connection"); } }; 

Чтобы получить доступ к активной сетевой информации, вам необходимо добавить следующие разрешения – на AndroidManifest.xml:

 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

И следующий приемник намерения (или вы можете добавить это программно …)

 <!-- Receive Wi-Fi connection state changes --> <receiver android:name=".WifiReceiver"> <intent-filter> <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> </intent-filter> </receiver> 

EDIT: в Lollipop планирование заданий может помочь, если вы хотите выполнить действие, когда пользователь подключается к неконтролируемому сетевому соединению. Взгляните: http://developer.android.com/about/versions/android-5.0.html#Power


EDIT 2: Еще одно соображение заключается в том, что мой ответ не проверяет, что у вас есть подключение к Интернету . Вы можете подключиться к сети Wi-Fi, которая требует входа в систему. Вот полезная проверка «IsOnline ()»: https://stackoverflow.com/a/27312494/1140744

Создайте свой собственный класс, который расширяет BroadcastReceiver …

 public class MyNetworkMonitor extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // Process the Intent here } } 

В AndroidManifest.xml

 <receiver android:name=".MyNetworkMonitor" > <intent-filter> <action android:name="android.net.wifi.STATE_CHANGE" /> <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> </intent-filter> </receiver> 

См. WIFI_STATE_CHANGED_ACTION и CONNECTIVITY_ACTION для объяснения использования намерения.

Проверьте эти две страницы javadoc: ConnectivityManager WiFiManager

Обратите внимание, что каждый определяет действия трансляции. Если вам нужно узнать больше о регистрации широковещательных приемников, проверьте это: программно зарегистрируйте широковещательный приемник

 BroadcastReceiver receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); if (wifi.isWifiEnabled()) { tv.setText("You are connected"); } else { tv.setText("You are NOT connected"); } } }; 

И в вашем манифесте вы можете сделать что-то подобное (если вы предпочитаете НЕ регистрировать получателя в коде):

 <application android:icon="@drawable/icon" android:label="@string/app_name"> <receiver android:name=".WiFiReceiver" android:enabled="true"> <intent-filter> <action android:name="android.net.ConnectivityManager.CONNECTIVITY_ACTION" /> </intent-filter> </receiver> </application> 

РЕДАКТИРОВАТЬ:

Я должен добавить, что было бы лучше зарегистрировать этот широковещательный приемник в вашем коде, а не в манифесте, если вам нужно только получать трансляцию во время работы приложения. Указав это в манифесте, ваш процесс будет уведомлен об изменении соединения, даже если он не был ранее запущен.

В AndroidManifest.xml добавьте следующее разрешение.

 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 

Создайте новый класс приемника.

 public class ConnectionChangeReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo(); if (activeNetInfo != null && activeNetInfo.getType() == ConnectivityManager.TYPE_WIFI) { Toast.makeText(context, "Wifi Connected!", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(context, "Wifi Not Connected!", Toast.LENGTH_SHORT).show(); } } 

И добавьте этот класс приемника в файл AndroidManifest.xml .

 <receiver android:name="ConnectionChangeReceiver" android:label="NetworkConnection"> <intent-filter> <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/> </intent-filter> </receiver> 

В ответ на сабсаб. Чтобы подключиться к широковещательному приемнику смены соединения, я использовал ответ warbi и добавил класс со статическими методами.

 public class WifiHelper { private static boolean isConnectedToWifi; private static WifiConnectionChange sListener; public interface WifiConnectionChange { void wifiConnected(boolean connected); } /** * Only used by Connectivity_Change broadcast receiver * @param connected */ public static void setWifiConnected(boolean connected) { isConnectedToWifi = connected; if (sListener!=null) { sListener.wifiConnected(connected); sListener = null; } } public static void setWifiListener(WifiConnectionChange listener) { sListener = listener; } } 

Затем я внес изменения в класс приемника по первому ответу, показанному выше.

 public class ConnectivityReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { ConnectivityManager conMan = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo netInfo = conMan.getActiveNetworkInfo(); if (netInfo != null && netInfo.getType() == ConnectivityManager.TYPE_WIFI) { Log.d("WifiReceiver", "Have Wifi Connection"); WifiHelper.setWifiConnected(true); } else { Log.d("WifiReceiver", "Don't have Wifi Connection"); WifiHelper.setWifiConnected(false); } } } 

Наконец, в вашей деятельности вы можете добавить слушателя, чтобы использовать этот обратный вызов.

 wifiManager = (WifiManager) getContext().getSystemService(Context.WIFI_SERVICE); wasWifiEnabled = (wifiManager.getWifiState() == WifiManager.WIFI_STATE_ENABLED || wifiManager.getWifiState() == WifiManager.WIFI_STATE_ENABLING); WifiHelper.setWifiListener(new WifiHelper.WifiConnectionChange() { @Override public void wifiConnected(boolean connected) { //Do logic here } }); 

Обратите внимание, что слушатель удаляется после срабатывания обратного вызова, потому что это статический прослушиватель. Во всяком случае, эта реализация работает для меня и является одним из способов захвата вашей деятельности, или где-нибудь ее статичность.