Проблема дизайна с функциями обратного вызова в Android - PullRequest
0 голосов
/ 17 июня 2010

В настоящее время я разрабатываю приложение для Android, которое получает доступ к значениям Wi-Fi, то есть приложение должно сканировать все точки доступа и их конкретные уровни сигнала.Я знаю, что должен расширить класс BroadcastReceiver, переписывая метод BroadcastReceiver.onReceive(Context context, Intent intent), который вызывается, когда значения готовы.
Возможно, существуют решения, предоставляемые самой системой Android, но я относительно новичок в Android, поэтому яможет понадобиться помощь
Проблема, с которой я столкнулся, заключается в том, что я получил один класс (действие, таким образом контролируемое пользователем), которому нужны результаты этого сканирования для двух разных вещей (сначала для сохранения значений в базе данных, или во-вторых, чтобы использовать их для дальнейших расчетовно не оба одновременно!) Итак, как спроектировать систему обратного вызова, чтобы «транспортировать» результаты сканирования из onReceive(Context context, Intent intent) в операцию, предназначенную пользователем?Мое первое решение состояло в том, чтобы определить перечисления для каждого варианта использования (сохранить или использовать для вычислений), которые классы, заинтересованные в WLAN, должны представить при запросе значений.Но это заставит расширяющий класс BroadcastReceiver сохранить текущее перечисление и использовать его в качестве параметра в функции обратного вызова класса запросов (этот класс запросов должен знать, что он запрашивал при обратном вызове)
Но это кажетсядля меня это немного грязно;)
Значит, кто-нибудь подойдет для этого?

1 Ответ

0 голосов
/ 17 июня 2010

Возможно, вы захотите использовать анонимный внутренний класс в каждом действии и / или экземпляр производного BroadcastReciever в каждом действии и зарегистрировать его с Context#registerReceiver.Затем пусть он взаимодействует со своим родителем, когда вызывается onRecieve.Я думаю, что вы пытаетесь сделать, это определить BroadcastReciever в вашем файле манифеста, а затем передать данные в действие таким образом.Что не лучший способ достичь того, что вы хотите.

...