Прослушивание состояния WIFI
-
12-11-2019 - |
Вопрос
Я хочу настроить прослушиватель на прослушивание в состоянии беспроводной сети, может ли кто-нибудь помочь мне с моим кодом?
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);
//вот событие, которое я использую и хочу прослушивать изменения Wi-Fi, и весь приведенный выше код находится в 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
Решение
Система Android просит переключиться на Data Traffic
когда WiFi
не подключен, но есть проблема.
Если вы выключите Wi-Fi при выключенном экране, он будет постоянно переключаться между сетью Wi-Fi и сетью 3G, и если вы выбрали приложения для отправки данных в фоновом режиме, будет использоваться подключение для передачи данных, которое будет стоить дороже, если у вас нет безлимитного тарифного плана. .
Другая проблема заключается в том, что когда вы находитесь в зоне с не очень сильным сигналом Wi-Fi, он постоянно будет меняться на трафик данных, и у вас возникнут проблемы с просмотром страниц или чем-то еще.
Третья проблема связана с батареей, поскольку, насколько я слышал, лучше (с точки зрения батареи) использовать соединение Wi-Fi, чем передачу данных, с одним дополнением не отключать Wi-Fi, когда экран выключен. (даже я так делаю) потому что его выключение и включение Wi-Fi обходится дороже всего (батарея), чтобы он всегда был включен.поэтому оставьте это системе Android.
Другие советы
Я тоже столкнулся с этой проблемой, вот как я ее решил.
В моей деятельности onCreate(..) я сделал
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
Я дополнительно проверяю, действительно ли сеть подключена, поскольку включенный Wi-Fi еще не означает, что она подключена.По крайней мере, я так предполагал, поэтому жду, пока сеть действительно подключится.
Если вы хотите прослушать силу сигнала, вы также можете прослушать:
WifiManager.RSSI_CHANGED_ACTION