Как наиболее эффективно перехватить подключение к сети Wi-Fi на Android

Я хочу выполнить какое-то действие, когда телефон подключается к определенной сети WiFi. Насколько я вижу, у меня есть 2 широковещательных намерения для перехвата, которые удовлетворят этому: 1. Состояние Wi-Fi изменилось. 2. Изменено подключение.

Однако проблема в том, что я хочу перехватывать ТОЛЬКО события Wifi Connected. В настоящее время мой приемник срабатывает при любых изменениях в WiFi, включая отключение, о котором я действительно не забочусь. Я чувствую, что это пустая трата процессорного времени.

Есть ли какие-либо более конкретные намерения, такие как «Wi-Fi Connected»? Или, в качестве альтернативы, я могу добавить что-то в фильтр намерений, чтобы добиться этого?

Спасибо!


person Avi Shukron    schedule 31.07.2013    source источник


Ответы (2)


Вы можете определить тип сетевого события, запросив у него дополнительную информацию. Во-первых, убедитесь, что вы зарегистрировали IntentFilter в действии WifiManager.NETWORK_STATE_CHANGED_ACTION и привязали его к правильному BroadcastReceiver.

Затем в методе onReceive получателя вы можете проверить, является ли полученное событие NetworkInfo.State.CONNECTED событие:

@Override
public void onReceive(Context context, Intent intent) {    
  NetworkInfo networkInfo = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);

  if (networkInfo != null 
     && networkInfo.getState().equals(NetworkInfo.State.CONNECTED) ) {
     // Do whatever you want
  }
}
person Halim Qarroum    schedule 31.07.2013
comment
Я это знаю, но это не ответ на вопрос. Я не хочу, чтобы мой приемник вызывался при каждом изменении состояния сети. - person Avi Shukron; 31.07.2013
comment
Я не думаю, что это возможно, поскольку вы ограничены событием, которое предоставляет Android. Что касается беспроводных функций, перед получением EXTRA_NETWORK_INFO необходимо знать, что это NetworkInfo.State.CONNECTED. - person Halim Qarroum; 02.08.2013

Насколько я могу судить, нет возможности отфильтровать намерение WifiManager.NETWORK_STATE_CHANGED_ACTION по состоянию (Подключено/Отключено) или по имени сети.

Очень плохо :(

person Avi Shukron    schedule 24.05.2014