Может ли LocalBroadcastManager обнаруживать изменения WifiManager.NETWORK_STATE_CHANGED_ACTION?

Я хотел бы уведомить мою активность о любых изменениях подключения Wi-Fi с помощью BroadcastReceiver. Поскольку эта трансляция находится внутри приложения, я пытаюсь использовать более эффективный объект LocalBroadcastManager.

Однако что бы я ни делал, метод BroadcastReceiver.onReceive() не срабатывает. Возможно, я подключил его неправильно, или, возможно, действие WifiManager.NETWORK_STATE_CHANGED_ACTION, которое я прослушиваю, не может быть зарегистрировано для LocalBroadcastManager? Любая помощь или разъяснение будут оценены.

Вот пример моего класса Activity, который содержит всю логику.

public class MyActivity extends ActionBarActivity {

private BroadcastReceiver wifiReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION))
        {
            // Do something
        }
    }
};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_my);

    IntentFilter wifiStatusIntentFilter = new IntentFilter();
    wifiStatusIntentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
    wifiStatusIntentFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
    LocalBroadcastManager.getInstance(this).registerReceiver(wifiReceiver, wifiStatusIntentFilter);
}

protected void onPause() {
    super.onPause();
    LocalBroadcastManager.getInstance(this).unregisterReceiver(wifiReceiver);
}

protected void onResume() {
    super.onResume();

    IntentFilter wifiStatusIntentFilter = new IntentFilter();
    wifiStatusIntentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
    LocalBroadcastManager.getInstance(this).registerReceiver(wifiReceiver, wifiStatusIntentFilter);
}

}

Когда я включаю и выключаю Wi-Fi на своем мобильном телефоне или вхожу и выхожу из диапазона Wi-Fi, метод onReceive() никогда не запускается.


person Nathan Liu    schedule 11.04.2015    source источник


Ответы (2)


Вы не можете получить WifiManager.NETWORK_STATE_CHANGED_ACTION с помощью LocalBroadcastManager. LocalBroadcastManager работает только внутри вашего процесса.

Помощник для регистрации и отправки широковещательных сообщений о намерениях локальным объектам в вашем процессе. Это имеет ряд преимуществ по сравнению с отправкой глобальных широковещательных сообщений с помощью sendBroadcast(Intent):

  • Вы знаете, что данные, которые вы транслируете, не покинут ваше приложение, поэтому не нужно беспокоиться об утечке личных данных.
  • Другие приложения не могут отправлять эти широковещательные сообщения вашему приложению, поэтому вам не нужно беспокоиться о наличии дыр в безопасности, которые они могут использовать.
  • Это более эффективно, чем отправка глобальной широковещательной рассылки через систему.

Вы должны использовать registerReceiver контекста

person Mattia Maestrini    schedule 11.04.2015

Поскольку эта трансляция находится внутри приложения, я пытаюсь использовать более эффективный объект LocalBroadcastManager.

Это работает только для трансляций, которые вы отправляете через LocalBroadcastManager. Он не работает для системных широковещательных сообщений, особенно для тех, которые отправляются другими процессами.

возможно, действие WifiManager.NETWORK_STATE_CHANGED_ACTION, которое я слушаю, не может быть зарегистрировано для LocalBroadcastManager?

Правильный.

person CommonsWare    schedule 11.04.2015