Давайте сегодня напишем проект в Android Studio с использованием нотификации, то есть уведомлений в верхней строке мобильного устройства.

Смотрите видео: Уведомления - Notifications в Android Studio

Создадим новый проект, используем EmptyActivity, нажмем Next, дадим названием проекта, например, TestNotification, пусть будет так.

Тут всё оставляем как есть, минимальный уровень будет подобран исходя из установленных SDK пакетов, у меня минимум это 5 андроид. Нажмем Finish.

Из activity_main.xml удалим TextView с надписью «Hello World», и добавим кнопку Button, и расположим ее по центру.

Перейдём в MainActivity, объявим переменные для работы, будем использовать Notification manager, менеджер уведомлений, notify_id для разделения, если нам понадобится несколько уведомлений в одном приложении, добавим переменную CHANNEL_ID и кнопку. Я по старой привычке назову ее b1.

private NotificationManager notificationManager;
private static final int NOTIFY_ID = 1;
private static final String CHANNEL_ID = "CHANNEL_ID";
Button b1;

В onCreate свяжем кнопку с переменной, через findViewById(R.id.button), поскольку кнопка имеет id button.

b1=findViewById(R.id.button);

Подключим notificationmanager, он получит из приложения контекст и будет доступен NOTIFICATION_SERVICE уведомлений.

notificationManager = (NotificationManager) getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE);

Теперь напишем обработчик нажатия на кнопку b1 setonclicklistener (New view.onclicklistener).

b1.setOnClickListener(new View.OnClickListener() {
       @Override
       public void onClick(View v) {
		///******////

}});

В onclick объявим intent, который будет работать с MainActivity, нашей основной формой, добавим флаги для работы с уведомлениями либо очистить, либо создать новые.

Intent intent = new Intent(getApplicationContext(), MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);

Определим отложенный Intent, он будет работать с флагом обновление. Теперь напишем NotificationCompat.Builder, построитель наших уведомлений, исходя из контекста будет передавать этот channal_id, добавим setAutoCancel(false).

PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
	NotificationCompat.Builder notificationBuilder =
    new NotificationCompat.Builder(getApplicationContext(), CHANNEL_ID)
	    .setAutoCancel(false)

Присвоим для уведомления иконку, я специально не готовил ее, и использовать буду ту, которая есть в проекте в ресурсах. Вы можете выбрать или добавить сюда свою, у меня будет небольшая иконка Android.

.setSmallIcon(R.drawable.ic_launcher_foreground)

Передаем текущее время в миллисекундах, setcontentintent присвоим отложенный intent, который мы указали ранее.

.setWhen(System.currentTimeMillis())
.setContentIntent(pendingIntent)

Теперь вот собственно передадим заголовок для нашего уведомления, передадим текст сообщения уведомления, собственно "Какой то текст.............", текст может быть статичным или вызываться по событию.

.setContentTitle("Заголовок")
.setContentText("Какой то текст.............")

Передадим приоритет, в принципе, его можно будет изменить, вот сейчас система требует, чтобы мы добавили поддержку ранней версии, нажмем alt+Enter, и в импорт добавится подключение приоритета.

import static android.support.v4.app.NotificationCompat.PRIORITY_LOW;

////**********/////

.setPriority(PRIORITY_LOW);

Можно его изменить его на HIGH или default, по умолчанию, давайте изменил приоритет на высокий.

.setPriority(PRIORITY_HIGH);

Так по этой части у нас как бы всё, теперь нужно объявить ещё одну функцию, пока ее нет, напишем ее ниже, для работы с notificationManager, поскольку уведомления были разработаны под определённые версии и начиная на сколько я помню с третей или с четвертой, могут возникать проблемы и уведомления не будут отображаться.

createChannelIfNeeded(notificationManager);
notificationManager.notify(NOTIFY_ID, notificationBuilder.build());

Напишем public static void createChannelIfNeeded - NotificationManager manager, если версия sdk больше или равно версии O (oreo) или API 26, а я использую API 27(версия андроид 8.1), то будем использовать NotificationManager создавая канал уведомлений, new NotificationChannel и createNotificationChannel. Соответственно, при использовании SDK ниже api 26 такая проверка не потребуется.

public static void createChannelIfNeeded(NotificationManager manager) {
	if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
		NotificationChannel notificationChannel = new NotificationChannel(CHANNEL_ID, CHANNEL_ID, NotificationManager.IMPORTANCE_DEFAULT);
		manager.createNotificationChannel(notificationChannel);
	}
}

Вот такой код получился, по импорту всё, сохраняем.

Давайте построим проект по ctrl+f9, проверим нет ли ошибок, вроде всё хорошо, теперь можно запустил эмулятор, дождемся запуска.

Идёт установка apk на эмулятор, при нажатии на кнопку в верхней строке появится уведомление с названием приложения(TestNotification), время получения уведомления – now – сейчас, так как в эмуляторе английский язык, заголовок и наш текст.

Удалим все уведомления и повторим нажатие на кнопку, все работает. Если нажать на кнопку и свернуть приложение, сделать клик по уведомлению, то приложение снова появится на экране.

Если вывести ярлык из меню на главный экран эмулятора, то на иконке можно увидеть кружок, означающий, что по этому приложению есть уведомление, если почистить строку уведомлений, кружок исчезнет с иконки приложения.

Cкачать архив для ознакомления - проект Блютуз подключение Android и Arduino:


ZIP архив с проектом


Смотрите видео: Уведомления - Notifications в Android Studio




Понравилась статья? Поделитесь ею с друзьями и напишите отзыв в комментариях!

Связанные статьи

Предыдущие статьи

We use cookies on our website. Some of them are essential for the operation of the site, while others help us to improve this site and the user experience (tracking cookies). You can decide for yourself whether you want to allow cookies or not. Please note that if you reject them, you may not be able to use all the functionalities of the site.

Ok