Уведомление в строке состояния не отображается?

У меня есть простой метод, который onclick() кнопки должен генерировать уведомление в строке состояния, но по какой-то причине он не отображается.

public void createNotification() {
    NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
            .setSmallIcon(android.R.drawable.ic_dialog_alert)
            .setContentTitle("Notification!")
            .setContentText("This is my first notification!");
    Notification notification = builder.build();
    NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);
    notificationManager.notify(0, notification);
}

person arschroc    schedule 18.10.2017    source источник
comment
Могу я увидеть ваш метод onClick()?   -  person Giovanni    schedule 18.10.2017
comment
Все, что он делает, это вызывает эту функцию createNotification()   -  person arschroc    schedule 18.10.2017
comment
Мне нужно это увидеть.   -  person Giovanni    schedule 19.10.2017
comment
Попробуйте заменить свой setSmallIcon другим рисунком, например R.drawable.icon, не из ресурсов Android.   -  person Giovanni    schedule 19.10.2017
comment
FloatingActionButton fb = (FloatingActionButton) rootView.findViewById(R.id.addProfileButton); fb.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { // TODO тестирования уведомлений createNotification(); }   -  person arschroc    schedule 19.10.2017
comment
Я тоже пытался изменить значок, и это не сработало.   -  person arschroc    schedule 19.10.2017
comment
Приложение действительно вылетает?   -  person Giovanni    schedule 19.10.2017
comment
Когда я прошел через свою функцию createNotification, я заметил, что мое переменное уведомление имеет contentView = null. Может ли это быть потенциальной проблемой? И чем это может быть вызвано   -  person arschroc    schedule 19.10.2017
comment
Кнопка отображается в вашей деятельности?   -  person Giovanni    schedule 19.10.2017
comment
Да, я могу нажать на кнопку, и она вызовет мой createNotification()   -  person arschroc    schedule 19.10.2017
comment
Смотрите мой ответ, я думаю, проблема в вашем NotificationManager.   -  person Giovanni    schedule 19.10.2017


Ответы (2)


В Android 8 (уровень API 26) все уведомления должны быть назначены каналу. Эта работа для меня:

    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(getContext(), CHANNEL_ID)
            .setSmallIcon(R.drawable.emo_no_paint_120)
            .setContentTitle("title")
            .setContentText("content")
            .setColor(Color.parseColor("#009add"))
            .setAutoCancel(true);

    NotificationManager notificationManager = (NotificationManager) getContext().getSystemService(
            NOTIFICATION_SERVICE);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        NotificationChannel mChannel = new NotificationChannel(CHANNEL_ID, CHANNEL_NAME, NotificationManager.IMPORTANCE_HIGH);

        notificationManager.createNotificationChannel(mChannel);
    }

    notificationManager.notify(0, mBuilder.build());

И вы должны добавить библиотеку AppCompat

implementation 'com.android.support:support-compat:27.1.0'

Вы можете проверить официальную документацию по Android.

person huydv0109    schedule 16.03.2018

Ваш код в порядке. Но поскольку вы ориентируетесь на Android 8.0, вам необходимо реализовать каналы уведомлений, так как это предпочтительный способ в Android Oreo.

https://developer.android.com/guide/topics/ui/notifiers/notifications.html

person Giovanni    schedule 18.10.2017
comment
К сожалению, он по-прежнему не работает даже с изменением NotificationManager. - person arschroc; 19.10.2017
comment
Вы видите сообщение, если добавите это в свой метод onClick()? Toast.makeText(this, Clicked!, Toast.LENGTH_SHORT).show(); - person Giovanni; 19.10.2017
comment
Да, это появляется, поэтому я знаю, что это входит в функцию - person arschroc; 19.10.2017
comment
Точно, тогда ладно. Тупой вопрос; вы никогда не отключали уведомления для своего приложения? А у вас андроид 8.0? - person Giovanni; 19.10.2017
comment
Да, я использую Android 8.0, и для моего приложения включены уведомления. - person arschroc; 19.10.2017
comment
Хорошо. Попробуйте реализовать NotificationCompat с каналами уведомлений. - person Giovanni; 19.10.2017
comment
Хорошо, если это ответило на ваш вопрос, отметьте его как ответ. - person Giovanni; 19.10.2017