通知总是发出声音:OS> = 8上的setSound(null)不会唤醒

时间:2019-03-12 18:25:43

标签: android audio notifications

我正在尝试使用通知生成器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);
    }

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

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

重要性类型

  • IMPORTANCE_MAX:未使用
  • IMPORTANCE_HIGH:无处不在,制造声音并偷看
  • IMPORTANCE_DEFAULT:到处显示,会产生噪音,但不会造成视觉干扰
  • IMPORTANCE_LOW:随处可见,但并不干扰
  • IMPORTANCE_MIN:仅在折叠下方的阴影中显示
  • IMPORTANCE_NONE:无关紧要的通知;没有显示在阴影中

source

答案 1 :(得分:0)

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