Ascoltare il WiFi State.
-
12-11-2019 - |
Domanda
Voglio impostare l'ascoltatore per ascoltare lo stato wireless, qualcuno può aiutarmi con il mio codice
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);
.
// Ecco l'evento che uso che voglio ascoltare il cambio WiFi e il codice sopra riportato è tutto in 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();
}
}
}
.
// Può qualcuno per favore aiutarmi a creare un ascoltatore che ascolterà lo stato WiFi e controlla se WiFi è collegato o connesso se non è che voglio abilitare il traffico di pacchetti di dati tramite 3G / 4G
Soluzione
Il sistema Android chiede di passare a Data Traffic
quando WiFi
non è collegato ma c'è un problema.
Se si spegne WiFi quando la schermata è disattivata, cambierà costantemente tra rete WiFi e 3G e se hai selezionato app per inviare dati sullo sfondo, utilizzerà la connessione dati che è più costiera se non si dispone di un piano dati illimitato.
.
Un altro problema è quando ti trovi in un'area con un segnale wifi non così forte, cambierà costantemente al traffico dati e avrai problemi con la navigazione o qualsiasi altra cosa.
Il terzo problema è la batteria a partire da quello che ho sentito è meglio (batteria saggio) per utilizzare la connessione WiFi rispetto ai dati, con un componente aggiuntivo non spegnere WiFi quando lo schermo è spento. (Anche lo faccio)Perché spegnerlo e su WiFi è più costoso (batteria) per essere sempre acceso.Quindi, quindi lascialo al sistema Android.
Altri suggerimenti
Ho trovato anche quel problema, ecco come ho risolto.
nella mia attività oncreate (..) ho fatto
this.registerReceiver(mWifiStateChangedReceiver,new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION));
.
E in aggiunta ho creato il membro "MwifistateChangeDreceiver" in questo modo
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;
}
}
};
.
Come puoi vedere, quando ottengo WifiManager.WIFI_STATE_ENABLED
, inoltre test se la rete è realmente connessa, poiché un wifi abilitato non significa che sia connesso.Almeno questa era la mia ipotesi, ecco perché sto aspettando fino a quando la rete è realmente connessa.
Se vuoi ascoltare la forza del segnale puoi anche ascoltare a:
WifiManager.RSSI_CHANGED_ACTION