Ouvindo estado WIFI
-
12-11-2019 - |
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
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