Как приложения Android получают уведомления даже без запуска?

1

Подумайте о приложениях, которые имеют большие блоги (которые очень похожи на канал RSS, но для вашего телефона). Всякий раз, когда в блоге публикуется новое сообщение, приложение создает уведомление на телефоне пользователя о новом сообщении.

Вот некоторые вещи, которые я хотел бы рассказать об этом:

  1. Это уведомление вытягивается приложением на моем телефоне или нажимается на него блогом?
  2. Как это работает, даже если я не запустил приложение?
  3. Какие классы и службы платформы Android используются для создания таких приложений?

Большое спасибо.

Теги:

4 ответа

3
Лучший ответ

Вы можете легко сделать что-то вроде этого:

  1. Установили ли вы приложение с помощью AlarmManager
  2. Попросите приемника для тревоги запустить службу, которая проверяет наличие обновлений
  3. Отображение уведомления пользователю с помощью NotificationManager

Это решение опроса, которое должно быть хорошо и, вероятно, лучше в большинстве случаев, как вы описали.

Однако, если вы хотите использовать push-решение, вы можете посмотреть на Android C2DM, который позволяет вашему серверу отправлять push-уведомления зарегистрированному Android-устройству.

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

Как приложения запускаются без запуска?

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

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

  • 0
    У меня все еще нет пункта 2. Как приложение может установить Сервис, который проверяет наличие обновлений, если я даже не запустил его? То есть я включаю свой телефон, и даже без запуска приложения получаю эти уведомления. Или кто-то другой, а не мое приложение будет устанавливать этот сервис?
  • 0
    Приложение может регистрировать различные события, такие как загрузка телефона и т. Д. Кроме того, если приложение устанавливает тревогу, приложение может быть полностью закрыто при срабатывании будильника, и ОС запускает любую часть приложения, указанную в тревоге.
1

Конечно, есть много способов сделать это, но в общем случае я бы предположил:

  1. Он тянут по телефону
  2. Даже если вы не видите приложение, оно может работать в фоновом режиме
  3. Это действительно то, что делает приложение, любой конкретный аспект, о котором вы хотите узнать?
  • 0
    Что касается 2, который запускает эту службу, как только я включаю телефон, потому что даже без запуска приложения я все равно получу уведомления. Благодарю.
  • 0
    В большинстве случаев вы хотите, чтобы ваше приложение получало широковещательный сигнал ACTION_BOOT_COMPLETED для запуска службы
Показать ещё 1 комментарий
1

Это уведомление вытягивается приложением на моем телефоне или нажимается на него блогом?

Это может быть и то.

Как это работает, даже если я не запустил приложение?

Ну, на Android 3. 1+ вам нужно будет запустить приложение хотя бы один раз, чтобы любой из этих материалов работал.

Помимо этого, они используют такие вещи, как AlarmManager (для pull) или C2DM (для push), ни один из которых не требует, чтобы вы "запустили приложение", больше, чем вам нужно, чтобы открывать активность Gmail, чтобы иметь возможность получать новые сообщения электронной почты.

1

В одну сторону:

  1. приложения могут запускать Sercvice через Broadcast после загрузки. См. Здесь: Как автозапуск приложения для Android?
  2. Приложение запускает Service при запуске, Служба похожа на активность, за исключением без интерфейса и работает в фоновом режиме
  3. Service время от времени ищет новые сообщения, реализованные, например, как Runnable в ScheduledThreadPoolExecutor
  4. Runnable находит новое сообщение и делает уведомление

Примечание. Это также решение для опроса. вместо ScheduledThreadPoolExecutor вы можете использовать Handler который всегда вызывает себя или просто Thread, который время от времени спит и просыпается. IMHO ScheduledThreadPoolExecutor - это "хороший" способ.

  • 0
    Спасибо, я не знал об автозапуске. Имеет смысл.
  • 0
    Я не думаю, что есть что-то вроде регистрации в AutoStart ... отметьте это, чтобы автоматически запустить службу: stackoverflow.com/questions/1056570/…
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню