Intereting Posts
Почему я не могу создать круглую границу для определенного угла? Ionic2 / Cordova build публикует приложение с различными функциями. Пример: бесплатный и оплаченный Как реализовать несколько push-уведомлений GCM в одном приложении? Как автоматически воспроизводить список воспроизведения в приложении Spotify Android Форматирование даты и времени в зависимости от языка Невозможно использовать разрешение publish_stream – Facebook SDK для Android 3.0 Моши против Гссона в андроиде Как изменить ширину и высоту кнопки в Android Как получить значения TextView из элементов ListView? Добавление / удаление языковых записей в «Настройках» -> «Выбрать локаль» с телефона Android Удалить параметры выбора варианта выбора варианта выбора Как оживить взрыв, который удаляет окружающие тела? Отправить файл с помощью Android-bluetooth? Вкладки без значка Импорт проекта Cordova в Android Studio

Android проверяет статус WIFI (отключен или пользователь изменен WIFI) Как FLAG это?

У меня есть способ Flag, если соединение WIFI было отключено или отключено ИЛИ, если пользователь действительно изменил сеть WIFI?

Мне нужно, чтобы мое приложение выполняло: подключитесь к WIFI XYZ, если XYZ получит отсоединение (FLAG 1) или отключен. Затем подключитесь к XYZ. Но пользователь переходит на другой wifi BTOpen (FLAG 2), затем разрешает подключение и останавливает мой сервис. Если пользователь снова подключится к XYZ, запустите цикл снова.

То, что я получил до сих пор:

<!-- WIFI Receiver --> <receiver android:name=".ReceiverWifi" > <intent-filter> <action android:name="android.net.wifi.WIFI_STATE_CHANGED" /> <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> </intent-filter> </receiver> <service android:name=".ServiceWifiMonitor" /> <receiver android:name=".ServiceController" > <intent-filter > <action android:name="android.intent.action.BOOT_COMPLETED" /> <category android:name="android.intent.action.QUICKBOOT_POWERON" /> </intent-filter> </receiver> 

BroadcastReceiver:

  myApplication = (MyApplication) context.getApplicationContext(); conManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); networkInfo = conManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); boolean isConnected = networkInfo != null && networkInfo.isConnected(); int reconnectedCount = myApplication.getReconnectedCount(); if (wifiManager.isWifiEnabled()) { if("android.net.conn.CONNECTIVITY_CHANGE".equals(intent.getAction())) { //Start and Stop Service if(myApplication.isReconnect()) startServiceWifiMonitor(); else stopServiceWifiMonitor(); if (isConnected) { //There is a WIFI Connection myApplication.setConnectedWifi(NetworkUtil.getCurrentSSID(context)); myApplication.setWifiStatus("connected"); if (NetworkUtil.isConnectedToXYZ(context)) { startServiceWifiMonitor(); if(pref.getisFirstTime()) { myApplication.setWifiByChoise("XYZ"); pref.setisFirstTime(false); } else { myApplication.setisReconnect(true); } } else { //Connected to different NetWork if(myApplication.isReconnect() && NetworkUtil.isXYZAvailable(context)) { //ReConnect to XYZ NetworkUtil.connectToXYZ(context); myApplication.setReconnectedCount(reconnectedCount++); } else { resetValues("AAAA"); } } }//end if else { if(NetworkUtil.isXYZAvailable(context) && myApplication.getWifiByChoise().equals("XYZ")) { NetworkUtil.connectToXYZ(context); myApplication.setReconnectedCount(reconnectedCount++); } else { resetValues(""); } } }//end CONNECTIVITY_CHANGE 

Сервисный монитор:

 @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.i(TAG, "onStartCommand > Received start id " + startId + ": " + intent); objHandler.postDelayed(mTasks, 1000); return START_STICKY; }//end onStartCommand private Runnable mTasks = new Runnable() { public void run() { if(myApplication.getWifiByChoise().equals("XYZ") && NetworkUtil.isXYZAvailable(context)) { try { //Get the numbers of Reconnection int count = myApplication.getReconnectedCount(); if(!NetworkUtil.isWifiConnected(context)) { NetworkUtil.connectToXYZ(context); myApplication.setisReconnect(true); myApplication.setReconnectedCount(count++); } if(!NetworkUtil.isConnectedToXYZ(context)) { NetworkUtil.connectToXYZ(context); myApplication.setisReconnect(true); myApplication.setReconnectedCount(count++); } } catch (Exception e) {e.printStackTrace();} } else { stopSelf(); } int ms_interval = 3000; objHandler.postDelayed(mTasks, ms_interval); } };//end Runnable mTasks 

Проблема с моим приложением заключается в том, что: он разбил устройство, похоже, что он съедает всю память. Иногда с Wi-Fi XYZ get disconnect, он не будет снова подключаться, и если пользователь переключится на другой Wi-Fi, он не позволит подключиться.

Я действительно ценю твою помощь. Спасибо.

Solutions Collecting From Web of "Android проверяет статус WIFI (отключен или пользователь изменен WIFI) Как FLAG это?"

Проверьте сетевое имя «Имя», используя

 public String getWifiName(Context context) { WifiManager manager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); if (manager.isWifiEnabled()) { WifiInfo wifiInfo = manager.getConnectionInfo(); if (wifiInfo != null) { DetailedState state = WifiInfo.getDetailedStateOf(wifiInfo.getSupplicantState()); if (state == DetailedState.CONNECTED || state == DetailedState.OBTAINING_IPADDR) { return wifiInfo.getSSID(); } } } return null; } 

