Для отображения компактного однострочного уведомления, такого как уведомление о платеже, необходимо создать Notification Channel
с приоритетом IMPORTANCE_MIN.
@TargetApi(Build.VERSION_CODES.O)
private static void createFgServiceChannel(Context context) {
NotificationChannel channel = new NotificationChannel("channel_id", "Channel Name", NotificationManager.IMPORTANCE_MIN);
NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.createNotificationChannel(channel);
}
А затем создайте текущее уведомление, например:
public static Notification getServiceNotification(Context context) {
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context, "channel_id");
mBuilder.setContentTitle("One line text");
mBuilder.setSmallIcon(R.drawable.ic_notification);
mBuilder.setProgress(0, 0, true);
mBuilder.setOngoing(true);
return mBuilder.build();
}
ПРИМЕЧАНИЕ
Обратите внимание, что я проверил его сIntentService
вместо Service
, и это работает.Также я только что проверил установку Thread.sleep()
на 15 секунд, и уведомление показывается отлично, пока IntentService
не остановится.
Есть некоторые изображения (извините, некоторые тексты на испанском языке, но я думаю, чтоизображения по-прежнему полезны):
А если перетащить и открыть уведомление, оно будет выглядеть следующим образом:
EXTRA
Если вы заметили, что система Android отображает уведомление о всех приложениях, использующих батарею (приложения с текущими службами), выможет понизить приоритет этого типа уведомлений, и он будет отображаться в виде однострочных уведомлений, таких как уведомление о зарядке.
Взгляните на это:
Просто нажмите и удерживайте это уведомление и выберите ВСЕ КАТЕГОРИИ:
и установите значение LOW:
В следующий раз это уведомление о «расходе заряда батареи»будет отображаться как уведомление о зарядке.