#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) Дескриптор сообщения находится в моей активности, а не в моем сервисе, и «это» тоже не работает