Intereting Posts
Android, как программно скрыть значок запуска React Native: цель с хэш-строкой 'android-X' не найдена Может ли папка Android Layout содержать подпапки? Java.lang.NoSuchMethodError при использовании getFragmentManager () с библиотекой actionbarsherlock Фрагмент уже добавлен. Поддержка lib Как установить файлы apk на мой эмулятор Android с Eclipse? Недопустимый нижний колонтитул Listview Как изменить свой ресурс программно? Как применить динамическую альфа-маску к тексту на Android Вызов класса обслуживания Один раз в день, когда приложение запускается в android, при меньшем потреблении батареи Какие языки программирования могут использоваться для разработки в Android? Активность Android onDestroy () не всегда вызывается, и если вызывается только часть кода, выполняется Андроидные песочные часы Определение пользовательских атрибутов Запретить строку состояния для появления андроида (изменено)

Android GCM (push-уведомление): устройство не получает уведомления, если приложение остановлено

Я использую push-уведомление (GCM) в своем проекте Android.

Согласно учебнику GCM, я внедрил широковещательный приемник и зарегистрировал его в AndroidManifest.xml .

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

Но это не работает, как я ожидаю. onReceive() не вызывается, если приложение закрыто. Похоже, что мое понимание вещательных приемников является правильным, и проблема в моих ожиданиях относительно GCM.

Одна из возможных причин заключается в том, что сервер google даже не отправляет уведомление на устройство, если приложение закрыто. Итак, правильно ли мое приложение может получать сообщение (и onReceive() будет вызываться в широковещательном приемнике), только если он работает или находится в фоновом режиме (но не закрыт)?

Заранее спасибо.

Solutions Collecting From Web of "Android GCM (push-уведомление): устройство не получает уведомления, если приложение остановлено"

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

Если пользователь принудительно останавливает ваше приложение из «Настройки», ваш код никогда не будет запускаться снова , пока что-то вручную не запустит один из ваших компонентов, как правило, пользователь вручную запускает действие (с Android 3.1). Следовательно, если пользователь принудительно останавливает ваше приложение из настроек, вы не будете получать сообщения GCM на новых устройствах / эмуляторах.

Итак, правильно ли мое приложение может получать сообщение (и метод onReceive () будет вызываться в широковещательном приемнике), только если он работает или находится в фоновом режиме (но не закрыт)?

В Android с точки зрения приложения нет понятия «закрыто». Если «закрыто» означает «не имеет ходового процесса, где последний процесс был завершен нормально», то да, вы должны получать сообщения GCM и другие трансляции. Но, опять же, принудительная остановка не «прекращается нормально».

По словам Франческо Нерьери в этой андроид-gcm-нитке :

Поэтому, если вы принудительно остановите приложение, предполагаемое поведение для ICS – это приложение, чтобы не получать сообщение. В JB это означает, что GCM также отменит регистрацию приложения, это неудачное поведение, и мы работаем над тем, чтобы изменить это (незарегистрированная часть в JB).

В документации говорится, что:

Приложение Android на устройстве Android не нужно запускать для приема сообщений. Система пробудит приложение Android через Intent broadcast, когда сообщение поступит, пока приложение настроено с правильным приемником и разрешениями вещания.

Проверьте реализацию и разрешения вашего широковещательного приемника.