Pergunta

Quero configurar o ouvinte para ouvir no estado sem fio, alguém pode me ajudar com meu código

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);

//aqui está o evento que eu uso e quero escutar mudanças no wifi, e o código acima está todo em 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(); 
             }


    }

}

//Alguém pode me ajudar a criar um ouvinte que irá ouvir o estado do wifi e verificar se o wifi está conectado ou se não estiver, quero ativar o tráfego de pacotes de dados através de 3g/4g

Foi útil?

Solução

O sistema Android pede para mudar para Data Traffic quando WiFi não está conectado, mas há um problema.
Se você desligar o WiFi quando a tela estiver desligada, ele mudará constantemente entre a rede WiFi e 3G e se você tiver selecionado aplicativos para enviar dados em segundo plano, ele usará a conexão de dados que é mais cara se você não tiver um plano de dados ilimitado .
Outro problema é quando você está em uma área com sinal WiFi não tão forte, ele mudará constantemente para tráfego de dados e você terá problemas de navegação ou algo assim.
O terceiro problema é a bateria, pelo que ouvi, é melhor (em termos de bateria) usar a conexão WiFi do que os dados, com um complemento, não desligue o WiFi quando a tela estiver desligada. porque desligar e ligar o WiFi é mais caro (bateria) do que estar sempre ligado.então deixe isso para o sistema Android.

Outras dicas

Também me deparei com esse problema, veja como resolvi.

Na minha atividade onCreate(..) eu fiz

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

e adicionalmente criei o membro 'mWifiStateChangedReceiver' desta forma

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;
        }

    }
};

Como você pode ver, quando eu chegar WifiManager.WIFI_STATE_ENABLED Além disso, testo se a rede está realmente conectada, porque um WiFi habilitado não significa que esteja conectado.Pelo menos foi esse o meu palpite, por isso estou esperando até que a rede esteja realmente conectada.

Se quiser ouvir a intensidade do sinal, você também pode ouvir em:

WifiManager.RSSI_CHANGED_ACTION

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top