Так на самом деле у вас есть четыре состояния, как (+ пятый, если Интернет или нет)
когда сеть доступна, вы должны проверить интернет-провайдера посредством мониторинга состояния Wi-Fi и мобильной сети, ваши четыре состояния
состояния изменения Wi-Fi и
1. Мобильная сеть включена
2. Мобильная сеть отключена
Мобильные состояния изменения сети и
1. Wi-Fi включен
2.Wifi отключен
Прежде всего, вам необходимо следить за тем, доступен ли интернет или нет, после этого вам придется добавить похожих двух слушателей (широковещательные приемники) для изменения состояния Wi-Fi и изменения состояния мобильного телефона и проверить требуемое состояние, я добавил метод проверки состояния ниже,
Ресивер Реализация
проверка изменений в приемнике, а затем проверять состояние
public class Internet_State extends BroadcastReceiver {
//checked with new state changed when event occurs
public boolean oldInternetState;
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
Bundle b = intent.getExtras();
// if Internet available
boolean isConnected = !b
.getBoolean(ConnectivityManager.EXTRA_NO_CONNECTIVITY);
// ignore if no state change
if (oldInternetState == isConnected)
return;
// set new oldInternetState
oldInternetState = isConnected;
boolean isMobile = activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE;
boolean isWifi = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI)
.isAvailable();
//you can save these states to be monitored in wifi and mobile change change listners
//No internet is 0 state
int state = isConnected?1:0;
if(state)
state = checkState(context)
intent.putExtra("state", state);
// and then send this intent to your required method which will
// check the state and perform function
}
@Override
public void initialize(Context context) {
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
//save the current internet state at start of the receiver registration
oldInternetState = false;
if (activeNetwork != null)
oldInternetState = activeNetwork.isConnectedOrConnecting();
}
}
Реализовать два, мобильное и состояние WiFi изменения широковещательных приемников и лучше добавить метод состояния проверки, как этот
Регистрация государство
мониторинг состояния из четырех состояний
public int checkState(Context context){
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isMobile = activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE;
boolean isWifi = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI)
.isAvailable();
//No internet is 0 state
int state = isConnected?1:0;
if(isWifi && isMobile)
state = 1;
else if(isWifi && !isMobile)
state = 2;
if(isMobile && isWifi)
state = 3;
else if(isMobile && !isWifi)
state = 4;
return state;
}
и позвоните по этому методу из 3 Wi-Fi, Интернета и мобильных телефонов ресиверы изменения данных, не забудьте проверить для oldState и сопоставить его с измененным состоянием.
Mobile старое состояние по
NetworkInfo allNetInfo = cm
.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
oldDataState = allNetInfo.getState();
для Wifi состояния
int state = intent.getExtras().getInt(WifiManager.EXTRA_WIFI_STATE);
if (state == WifiManager.WIFI_STATE_ENABLED)
state = 1;
else if (state == WifiManager.WIFI_STATE_DISABLED)
state = 0;
else
return;
if (state == oldWifiState)
return;
oldWifiState = state;
Проблема я получаю включен WiFi 2 до 3 раз
Более одного звонки по Wi-Fi изменение происходит потому, что изменяющиеся состояния Wifi, например TurningOn и TurningOf вызываются ОС, вы должны отменить из них, как я сделал выше, как
if (state == WifiManager.WIFI_STATE_ENABLED)
state = 1;
else if (state == WifiManager.WIFI_STATE_DISABLED)
state = 0;
else
return;
только Enabled и Disabled контролируются в настоящее время.
Это и есть мой вопрос. Как заметить изменения только одним триггером? Кроме того, этот метод позволяет использовать как мобильную сеть, так и Wi-Fi, когда у нас есть оба разрешения. На самом деле Wi-Fi будет активным. Мы должны будем динамически решить, что мобильная сеть отключена, когда включен WiFi. – madhu