通知始终发出声音:setSound(null)无法在OS> = 8上运行

问题描述 投票:0回答:3

我正在尝试使用通知构建器setSound()方法对其中一些通知和触发声音进行分组,但它不起作用。每次收到通知时,即使我调用setSound(null)也会触发铃声

这是我的代码:

    TaskStackBuilder  stackBuilder = TaskStackBuilder.create(getContext());
    stackBuilder.addParentStack(getParentActivityClass());

    Intent notificationIntent = intent == null ? new Intent() : new Intent(intent);
    if (cls != null)
        notificationIntent.setClass(getContext(), cls);

    notificationIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

    stackBuilder.addNextIntentWithParentStack(notificationIntent);
    PendingIntent pendingIntent = stackBuilder.getPendingIntent(0,
            PendingIntent.FLAG_UPDATE_CURRENT);

    InboxStyle style = new NotificationCompat.InboxStyle();
    int mapId = subGroupId + groupId;
    putGroupLine(mapId, text);
    List<String> notifLines = groupedNotificationsMap.get(mapId);
    for (int i = 0; i < notifLines.size(); i++) {
        style.addLine(notifLines.get(i));
    }

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        String NOTIFICATION_CHANNEL_ID = "default";
        String channelName = "Default";
        NotificationChannel chan = new NotificationChannel(NOTIFICATION_CHANNEL_ID, channelName
                , NotificationManager.IMPORTANCE_HIGH);
        chan.setLightColor(Color.BLUE);
        chan.setLockscreenVisibility(Notification.VISIBILITY_PUBLIC);
        if (alert == false) {
            chan.setSound(null, null);
            chan.setVibrationPattern(null);
        }
        else {
            chan.setVibrationPattern(vibrate);
        }
        NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        manager.createNotificationChannel(chan);
    }

    NotificationCompat.Builder mBuilder;
    mBuilder =  new NotificationCompat.Builder(context, "default")
            .setSmallIcon(getSmallIconResource())
            .setAutoCancel(true);

    int colorRes = getSmallIconColor();

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        mBuilder.setGroupAlertBehavior(NotificationCompat.GROUP_ALERT_SUMMARY);
    }

    if (alert) {
        mBuilder.setSound(getRingtone());
        mBuilder.setVibrate( vibrate );
    }
    else {
        mBuilder.setSound(null);
        mBuilder.setVibrate(null);
    }

    Notification notif = mBuilder
            .setContentTitle(title)
            .setTicker(text)
            .setContentText(text)
            .setSmallIcon(getSmallIconResource())
            .setStyle(style
                    .setBigContentTitle(title)
            )
            .setGroup("g" + groupId)
            .setContentIntent(pendingIntent)
            .build();

    NotificationCompat.Builder summaryBiulder = new NotificationCompat.Builder(getContext(), "default")
            .setContentTitle(title)
            .setAutoCancel(true)
            //set content text to support devices running API level < 24
            .setContentText(text)
            .setSmallIcon(getSmallIconResource())
            //build summary info into InboxStyle template
            .setStyle(new InboxStyle()
                    .setBigContentTitle(title)
                    .setSummaryText(title))
            .setColor(colorRes)
            //specify which group this notification belongs to
            .setGroup("g" + groupId)
            //set this notification as the summary for the group
            .setGroupSummary(true)

            .setGroupAlertBehavior(NotificationCompat.GROUP_ALERT_SUMMARY)
            .setContentIntent(pendingIntent);

    if (alert) {
        summaryBiulder.setSound(getRingtone());
        summaryBiulder.setVibrate( vibrate );
    }
    else {
        summaryBiulder.setSound(null);
        summaryBiulder.setVibrate(null);
    }


    Notification summaryNotification = summaryBiulder .build();


    notif.flags |= Notification.FLAG_AUTO_CANCEL;
    notif.flags |= Notification.FLAG_HIGH_PRIORITY;

    notifManager.notify(subGroupId, notif);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        notifManager.notify(groupId, summaryNotification);
    }

有什么建议?

android audio notifications
3个回答
1
投票

在代码段中,

 NotificationChannel chan = new NotificationChannel(NOTIFICATION_CHANNEL_ID, channelName,
                                 NotificationManager.IMPORTANCE_HIGH);

尝试更换

NotificationManager.IMPORTANCE_HIGH到NotificationManager.IMPORTANCE_NONE

根据Android开发者文档,

IMPORTANCE_HIGH

更高的通知重要性:随处可见,发出噪音和瞥见。可以使用全屏意图。

因此可能会发出声音。

这是the link可用的其他重要值


1
投票

您的问题与通知重要性有关

重要性类型

  • IMPORTANCE_MAX:未使用
  • IMPORTANCE_HIGH:无处不在,喧闹无声
  • IMPORTANCE_DEFAULT:显示无处不在,发出噪音,但不会在视觉上侵入
  • IMPORTANCE_LOW:无处不在,但不是侵入性的
  • IMPORTANCE_MIN:仅显示在阴影下方,折叠下方
  • IMPORTANCE_NONE:不重要的通知;不显示在阴凉处

source


0
投票

虽然其他答案很有用,但这里的主要问题是通知渠道已经创建。因此,正如文档中所述,通道的行为在创建后不能改变(在这种情况下是声音和振动)。只能更改名称和描述,用户可以完全控制其余部分。

© www.soinside.com 2019 - 2024. All rights reserved.