Обнаружение изменений подключения в подклассе 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-й подписки (моя).