NotificationCompat с API 26
Я не вижу никакой информации о том, как использовать NotificationCompat с Android O Notification Channels
Я вижу новый конструктор, который принимает channelId
, но как принять уведомление о совместимости и использовать его в NotificationChannel, поскольку createNotificationChannel
принимает объект NotificationChannel
Ответы
Ответ 1
Создайте NotificationChannel
, только если API >= 26
public void initChannels(Context context) {
if (Build.VERSION.SDK_INT < 26) {
return;
}
NotificationManager notificationManager =
(NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
NotificationChannel channel = new NotificationChannel("default",
"Channel name",
NotificationManager.IMPORTANCE_DEFAULT);
channel.setDescription("Channel description");
notificationManager.createNotificationChannel(channel);
}
И тогда просто используйте:
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(context, "default");
Итак, ваши уведомления работают как с API 26 (с каналом), так и ниже (без).
Ответ 2
Объявить диспетчер уведомлений:
final NotificationManager mNotific=
(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
CharSequence name="Ragav";
String desc="this is notific";
int imp=NotificationManager.IMPORTANCE_HIGH;
final String ChannelID="my_channel_01";
Канал уведомлений
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
{
NotificationChannel mChannel = new NotificationChannel(ChannelID, name,
imp);
mChannel.setDescription(desc);
mChannel.setLightColor(Color.CYAN);
mChannel.canShowBadge();
mChannel.setShowBadge(true);
mNotific.createNotificationChannel(mChannel);
}
final int ncode=101;
String Body="This is testing notific";
Конструктор уведомлений
Notification n= new Notification.Builder(this,ChannelID)
.setContentTitle(getPackageName())
.setContentText(Body)
.setBadgeIconType(R.mipmap.ic_launcher)
.setNumber(5)
.setSmallIcon(R.mipmap.ic_launcher_round)
.setAutoCancel(true)
.build();
NotificationManager уведомляет пользователя:
mNotific.notify(ncode, n);
Ответ 3
NotificationChannel фактически группирует несколько уведомлений в каналы. Это в основном дает больший контроль над поведением уведомления пользователю. Вы можете больше узнать о канале Notification Channel и его реализации на Работа с Notification Channel | С примером
Канал уведомлений применим только для Android Oreo.
//Notification channel should only be created for devices running Android 26
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel notificationChannel = new NotificationChannel("unique_channel_id","channel_name",NotificationManager.IMPORTANCE_DEFAULT);
//Boolean value to set if lights are enabled for Notifications from this Channel
notificationChannel.enableLights(true);
//Boolean value to set if vibration is enabled for Notifications from this Channel
notificationChannel.enableVibration(true);
//Sets the color of Notification Light
notificationChannel.setLightColor(Color.GREEN);
//Set the vibration pattern for notifications. Pattern is in milliseconds with the format {delay,play,sleep,play,sleep...}
notificationChannel.setVibrationPattern(new long[]{500,500,500,500,500});
//Sets whether notifications from these Channel should be visible on Lockscreen or not
notificationChannel.setLockscreenVisibility( Notification.VISIBILITY_PUBLIC);
}
Обратите внимание, что идентификатор канала, переданный конструктору, действует как уникальный идентификатор для этого канала уведомлений. Теперь создайте уведомление, как показано ниже.
// Creating the Channel
NotificationManager notificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
notificationManager.createNotificationChannel(notificationChannel);
Чтобы добавить любое уведомление на этот канал, просто передайте идентификатор канала, как показано ниже
//We pass the unique channel id as the second parameter in the constructor
NotificationCompat.Builder notificationCompatBuilder=new NotificationCompat.Builder(this,NOTIFICATION_CHANNEL_ID);
//Title for your notification
notificationCompatBuilder.setContentTitle("This is title");
//Subtext for your notification
notificationCompatBuilder.setContentText("This is subtext");
//Small Icon for your notificatiom
notificationCompatBuilder.setSmallIcon(R.id.icon);
//Large Icon for your notification
notificationCompatBuilder.setLargeIcon( BitmapFactory.decodeResource(getResources(),R.id.icon));
notificationManager.notify( NOTIFICATION_ID,notificationCompatBuilder.build());
Ответ 4
Будьте осторожны, если вы выполнили всю работу, и вы не получили никаких результатов. На некоторых устройствах вы должны установить приоритет уведомлений.
final NotificationCompat.Builder mBuilder = new
NotificationCompat.Builder(mContext, "default")
.setPriority(Notification.PRIORITY_MAX);
Ответ 5
Я знаю, что этот ответ опоздал, но лучше поздно, чем никогда!
Я только что выпустил библиотеку уведомлений channel-compat, которая обеспечивает поддержку Notification Channel, начиная с OS 4.0. Поскольку разработчикам в любом случае приходится проектировать каналы, они теперь могут использовать преимущества каналов для всех устройств, и им не нужно разрабатывать отдельно для старых устройств.
Библиотека использует встроенные классы каналов для устройств OS 8. 0+ и имитирует его для более старых устройств. Все, что нужно, это использовать наши классы NotificationChannelCompat
, NotificationChannelGroupCompat
и NotificationChannelManagerHelper
и добавить одну строку кода. Вы можете увидеть больше на GitHub. Пожалуйста, проверьте это и дайте мне знать о любых проблемах.
Спасибо,
Lionscribe