if TJBuild_VERSION.JavaClass.SDK_INT > 26 then // JBuild_VERSION_CODES.JavaClass.O
begin
{$ifdef VER330}
// new ways for SDK > 26 (won't be called when API < 26 anyways)
// Создаем канал уведомления
ServiceChannel := TJNotificationChannel.JavaClass.init(
StringtoJString('com.radio.one'), //CHANNEL_ID
StrToJCharSequence('Public radio Channel'),
TJNotificationManager.JavaClass.IMPORTANCE_DEFAULT
);
// Получаем указатель на сервис работы с увдомлениями
Obj := TAndroidHelper.Context.getSystemService(
TJContext.JavaClass.NOTIFICATION_SERVICE);
// Выдергиваем оттуда менеджер уведомлений
NotificationManager := TJNotificationManager.Wrap(Obj);
// Передаем менеджеру наш канал уведомлений
NotificationManager.createNotificationChannel(ServiceChannel);
// Создаем намерение с параметрами нашего приложения
NewIntent:= TAndroidHelper.Context.getPackageManager().getLaunchIntentForPackage(
TAndroidHelper.Context.getPackageName());
NewIntent.setAction(TJIntent.JavaClass.ACTION_MAIN);
NewIntent.addCategory(TJIntent.JavaClass.CATEGORY_LAUNCHER);
NewIntent.addFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK);
// Создаем намерение для передачи другому приложению действия с правами нашего приложения
PendingIntent := TJPendingIntent.JavaClass.getActivity(
TAndroidHelper.Context, 0, NewIntent,
TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK
);
// Создаем уведомление
ncb := TJNotificationCompat_Builder.JavaClass.init(
TAndroidHelper.Context,
StringToJString('com.radio.one')
);
// Указываем параметры уведомления
// Заголовок уведомления
ncb.setContentTitle(StrToJCharSequence('PublicRadio'));
// Текст для служб специальных возможностей
// Начиная с выпуска L, этот текст больше не отображается на экране, но он по-прежнему полезен для служб специальных возможностей (где он служит звуковым объявлением о появлении уведомления).
// ncb.setTicker(StrToJCharSequence('MyCommsService')); // can't remember why this is commented out to be honest
// Иконка уведомления
ncb.setSmallIcon(JavaService.getApplicationInfo.icon);
// Действие при нажатии на уведомления
ncb.setContentIntent(PendingIntent);
// Действие при нажатии на уведомления
// Установите, является ли это "текущим" уведомлением. Текущие уведомления не могут быть отклонены пользователем, поэтому ваше приложение или служба должны позаботиться об их отмене. Они обычно используются для обозначения фоновой задачи, которой пользователь активно занят (например, воспроизведение музыки) или которая каким-то образом ожидает выполнения и поэтому занимает устройство (например, загрузка файла, операция синхронизации, активное сетевое подключение).
ncb.setOngoing(True);
// Выводим уведомление
ntf := ncb.build;
Как то так