Если это имя соответствует вашему networkSSID, то есть XYZ, чем возобновить службу, иначе, если это не соответствует, чем остановить службу

 if getWifiName(this).compareTo("XYZ") == 0 { //XYZ is your network name on which you want to resume the service //code to resume } else { //code to stop the service } 

Вот как я справляюсь с этим в своем приложении:

 public class WifiStateWatcher extends BroadcastReceiver { private MainActivity activity; public WifiStateWatcher(MainActivity activity) { IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION); } @Override public void onReceive(Context context, Intent intent) { SupplicantState supState; WifiManager wifiManager = (WifiManager) activity.getSystemService(Context.WIFI_SERVICE); WifiInfo wifiInfo = wifiManager.getConnectionInfo(); supState = wifiInfo.getSupplicantState(); if (supState.equals(SupplicantState.COMPLETED)) { //we are connected to Wi-Fi network } else { //we lost Wi-Fi connectivity } } } 

Вам понадобится разрешение android.permission.ACCESS_WIFI_STATE

То, что вы сделали, почти правильно. Вам необходимо проверить сетевое имя ssd с именем пользователя wifi, подключенным к пользователю. Если он будет соответствовать, выполните свою роль.

 WifiManager wifiManager= (WifiManager) context.getSystemService(Context.WIFI_SERVICE); if (wifiManager.isWifiEnabled()) { WifiInfo networkInfo = wifiManager.getConnectionInfo(); if (networkInfo != null) { DetailedState state = WifiInfo.getDetailedStateOf(networkInfo .getSupplicantState()); if (state == DetailedState.CONNECTED ) { return networkInfo.getSSID(); } } } return null; 

Теперь у вас есть сетевой SSID, поэтому попробуйте проверить с вашим именем wifi и SSID, после чего вы узнаете статус соединения ….. Happy Programming

Также просто проверил это и выяснил, что основное различие:

 /** IP traffic should be available. */ DetailedState.CONNECTED 

а также:

 /** * … * This state indicates that the supplicant has completed its * processing for the association phase and that data connection is * fully configured. Note, however, that there may not be any IP * address associated with the connection yet. Typically, a DHCP * request needs to be sent at this point to obtain an address. */ SupplicantState.COMPLETED 

Поэтому, чтобы убедиться, что Wi-Fi полностью завершен, теперь я добавил проверки:

 boolean isConnected = activeNetworkInfo.isConnected(); 

И подробное сообщение.CONNECTED 🙂

Счастливое кодирование