Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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. Если вы пропустите один, уведомление не будет отображаться.

Остерегайтесь: В Gingerbread и ниже вы должны установить намерение содержимого, иначе будет 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());

Ответ 2

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

    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());

Ответ 3

Я делаю этот метод и отлично работаю. (проверено в 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());
}

Ответ 4

Уведомление в глубине

КОД

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());

Глубина знаний

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

Основные свойства уведомлений

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

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

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

Дисплей уведомлений

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

параметры notify()

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

notify(String tag, int id, Notification notification)

или же

notify(int id, Notification notification)

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

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

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

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

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

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

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

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

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

    mBuilder.setOngoing(int pri);

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

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

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

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

Ответ 5

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

    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());

Ответ 6

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

 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()
    );

Ответ 7

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

            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());

Ответ 8

Показать Notificaton в Android 8.0

@TargetApi(Build.VERSION_CODES.O)
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)

  public void show_Notification(){

    Intent intent=new Intent(getApplicationContext(),MainActivity.class);
    String CHANNEL_ID="MYCHANNEL";
    NotificationChannel notificationChannel=new NotificationChannel(CHANNEL_ID,"name",NotificationManager.IMPORTANCE_LOW);
    PendingIntent pendingIntent=PendingIntent.getActivity(getApplicationContext(),1,intent,0);
    Notification notification=new Notification.Builder(getApplicationContext(),CHANNEL_ID)
            .setContentText("Heading")
            .setContentTitle("subheading")
            .setContentIntent(pendingIntent)
            .addAction(android.R.drawable.sym_action_chat,"Title",pendingIntent)
            .setChannelId(CHANNEL_ID)
            .setSmallIcon(android.R.drawable.sym_action_chat)
            .build();

    NotificationManager notificationManager=(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.createNotificationChannel(notificationChannel);
    notificationManager.notify(1,notification);


}