Как долго будет транслироваться программно зарегистрированный приемник? - PullRequest
5 голосов
/ 05 сентября 2011

Я хочу реализовать функцию в моем приложении Android, которая позволит пользователю получать уведомления, когда его страна поддерживается в моем приложении, и у меня есть некоторые сомнения относительно того, как реализовать эту функцию.

Сценарий использования выглядит следующим образом :

Пользователь переходит к Активности, где он может видеть список поддерживаемых стран. Страна пользователя всегда на первом месте, и если она не поддерживается, есть кнопка, по которой он может щелкнуть и запросить информацию о том, когда его страна получит поддержку.

Некоторые идеи :

1. Когда пользователь нажмет на кнопку, я зарегистрирую измененное состояние сети получателя широковещательной рассылки с помощью метода registerReceiver (). В зарегистрированном приемнике я всегда проверяю, подключен ли пользователь к сети Wi-Fi, и, если это так, загружает несколько байтов с сервера, чтобы проверить, поддерживается ли страна пользователя. И когда меня поддержат, я отменим регистрацию получателя. Мое сомнение в этой идее заключается в том, как долго будет жить программно зарегистрированный вещательный приемник? Возможно, получателю нужно будет жить месяцами. Если пользователь не удалит мое приложение, получатель будет постоянно получать события?

2. Зарегистрируйте приемник широковещания в манифесте Android, а когда запрос пользователя будет уведомлен, укажите логическое значение shouldBeInformed в SharedPreferences и всегда проверяйте это значение, прежде чем переходить в приемник широковещания.

У вас есть идеи, как решить эту проблему элегантно и эффективно? C2DM не является подходящим решением в данный момент.

Спасибо.

1 Ответ

2 голосов
/ 05 сентября 2011

Я хочу реализовать функцию в своем приложении Android, которая позволит пользователю получать уведомления, когда его страна поддерживается в моем приложении, и у меня есть некоторые сомнения относительно того, как реализовать эту функцию.

Обычно «поддерживается в моем приложении» подразумевает обновление этого приложения.

Страна пользователя всегда на первом месте, и если она не поддерживается, есть кнопка, по которой он может щелкнуть и запросить информацию о том, когда его страна получит поддержку.

Сохранить страну в SharedPreferences. При первом запуске после каждого обновления приложения посмотрите, есть ли страна в списке поддерживаемых, и откройте «эй! Теперь это поддерживается!» Диалог. Или, в крайнем случае, зарегистрируйтесь на ACTION_PACKAGE_REPLACED, и, если это был ваш пакет, который был заменен, посмотрите, поддерживаете ли вы страну, и поставьте Notification в строке состояния.

Когда пользователь нажимает на кнопку, я регистрирую измененное состояние сети получателя широковещательной рассылки с помощью метода registerReceiver ().

Почему?

В зарегистрированном приемнике я всегда проверяю, подключен ли пользователь к сети Wi-Fi, и, если это так, загружает некоторые байты с сервера, чтобы проверить, поддерживается ли страна пользователя.

Вам не нужно BroadcastReceiver для этого. Всякий раз, когда вы решите проверить наличие обновлений (например, один раз в день через AlarmManager), вы можете проверить, подключено ли устройство к WiFi. Я не совсем уверен, почему вы заботитесь о Wi-Fi или нет, и я понятия не имею, как это связано с обновлением вашего приложения (обычно это делается в Android Market).

А когда получит поддержку, я отменим регистрацию получателя.

Он будет давно незарегистрирован.

Мое сомнение в этой идее заключается в том, как долго будет жить программно зарегистрированный приемник вещания? Возможно, получателю нужно будет жить месяцами.

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

Зарегистрируйте широковещательный приемник в манифесте Android, и, когда пользовательский запрос будет уведомлен, установите логическое значение shouldBeInformed в SharedPreferences и всегда проверяйте это значение, прежде чем переходить в широковещательный приемник.

Почему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...