it-swarm.com.ru

Уведомление об оповещении Android O не опубликовано на канале, но оно есть

Пара вопросов об уведомлении Android O:

1) Я создал канал уведомлений (см. Ниже), звоню сборщику с помощью .setChannelId () (передавая имя канала, который я создал, «wakey»), и все же, когда я запускаю приложение, я получаю сообщение что я не смог опубликовать уведомление на канале "null". Что может быть причиной этого?

2) Я подозреваю, что ответ на вопрос № 1 можно найти в «журнале», который он говорит, чтобы проверить, но я проверил logcat и ничего не вижу об уведомлениях или каналах. Где журнал, в котором написано, чтобы посмотреть?

Вот код, который я использую для создания канала:

NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
CharSequence name = context.getString(R.string.app_name);
String description = "yadda yadda"
int importance = NotificationManager.IMPORTANCE_DEFAULT;

NotificationChannel channel = new NotificationChannel(NOTIFICATION_CHANNEL, name, importance);
channel.setDescription(description);

notificationManager.createNotificationChannel(channel);

Вот код для генерации уведомления:

Notification.Builder notificationBuilder;

Intent notificationIntent = new Intent(context, BulbActivity.class);
notificationIntent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND); // Fix for https://code.google.com/p/Android/issues/detail?id=53313

PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);

Intent serviceIntent = new Intent(context, RemoteViewToggleService.class);
serviceIntent.putExtra(WakeyService.KEY_REQUEST_SOURCE, WakeyService.REQUEST_SOURCE_NOTIFICATION);

PendingIntent actionPendingIntent = PendingIntent.getService(context, 0, serviceIntent, PendingIntent.FLAG_CANCEL_CURRENT);
_toggleAction = new Notification.Action(R.drawable.ic_power_settings_new_black_24dp, context.getString(R.string.toggle_wakey), actionPendingIntent);

notificationBuilder= new Notification.Builder(context)
    .setContentTitle(context.getString(R.string.app_name))
    .setContentIntent(contentIntent)
    .addAction(_toggleAction);

if (Android.os.Build.VERSION.SDK_INT >= Android.os.Build.VERSION_CODES.O) {
    notificationBuilder.setChannelId(NOTIFICATION_CHANNEL);
}

notificationBuilder.setSmallIcon(icon);
notificationBuilder.setContentText(contentText);
_toggleAction.title = actionText;

int priority = getNotificationPriority(context);
notificationBuilder.setPriority(priority);
notificationBuilder.setOngoing(true);

Notification notification = notificationBuilder.build();
notificationManager.notify(NOTIFICATION_ID, notification);

И вот предупреждение, которое я получаю:  enter image description here

38
jkane001

Я думаю, что я узнал пару вещей, которые все складываются в ответ:

  1. Я использовал эмулятор устройства с изображением, в котором не было Play Store.
  2. Версия Google Play Services на изображении была не самой последней, поэтому я должен был получить уведомление о необходимости обновления. Поскольку это уведомление не было применено к каналу, оно не появилось.
  3. Если я установил logcat в Android Studio на «Нет фильтров» вместо «Показывать только выбранное приложение», то я обнаружил журналы, в которых указывалось, что рассматриваемое уведомление было уведомлением об обновлении служб Play Services «требуется обновление».

Итак, я перешел на изображение с включенным Play Store, и оно показывало уведомление должным образом (возможно, канал для этого уведомления должен был быть установлен в Play Store?), Позвольте мне обновиться до последних сервисов Google Play, и у меня нет не видел это предупреждение с тех пор.

Итак, короткая история (слишком поздно) - с Android O, если вы используете Сервисы Google Play и тестируете на эмуляторе, выберите изображение с включенным Play Store или проигнорируйте тост (удачи на этом!).

31
jkane001

Сначала создайте канал уведомлений:

 public static final String NOTIFICATION_CHANNEL_ID = "4565";
