2010-06-16 3 views
0

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

ответ

0

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

+0

Я думаю, вы неправильно поняли мой вопрос. Я хотел бы, чтобы процесс сканирования полностью отделялся от активности GUI. GUI владеет объектом, который предлагает методы для получения значений, рассчитанных с использованием значений wlan. Это означает, что объект, принадлежащий графическому интерфейсу, должен начать какую-то услугу или поток для сканирования значений wlan, которые затем переадресовывают или уведомляют всех слушателей, ожидающих какого-то сигнала «значения готовы». Проблема в том, что я должен обрабатывать несколько параметров, таких как «количество сканирований», «как сканировать» и т. Д., Когда GUI больше не знает (по мере того, как он возвращается) –