Как создать уведомление с NotificationCompat.Builder?

Мне нужно создать простое уведомление, которое будет отображаться в панели уведомлений вместе со звуком и значком, если это возможно? Мне также нужно, чтобы он совместим с Android 2.2, поэтому я обнаружил, что NotificationCompat.Builder работает со всеми API выше 4. Если есть лучшее решение, не стесняйтесь упоминать об этом.

    NotificationCompat.Builder – это самый простой способ создания Notifications на всех версиях Android. Вы даже можете использовать функции, доступные с Android 4.1. Если ваше приложение работает на устройствах с Android> = 4.1, новые функции будут использоваться, если они будут запущены на Android <4.1, уведомление будет простым старым уведомлением.

    Простое создание простого уведомления (см. Руководство по API Android для уведомлений ):

     NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this) .setSmallIcon(R.drawable.notification_icon) .setContentTitle("My notification") .setContentText("Hello World!") .setContentIntent(pendingIntent); //Required on Gingerbread and below 

    Вы должны установить как минимум smallIcon , contentTitle и contentText . Если вы пропустите один, уведомление не будет отображаться.

    Остерегайтесь: на прянике и ниже вы должны установить намерение содержания, иначе будет IllegalArgumentException .

    Чтобы создать намерение, которое ничего не делает, используйте:

     final Intent emptyIntent = new Intent(); PendingIntent pendingIntent = PendingIntent.getActivity(ctx, NOT_USED, emptyIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

    Вы можете добавить звук через строитель, то есть звук из RingtoneManager:

     mBuilder.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)) 

    Уведомление добавляется в панель через NotificationManager:

     NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.notify(mId, mBuilder.build()); 

    Рабочий пример:

      Intent intent = new Intent(ctx, HomeActivity.class); PendingIntent contentIntent = PendingIntent.getActivity(ctx, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); NotificationCompat.Builder b = new NotificationCompat.Builder(ctx); b.setAutoCancel(true) .setDefaults(Notification.DEFAULT_ALL) .setWhen(System.currentTimeMillis()) .setSmallIcon(R.drawable.ic_launcher) .setTicker("Hearty365") .setContentTitle("Default notification") .setContentText("Lorem ipsum dolor sit amet, consectetur adipiscing elit.") .setDefaults(Notification.DEFAULT_LIGHTS| Notification.DEFAULT_SOUND) .setContentIntent(contentIntent) .setContentInfo("Info"); NotificationManager notificationManager = (NotificationManager) ctx.getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.notify(1, b.build()); 

    Я делаю этот метод и отлично работаю. (протестировано в android 6.0.1)

     public void notifyThis(String title, String message) { NotificationCompat.Builder b = new NotificationCompat.Builder(this.context); b.setAutoCancel(true) .setDefaults(NotificationCompat.DEFAULT_ALL) .setWhen(System.currentTimeMillis()) .setSmallIcon(R.drawable.favicon32) .setTicker("{your tiny message}") .setContentTitle(title) .setContentText(message) .setContentInfo("INFO"); NotificationManager nm = (NotificationManager) this.context.getSystemService(Context.NOTIFICATION_SERVICE); nm.notify(1, b.build()); } 

    Вы можете попробовать этот код, это отлично работает для меня:

      NotificationCompat.Builder mBuilder= new NotificationCompat.Builder(this); Intent i = new Intent(noti.this, Xyz_activtiy.class); PendingIntent pendingIntent= PendingIntent.getActivity(this,0,i,0); mBuilder.setAutoCancel(true); mBuilder.setDefaults(NotificationCompat.DEFAULT_ALL); mBuilder.setWhen(20000); mBuilder.setTicker("Ticker"); mBuilder.setContentInfo("Info"); mBuilder.setContentIntent(pendingIntent); mBuilder.setSmallIcon(R.drawable.home); mBuilder.setContentTitle("New notification title"); mBuilder.setContentText("Notification text"); mBuilder.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)); NotificationManager notificationManager= (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.notify(2,mBuilder.build()); 

    Подробное уведомление

    КОД

     Intent intent = new Intent(this, SecondActivity.class); PendingIntent pendingIntent = PendingIntent.getActivity(this,0,intent,0); NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context) .setSmallIcon(R.drawable.your_notification_icon) .setContentTitle("Notification Title") .setContentText("Notification ") .setContentIntent(pendingIntent ); NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.notify(0, mBuilder.build()); 

    Знание глубины

    Уведомление может быть создано с использованием classов Notification.Builder или NotificationCompat.Builder.
    Но если вы хотите иметь обратную совместимость, вы должны использовать class NotificationCompat.Builder, поскольку он является частью библиотеки поддержки v4, поскольку он заботится о тяжелом подъеме, чтобы обеспечить последовательный внешний вид и функции уведомления для API 4 и выше.

    Свойства уведомления ядра

    Уведомление имеет 4 основных свойства (3 основных свойства отображения + свойство click click)

    • Маленькая иконка
    • заглавие
    • Текст
    • Событие нажатия кнопки (событие Click при нажатии на уведомление)

    Событие с нажатием кнопки становится необязательным для Android 3.0 и выше. Это означает, что вы можете создать свое уведомление, используя только свойства отображения, если ваш minSdk нацелен на Android 3.0 или выше. Но если вы хотите, чтобы ваше уведомление запускалось на более старых устройствах, чем Android 3.0, вы должны предоставить событие Click, иначе вы увидите IllegalArgumentException.

    Отображение уведомлений

    Уведомление отображается путем вызова метода notify () classа NotificationManger

    notify ()

    Для метода уведомления доступны два варианта

     notify(String tag, int id, Notification notification) 

    или

     notify(int id, Notification notification) 

    метод уведомления принимает идентификатор целого числа, чтобы однозначно идентифицировать ваше уведомление. Однако вы также можете предоставить дополнительный тег String для дальнейшей идентификации вашего уведомления в случае конфликта.

    Этот тип конфликта редок, но, скажем, вы создали некоторую библиотеку, а другие разработчики используют вашу библиотеку. Теперь они создают свое собственное уведомление, и как-то ваше уведомление об уведомлении и идентификатор другого разработчика одинаково, тогда вы столкнетесь с конфликтом.

    Уведомление после API 11 (больше контроля)

    API 11 обеспечивает дополнительный контроль над поведением Уведомления

    • Уведомление об увольнении
      По умолчанию, если пользователь нажимает на уведомление, он выполняет назначенное событие click, но он не очищает уведомление. Если вы хотите, чтобы ваше уведомление очистилось, тогда вы должны добавить это

      mBuilder.setAutoClear (истина);

    • Запретить пользователю отклонять уведомление
      Пользователь также может отклонить уведомление, проверив его. Вы можете отключить это поведение по умолчанию, добавив это при создании уведомления

      mBuilder.setOngoing (истина);

    • Позиционирование уведомления
      Вы можете установить относительный приоритет для своего уведомления

      mBuilder.setOngoing (int pri);

    Если ваше приложение работает на более низком API, чем в 11, ваше уведомление будет работать без вышеупомянутых дополнительных функций. Это преимущество выбора NotificationCompat.Builder через Notification.Builder

    Уведомление после API 16 (более информативное)

    С введением API 16 уведомления получили так много новых функций
    Уведомление может быть настолько информативным.
    Вы можете добавить bigPicture к своему логотипу. Скажем, вы получаете сообщение от человека, теперь с помощью mBuilder.setLargeIcon (bitmap растрового изображения) вы можете показать фотографию этого человека. Таким образом, в строке состояния вы увидите значок при прокрутке, вы увидите фотографию человека вместо значка. Есть и другие функции

    • Добавить счетчик в уведомлении
    • Сообщение Ticker, когда вы видите уведомление в первый раз
    • Расширяемое уведомление
    • Многострочное уведомление и т. Д.

    простой способ сделать уведомления

      NotificationCompat.Builder builder = (NotificationCompat.Builder) new NotificationCompat.Builder(this) .setSmallIcon(R.mipmap.ic_launcher) //icon .setContentTitle("Test") //tittle .setAutoCancel(true)//swipe for delete .setContentText("Hello Hello"); //content NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.notify(1, builder.build() ); 

    Используйте этот код

      Intent intent = new Intent(getApplicationContext(), SomeActvity.class); PendingIntent pIntent = PendingIntent.getActivity(getApplicationContext(), (int) System.currentTimeMillis(), intent, 0); NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(getApplicationContext()) .setSmallIcon(R.drawable.your_notification_icon) .setContentTitle("Notification title") .setContentText("Notification message!") .setContentIntent(pIntent); NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.notify(0, mBuilder.build()); 
    Давайте будем гением компьютера.