Android Wear: setVibrate() не работает, если setGroup() вызван

Я не могу заставить часы вибрировать после вызова setGroup()

код:

Уведомление NotificationCompat.Builder = новый NotificationCompat.Builder(контекст);
notification.setGroup(GROUP_KEY_NOTIFY);
notification.setVibrate(patternArray);
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(контекст);
notificationManager.notify(id, notification.build());

Замечания:

  • Уведомление правильно складывается и отображается на "Samsung Gear Live"
  • Нет уведомления на телефоне, кроме отдельной сводки, как предполагалось
  • Отсутствие вибрации на часах, будь то первое или последующее уложенное уведомление

Попытки:

  • Изменен каждый флаг и часть состояния, которое я могу найти, но ничего не помогает
  • Единственное решение, которое восстанавливает вибрацию часов, - это комментировать setGroup() в приведенном выше коде, но это ломает стекирование и вызывает появление уведомления как на часах, так и на телефоне

Спасибо

ОБНОВЛЕНИЕ: РЕШЕНИЕ

Полный образец кода для отправки уложенных в стек уведомлений

static boolean CHILD2 = true;

public static void postNotifications(Context context) {
    NotificationTest test = new NotificationTest();
    Notification[] notifications = test.buildNotifications(context);
    for (int i = 0; i < notifications.length; i++) {
        Notification not = notifications[i];
        NotificationManagerCompat.from(context).notify(i, not);
    }
}

private static class NotificationTest {
    public Notification[] buildNotifications(Context context) {
        // Summary
        NotificationCompat.Builder summaryBuilder = new     
        NotificationCompat.Builder(context)
        .setGroup(EXAMPLE_GROUP_KEY)
        .setGroupSummary(true)
        .setContentTitle("The title")
        .setContentText("The text")
        .setSmallIcon(R.mipmap.ic_launcher)
        .setVibrate(new long[] {0, 1000, 50, 2000} );

        // Child 1
        NotificationCompat.Builder childBuilder1 = new   
        NotificationCompat.Builder(context)
        .setContentTitle("child 1 title")
        .setContentText("child 1 text")
        .setSmallIcon(R.mipmap.ic_launcher)
        .setLocalOnly(false)
        .setGroup(EXAMPLE_GROUP_KEY);

        // Child 2
        if (CHILD2) {
            NotificationCompat.Builder childBuilder2 = null;
            childBuilder2 = new NotificationCompat.Builder(context)
            .setContentTitle("child 2 title")
            .setContentText("child 2 text")
            .setSmallIcon(R.mipmap.ic_launcher);
            return new Notification[] { summaryBuilder.build(), childBuilder1.build(), childBuilder2.build() };
        }
        return new Notification[] { summaryBuilder.build(), childBuilder1.build() };                
    }
}

}

Я нашел образец в SDK немного сложнее, потому что он использует много классов для сборки уведомления. Я надеюсь, что это прояснит, что нужно сделать.

У моего предыдущего кода было 2 проблемы:

  1. 'setLocalOnly' было установлено как 'true' в сводном уведомлении
  2. 'setVibration' вызывается в уведомлении сложенных/дочерних элементов вместо сводного уведомления

Объяснение:

Он не может быть интуитивно понятным, потому что текст сводного уведомления не отображается на часах, но он использует шаблон вибрации из сводного уведомления, поэтому установка его на локальный способ предотвращает вибрацию.

+3
источник поделиться

Посмотрите другие вопросы по меткам или Задайте вопрос