@Ksernik
я был не хуже других, но лучше многих...

Android notification channels?

Всем привет =)
У кого нибудь в одном приложении присутствует больше одного notification channel?
Суть проблемы: два канала.. один с максимальным приоритетом и висит всегда ибо сервис фореграунд.. второй канал для отображения нотификаций.. и в какой то момент нотификации со второго канала отображаются в первом канале (постоянной нотификации)
У меня один способ создания нотификаций для второго канала.. и там указан айдишник второго канала.. то есть "перепутать" вообще нет вариантов.. случайной подмены тоже быть не может..
яб с радостью продебажил если бы не два но.. первое это поведение плавающее, второе воспроизводится только на релизной сборке

Момент создания каналов:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {

            NotificationChannel mainChannel = new NotificationChannel(MAIN_CHANNEL_ID, MAIN_CHANNEL_NAME,
                    NotificationManager.IMPORTANCE_HIGH);
            Uri soundUriMain = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + this.getPackageName() + "/" + R.raw.online);
            AudioAttributes audioAttributesMain = new AudioAttributes.Builder()
                    .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
                    .setUsage(AudioAttributes.USAGE_NOTIFICATION)
                    .build();

            mainChannel.setSound(soundUriMain, audioAttributesMain);

            ((NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE)).createNotificationChannel(mainChannel);

            NotificationChannel messageChannel = new NotificationChannel(MESSAGE_CHANNEL_ID, MESSAGE_CHANNEL_NAME,
                    NotificationManager.IMPORTANCE_DEFAULT);
            Uri soundUriMessage = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + this.getPackageName() + "/" + R.raw.message);
            messageChannel.setSound(soundUriMessage, audioAttributesMain);
            ((NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE)).createNotificationChannel(messageChannel);

            Notification notification = new NotificationCompat.Builder(this, MAIN_CHANNEL_ID)
                    .setContentTitle("")
                    .setContentText("")
                    .setAutoCancel(true)
                    .build();

            startForeground(1, notification);
        }


Момент создания нотификации:
NotificationCompat.Builder mBuilder =
                new NotificationCompat.Builder(context.getApplicationContext(), MESSAGE_CHANNEL_ID);
 mBuilder.setSmallIcon(R.drawable.ic_launcher);
        mBuilder.setContentTitle(contentTitle);
        if (!TextUtils.isEmpty(message)) {
            mBuilder.setContentText(message);
        } else {
            mBuilder.setContentText(context.getString(R.string.incoming_files_from, contentTitle));
        }
 mBuilder.setPriority(checkNotificationPriorityMessage(context, user));
        mBuilder.setAutoCancel(true);
 int notificationID = (int) user.getId();
        mNotificationManager.notify(notificationID, mBuilder.build());
  • Вопрос задан
  • 194 просмотра
Пригласить эксперта
Ответы на вопрос 2
402d
@402d
начинал с бейсика на УКНЦ в 1988
Точно нужно 2 канала ?
не подойдет просто
mNotificationManager.notify(0/1, mBuilder.build());
?
0 - твое постоянное что сервис запущен
1 - последнее уведомление

чуть чище можно переписать, чтобы понятно было что и зачем
метод у YouApp наследника от класса приложение
public static void showNotify(@NonNull String message, int IdChanel) {
        NotificationCompat.Builder builder =
                new NotificationCompat.Builder(YouApp.context, YouApp.context.getString(R.string.app_name))
                        .setSmallIcon(R.drawable.ic_stat_print)
                        .setContentTitle(YouApp.context.getString(R.string.app_name))
                        .setContentText(message);

        Notification notification = builder.build();

        NotificationManager notificationManager =
                (NotificationManager) YouApp.context.getSystemService(NOTIFICATION_SERVICE);

        if (notificationManager != null) {
                notificationManager.notify(IdChanel, notification);
        }
    }
Ответ написан
@Ksernik Автор вопроса
я был не хуже других, но лучше многих...
неприятно чувствовать себя тупым.. а так же не знать почему твоё "решение" сработало..
в момент "startForeground(1, notification);" вместо единицы запихнул какое то большое интовое значение..
повторений ситуации пока не замечено
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы