Слушая состояние WIFI - PullRequest
       24

Слушая состояние WIFI

5 голосов
/ 24 февраля 2012

Я хочу настроить прослушиватель на прослушивание в беспроводном режиме, может кто-нибудь помочь мне с моим кодом

import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;

...

 TelephonyManager wTelephonyManager;

...

     wTelephonyManager=(TelephonyManager)getSystemService(Context.WIFI_SERVICE);
    wTelephonyManager.listen(new PhoneL(),PhoneStateListener.LISTEN_DATA_CONNECTION_STATE);
    connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);

// вот событие, которое я использую, которое я хочу прослушать для изменения wifi, и приведенный выше код находится в onCreate {}

class PhoneL extends PhoneStateListener

{   






    public void onWifiStateChanged(int state, String nesto)
    {
         mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
            //mWifi.isConnectedOrConnecting()
             if(mWifi.isConnectedOrConnecting())
             {
                 Toast.makeText(WifiActivity.this,"Ima WIFI",Toast.LENGTH_LONG).show();     
             }
             else
             {
                 Toast.makeText(WifiActivity.this,"! NEMA WIFI",Toast.LENGTH_LONG).show(); 
             }


    }

}

// Может кто-нибудь, пожалуйста, помогите мне создатьслушатель, который будет прослушивать состояние Wi-Fi и проверять, подключен или подключен Wi-Fi, если нет, я хочу включить передачу пакетов данных через 3g / 4g

Ответы [ 3 ]

6 голосов
/ 27 февраля 2012

Я тоже сталкивался с этой проблемой, вот как я ее решил.

В своей деятельности по созданию (..) я сделал

this.registerReceiver(mWifiStateChangedReceiver,new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION));

и, кроме того, я создал элемент 'mWifiStateChangedReceiver' таким образом

private BroadcastReceiver mWifiStateChangedReceiver = new BroadcastReceiver()
{

    @Override
    public void onReceive(Context context, Intent intent)
    {
        // TODO Auto-generated method stub

        int extraWifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN);

        switch (extraWifiState)
        {
        case WifiManager.WIFI_STATE_DISABLED:
        case WifiManager.WIFI_STATE_DISABLING:
            enableUI(false);
            break;
        case WifiManager.WIFI_STATE_ENABLED:
            ConnectivityManager conMan = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
            while(conMan.getActiveNetworkInfo() == null || conMan.getActiveNetworkInfo().getState() != NetworkInfo.State.CONNECTED)
            {
                try
                {
                    Thread.sleep(500);
                } catch (InterruptedException e)
                {
                    e.printStackTrace();
                }
            }
            update();
            enableUI(true);
            break;
        case WifiManager.WIFI_STATE_ENABLING:
            break;
        case WifiManager.WIFI_STATE_UNKNOWN:
            break;
        }

    }
};

Как видите, когда я получаю WifiManager.WIFI_STATE_ENABLED, я дополнительно проверяю, действительно ли сеть подключена, поскольку включенный WiFi не означает, что он подключен. По крайней мере, это было мое предположение, поэтому я жду, пока сеть действительно не подключится.

1 голос
/ 18 мая 2016

Если вы хотите прослушать уровень сигнала, вы также можете прослушать:

WifiManager.RSSI_CHANGED_ACTION

0 голосов
/ 12 марта 2012

Система Android просит переключиться на Data Traffic, когда WiFi не подключен, но есть проблема.
Если вы отключите Wi-Fi при выключенном экране, он будет постоянно переключаться между сетью WiFi и 3G, и если вы выбрали приложения для отправки данных в фоновом режиме, он будет использовать подключение для передачи данных, которое обходится дороже, если у вас нет безлимитного тарифного плана .
Другая проблема заключается в том, что когда вы находитесь в зоне с не очень сильным сигналом Wi-Fi, он постоянно меняется на трафик данных, и у вас будут проблемы с просмотром или чем-то еще.
Третий вопрос - батарея, из того, что я слышал, лучше (с точки зрения батареи) использовать соединение WiFi, чем данные, с одним дополнением не выключать WiFi, когда экран выключен (даже, я так делаю) потому что выключение и включение Wi-Fi является самым дорогим (батарея), который всегда включен. так что поэтому оставьте это для системы Android.

...