Уведомление Android Wear Notification не отображается, если используется FLAG_NO_CLEAR

Если используется флаг " FLAG_NO_CLEAR", уведомление получает не на Android Wear.

Кто-нибудь знает, почему или какое-либо обходное решение? Я не нашел никакой информации в документации.

Мне нужен флаг " FLAG_NO_CLEAR" в моих уведомлениях и кнопка Действия для "увольнения", "отсрочки" и т.д.!

Ответ 1

Флаг уведомления FLAG_NO_CLEAR в основном делает ваше уведомление "текущим". Текущие сообщения, отправленные с телефона, НЕ будут отображаться на носимом устройстве.

У вас есть два решения вашей проблемы - оба они имеют преимущества и недостатки. Прочтите текст ниже и решите, какое решение лучше разрешит вашу ситуацию:)

Решение 1 - используйте группу:

Вы можете использовать функцию group для платформы Android Wear. Он в основном создан для публикации многих (сгруппированных) уведомлений на носимом устройстве и одного уведомления summary по телефону. Но используя этот механизм, вы также можете отправить одно уведомление ongoing на свой телефон и второе уведомление только на износ. Вы получите одно уведомление ongoing на вашем телефоне и одно стандартное уведомление на вашем носимом носителе.

    final NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);

    // This notification will be shown only on phone
    final NotificationCompat.Builder phoneNotificationBuilder = new NotificationCompat.Builder(this)
        .setSmallIcon(R.drawable.ic_launcher)
        .setContentTitle("Title phone")
        .setContentText("Text phone")
        .setOngoing(true)
        .setOnlyAlertOnce(true)
        .setGroup("GROUP")
        .setGroupSummary(true);

    // This notification will be shown only on watch
    final NotificationCompat.Builder wearableNotificationBuilder = new NotificationCompat.Builder(this)
        .setSmallIcon(R.drawable.ic_launcher)
        .setContentTitle("Title wearable")
        .setContentText("Text wearable")
        .setOngoing(false)
        .setOnlyAlertOnce(true)
        .setGroup("GROUP")
        .setGroupSummary(false);

    notificationManager.notify(0, phoneNotificationBuilder.build());
    notificationManager.notify(1, wearableNotificationBuilder.build());

Этот метод позволит вам публиковать "альтернативное" уведомление только для просмотра, сохраняя уведомление ongoing на телефоне. Но (как упоминалось ранее) уведомление на часах не может быть ongoing - оно должно быть обычным уведомлением. Если вы действительно хотите иметь истинное уведомление ongoing на часах, вам нужно пойти на второе решение.

Подробнее о группировании (укладке) уведомлений читайте здесь:
https://developer.android.com/training/wearables/notifications/stacks.html

Решение 2 - создайте пригодное для носки приложение:

Текущие уведомления с телефона не будут отображаться на часах, но вы можете создать ношу часть своего приложения для Android и опубликовать свое уведомление прямо на Android Wear. Вы можете легко публиковать текущее уведомление оттуда, но это будет не то же уведомление, что и на телефоне. Вам нужно будет синхронизировать их между обоими устройствами.

Подробнее о DataApi читайте здесь:
https://developer.android.com/training/wearables/data-layer/index.html
https://developer.android.com/training/wearables/data-layer/data-items.html

Вы также можете посмотреть мой пост, где я опубликовал код, демонстрирующий, как использовать DataApi на практике:
fooobar.com/questions/450362/...

Ответ 2

Честно говоря, что-то действительно странное изменилось в ношении 1.5 поэтому решение было бы установить сигнал тревоги

Uri alarmSound = getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);


    Intent displayIntent = new Intent(this, WearNotif.class);
    //displayIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
    PendingIntent displayPendingIntent = PendingIntent.getActivity(this,
            0, displayIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    Notification notification = new Notification.Builder(this)
            .setSmallIcon(R.mipmap.ic_launcher)
            .setContentTitle("WeirdShit")
            .setContentText("some random crap")
            .extend(new Notification.WearableExtender()
                    .setDisplayIntent(displayPendingIntent))
            .setSound(alarmSound)
            .build();

    NotificationManagerCompat notificationManager =
            NotificationManagerCompat.from(this);
    notificationManager.notify(25454, notification);