Программирование Android сообщений

При разрабортке под Android используются 3 типа уведомлений:

Alert Dialog

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

new AlertDialog.Builder(this).setTitle("New Year").setMessage("Happy New Year").setIcon(R.drawable.christmas155).setNeutralButton("Close", null).show();
	

Вот как Alert Dialog будет выглядеть в эмуляторе:

Данный вид сообщений может содержать в себе не более трех кнопок( может вообще их не содержать), а именно Neutral, Positive и Negative. К ним логично привязать следующие действия:

В данном примере сообщение создается c использованеим следующих методов: Также в Alert Dialog можно выводить списки с одиночным и множественным выбором, а с использованием метода AlertDialog.Builder.setView(View view) задавать свой собственный стиль отображения диалога.

Более подробно познакомиться с Alert Dialog сообщениями можно из официальной документации здесь.

Toast

Главное отличие Toast сообщений в том, что они автоматически исчезают после определенного значения таймаута. На текущий момент можно задать всего два значения для таймаута, а именно Toast.LENGTH_SHORT и Toast.LENGTH_LONG
Рассмотрим создание простого всплывающего Toast сообщения:

Toast.makeText(this, "Your message have been sent " , Toast.LENGTH_SHORT).show();
	

Вот как созданный Toast будет выглядеть в эмуляторе:

Как несложно догадаться в метод makeText(), который формирует нам простое всплывающее сообщение передается 3 параметра, а именно Context , текст самого сообщения и таймаут. Далее с помощью метода show() сообщение отображается на экране.
При необходимости можно задать выравнивание сообщению с помощью метода setGravity() , а также задать свой собственный стиль отображения через setView(View view).

Более подробно познакомиться с Toast сообщениями можно из официальной документации здесь.

Notification

Главное отличие Notification сообщений в том, что они не показываются непосредственно в области вашего приложения, а отображаются в зоне уведомлений в верхней панели вашего устройства. В зоне уведомлений отображается сначала только маленькая иконка полученного сообщения, а при пролистывании панели мы увидим список всех полученных уведомлений вместе с текстовым описанием.
Рассмотрим создание простого уведомления:

//описание парметров сообщения
final int NOTIF_ID = 1234;
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this)
	.setSmallIcon(R.drawable.christmas141)
	.setLargeIcon(BitmapFactory.decodeResource(this.getResources(),R.drawable.gifts_icon))
	.setContentTitle("New present  ")
	.setContentText("Present from Mikhail S")
	.setAutoCancel(true);
//описание действия при клике по сообщению
Intent resultIntent = new Intent(this, MyActivity.class);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
stackBuilder.addParentStack(MyActivity.class);
stackBuilder.addNextIntent(resultIntent);

PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(
	0, PendingIntent.FLAG_UPDATE_CURRENT );

mBuilder.setContentIntent(resultPendingIntent);
//отправка сообщения в область нотификации
NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(NOTIF_ID, mBuilder.build());

Для того чтобы увидеть созданное уведомление необходимо прокрутить Action bar (панель в верхней части устройства). Вот как созданный Notification будет выглядеть в эмуляторе:

Для создания корректного уведомления необходимо выполнить 3 действия: описать параметры самого сообщения, описать действие, которое должно выполняться при клике по сообщению, а также отправить уведомление в менеджер. Рассмотрим каждый из пунктов подробнее.

Параметры уведомления

Для создания уведомления обязательно задать 3 следующих параметра:

Следующие указанные мною параметры не обязательны Также можно задать приоритет сообщения методом setPriority() для управления его отображением в списке уведомлений.

Действие уведомления

При клике по уведомлению, можно задать действие , которое будет осуществляться.
Сначала мы создаем простой Intent и указываем ему какую активность нашего приложения открывать. Мы можем передать в неё какие-либо данные методом putExtra() .
Затем мы создаем объект TaskStackBuilder, для того чтобы при переходе из заданной активности приложения по кнопке "назад" пользователь корректно попадал на рабочий экран.
Далее мы оборачиваем Intent в PendingIntent для того, чтобы приложение, в которое мы его передаем ( в данном случае это NotificationManager) выполняло указанный кусок кода с правами текущего приложения, а не своими собственными ( как при передаче простого Intent). При создании PendingIntent первый параметр можно задать 0, так как в официальной документации сказано, что он не используется. Второй параметр - это флаг, который позоляет управлять поведением при создании такого же действия . Он имеет 4 значения:

Таким образом можно избавиться от уведомлений с разными id , но в целом одним смыслом. Например, уведомление о том, что пришло новое сообщение, если оно уже есть в системе, то обновляется просто счетчик пришедших сообщений, если же нет - то вы видите полноценное уведомление.

Отправка уведомления

Для отправки уведомлений нам необходимо сделать 2 действия : создать объект менеджер уведомлений NotificationManager, а затем вызвать у данного объекта метод notify(), передавая первым аргументом идентификатор сообщения, а вторым само уведомление с заданными параметрами. Причем при отправке второго сообщения с тем же id, оно заменит предыдущее.

Более подробно познакомиться с Notification сообщениями можно из официальной документации здесь и статьей здесь.