//Notification Channel
        CharSequence channelName = NOTIFICATION_CHANNEL_NAME;
        int importance = NotificationManager.IMPORTANCE_LOW;
        NotificationChannel notificationChannel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, NOTIFICATION_CHANNEL_NAME, importance);
        notificationChannel.enableLights(true);
        notificationChannel.setLightColor(Color.RED);
        notificationChannel.enableVibration(true);
        notificationChannel.setVibrationPattern(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400});


NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.createNotificationChannel(notificationChannel);

затем используйте идентификатор канала в конструкторе:

final NotificationCompat.Builder builder = new NotificationCompat.Builder(context, NOTIFICATION_CHANNEL_ID)
                .setDefaults(Notification.DEFAULT_ALL)
                .setSmallIcon(R.drawable.ic_timers)
                .setVibrate(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400})
                .setSound(null)
                .setChannelId(NOTIFICATION_CHANNEL_ID)
                .setContent(contentView)
                .setPriority(NotificationCompat.PRIORITY_DEFAULT)
                .setLargeIcon(picture)
                .setTicker(sTimer)
                .setContentIntent(pendingIntent)
                .setAutoCancel(false);
7
Gulzar Bhat

У меня была такая же проблема, и я решил ее с помощью конструктора 

new Notification.Builder(Context context, String channelId) вместо того, который deprecated на уровнях API> = 26 (Android O): new NotificationCompat.Builder(Context context) 

Следующий код не будет работать, если ваш alertBuilder построен с использованием устаревшего конструктора:

if (Android.os.Build.VERSION.SDK_INT >= Android.os.Build.VERSION_CODES.O) {
notificationBuilder.setChannelId(NOTIFICATION_CHANNEL);}
6
Robert Ramonet

создать уведомление, используя следующий код:

    Notification notification = new Notification.Builder(MainActivity.this)
              .setContentTitle("New Message")
                        .setContentText("You've received new messages.")
                        .setSmallIcon(R.mipmap.ic_launcher)
                        .setChannelId(channelId)
                        .build();

не используется : 

Notification notification = new NotificationCompat.Builder(MainActivity.this)
                    .setContentTitle("Some Message")
                    .setContentText("You've received new messages!")
                    .setSmallIcon(R.mipmap.ic_launcher)
                    .setChannel(channelId)
                    .build();
2
Abhilash Das

Вы должны сначала создать NotificationChannel

val notificationChannel = NotificationChannel("channelId", "channelName", NotificationManager.IMPORTANCE_DEFAULT)
notificationManager.createNotificationChannel(notificationChannel);

Это единственный способ показать уведомление для API 26+

1
dr3k

Я столкнулся с той же проблемой. Это было решено созданием NotificationChannel и добавлением этого вновь созданного канала с менеджером уведомлений.

0
user3724755

Ты должен создать канал раньше. 

private void createNotificationChannel() {
        // Create the NotificationChannel, but only on API 26+ because
        // the NotificationChannel class is new and not in the support library
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            CharSequence name = getString(R.string.channel_name);
            String description = getString(R.string.channel_description);
            int importance = NotificationManager.IMPORTANCE_DEFAULT;
            NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance);
            channel.setDescription(description);
            // Register the channel with the system; you can't change the importance
            // or other notification behaviors after this
            NotificationManager notificationManager = getSystemService(NotificationManager.class);
            notificationManager.createNotificationChannel(channel);
        }
}

public void notifyThis(String title, String message) {
        NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this, CHANNEL_ID)
                .setSmallIcon(R.drawable.green_circle)
                .setContentTitle(title)
                .setContentText(message)
                .setPriority(NotificationCompat.PRIORITY_DEFAULT);

        NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);

        // notificationId is a unique int for each notification that you must define
        notificationManager.notify(0, mBuilder.build());
}

Наконец вы вызываете этот метод:

createNotificationChannel();
notifyThis("My notification", "Hello World!");
0
Mattia Ferigutti