Обнаружение изменений подключения в подклассе Android Activity

Я относительно новичок в Android,

Я прочитал соответствующие статьи по обнаружению изменений сетевого подключения и реализовал это BroadcastReceiver подкласс, сделал необходимые дополнения к AndroidManifest.xml, и я получаю необходимые сообщения об изменении состояния, как и ожидалось:

public class NetworkStateReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

    }
}

Вопрос: как я могу получать или пересылать эти уведомления в / на мой Activity подклассы? Видимо создание экземпляра NetworkStateReceiver в моем Activity подкласс и переопределение onReceive там не делает трюк.

Заранее спасибо за любые указатели...

Редактировать:

Я закончил вещать Intent от onReceive выше вот так:

Intent target = new Intent(CONNECTIVITY_EVENT);
target.putExtra(CONNECTIVITY_STATE, networkInfo.isConnected());
context.sendBroadcast(target);

И получая это по моему Activity вот так:

@Override
protected String[] notifyStrings() {
     return ArrayUtils.addAll(super.notifyStrings(), new String[] {NetworkStateReceiver.CONNECTIVITY_EVENT});
}

@Override
protected void notifyEvent(Intent intent, String action) {
    super.notifyEvent(intent, action);
    if (action != null) {
        if (action.equalsIgnoreCase(NetworkStateReceiver.CONNECTIVITY_EVENT)) {
            boolean isConnected = intent.getBooleanExtra(NetworkStateReceiver.CONNECTIVITY_STATE, true);
            // Do something...
        }
    }
}

1 ответ

Решение

Я бы рекомендовал использовать 1) интерфейсный подход. Итак, объявите интерфейс, который имеет networkChanged() метод, и есть класс, который владеет этим BroadcastReceiver вести список классов, которые хотят получать уведомления об изменениях сети с локальным List<InterfaceName>

2) Пропустить создание интерфейса и использовать утилиту подписки. Мои два фаворита - https://github.com/greenrobot/EventBus

а также

https://gist.github.com/bclymer/6708819 (меньше, меньше используется, также отказ от ответственности: я написал это)

С их помощью вы будете создавать классы событий со свойствами, а затем подписываться и публиковать экземпляры этих классов.

В вашей деятельности

@Override
public void onCreate() {
    ...
    EventBus.getInstance().subscribe(this, MyType.class);
}

@Override
public void onDestroy() {
    ...
    EventBus.getInstance().unsubscribe(this, MyType.class);
}

@Override
public void newEvent(Object event) {
    if (event instanceOf MyType) {
        // do stuff
    }
}

И тогда в вашем BroadcastReceiver

@Override 
public void onReceive(Context context, Intent intent) {
    EventBus.post(new MyType(true));
}

Пример MyType

public class MyType {
    public boolean networkEnabled;
    public MyType(boolean networkEnabled) {
        this.networkEnabled = networkEnabled;
    }
}

В этих примерах используется утилита 2-й подписки (моя).

Другие вопросы по тегам