GCMIntentService отправляет сообщение запущенному действию

#android #google-cloud-messaging #intentservice

#Android #google-облако-обмен сообщениями #intentservice

Вопрос:

У меня есть приложение для Android, в котором мне нужно уведомлять пользователя, ПОКА он выполняет определенное действие, о том, что что-то произошло.

Уведомления не будут выполнять эту работу за меня, поскольку мне нужно информировать пользователя через диалоговое окно, отправлять данные на сервер и запускать другое действие… Я имею в виду, я знаю, что когда это сообщение будет доставлено, пользователь будет использовать приложение и видеть экран, принадлежащий acrivity, на который я хочу отправить сообщение.

Это сообщение должно быть запущено службой GCM. Я сделал все, чтобы получить сообщение, и в настоящее время мой GCMIntentService работает нормально (следуя этой ссылке).

Теперь я попытался отправить сообщение в действие, определив в нем обработчик следующим образом:

 public Handler _handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
  

У меня здесь 2 проблемы:

1) Я действительно не знаю, будет ли этот обработчик запущен при фактической запущенной активности

2) В этом событии «handleMessage» у меня нет контекста запущенного действия, поэтому я не могу, например, вызвать AlertDialog (я получаю исключение NullPointerException)

Как я могу этого добиться? Должен ли я переосмыслить связь между сервисом и действием?

Спасибо!

Ответ №1:

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

проверить код :

 public void sendNotification(String msg) {
    mNotificationManager = (NotificationManager) context
            .getSystemService(Context.NOTIFICATION_SERVICE);

    PendingIntent contentIntent = PendingIntent.getActivity(context, 0,
            new Intent(context, returnClass), 0);

    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
            context)
            .setSmallIcon(R.drawable.notification)
            .setContentTitle(
                    context.getResources().getString(R.string.app_name))
            .setAutoCancel(true)
            .setStyle(new NotificationCompat.BigTextStyle().bigText(msg))
            .setContentText(msg);

    mBuilder.setContentIntent(contentIntent);
    mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());
}
  

На ваш вопрос 2-

В этом событии «handleMessage» у меня нет контекста запущенного действия, поэтому я не могу, например, вызвать AlertDialog (я получаю исключение NullPointerException)

Вы можете использовать это как ссылку на контекст (GcmService.this)

Надеюсь, что это поможет

Комментарии:

1. 1) Уведомления не будут выполнять эту работу за меня, поскольку мне нужно информировать пользователя через диалоговое окно, отправлять данные на сервер и запускать другое действие… Я имею в виду, я знаю, что когда это сообщение будет доставлено, пользователь будет использовать приложение и видеть экран, принадлежащий acrivity, которому я хочу отправить сообщение 2) Дескриптор сообщения находится в моей активности, а не в моем сервисе, и «это» тоже не работает