Отобразить уведомление на Android Wear, не показывая его на телефоне

    Решил я все же, не смотря на свой скепсис, начать переносить приложения на Android Wear.

    Первое дело — показывать уведомления, ИМХО, первая и важнейшая функция смарт-часов.
    Открываю мануал и узнаю что уведомления на часы можно отправить только прицепом к общесистемному уведомлению Android. На Sony все было разделено и даже слишком, а тут все интегрировано и само собой работает. Гвоздями прибито.

    Быстрый гуглинг не привел к результатам — старые хаки уже выкинули из последних версий API и я уже начал думать программно скрывать уведомление на телефоне. Но тут вспомнил что при скрытии уведомления на часах или телефоне — оно автоматически скрывается и на другом девайсе. Решил забить.

    Дело продвигалось дальше, дошел до объединения уведомлений, для удобства. И тут меня привлекла фраза:
    It's important that you still provide a summary notification that appears on handheld devices.

    Решил попробовать, а что будет, если не указывать ни BigContentTitle, ни Summary, а только указывать группу:

    	    NotificationCompat.Builder notificationBuilder =
    	            new NotificationCompat.Builder(getApplicationContext())
    	            .setSmallIcon(R.drawable.icon_extension)
    	            .setContentTitle(title)
    	            .setContentText(message)
    	            .setGroup(group);
    

    И тут, внезапно, уведомление показалось на часах, но на телефоне ничего не отображалось! В logcat не появляется ошибок, не возникает тормозов, все работает просто замечательно:



    Если не нужно объединять уведомления, то в качестве group можно просто указывать тот же идентификатор, что и при вызове notificationManager.notify

    Вот такой небольшой хак для Wear-разработчиков, надеюсь многим это будет полезно.
    Share post

    Similar posts

    Comments 11

      +3
      Хрупкое решение. Если в следующей версии пофиксят — придется искать другой способ.

      А зачем непременно уведомление убирать на телефоне?
        +1
        Посмотрим, но, ИМХО, фиксить это не будут.

        А зачем непременно уведомление убирать на телефоне?
        Хочется!

        После того как купил часы, получать уведомления на телефон расхотелось. Он у меня всегда на беззвучке стоит, и когда его берешь, меньше всего хочешь, чтобы он вибрировал или пиликал уведомлениями, отвлекая от чего-то. А все уведомления идут на часы. Не знаю как другим, а мне такой сценарий нравится.

        Выбор должен быть всегда!
          0
          Это наверное глобально должно настраиваться, для все приложений на уровне системы.
            0
            Наверное. Но сейчас можно только отключить/включить дублирование уведомлений в Wear.

            А используя мой хак, можно хоть совсем разные уведомления показывать.

            Интересно бы посмотреть как это все сделано в аппл.
        0
        А зачем вообще писать подобные хаки, если есть вполне официальный и прямолинейный способ?
        К своему основному приложению создаете мини приложение-компаньон для часов, после чего шлете ему из основного приложения сообщение а оно уже его получает, создает Notification и показывает его как обычно, через showNotification, который, будучи запущенным с часов, показывается только на часах.
          –3
          Сами догадаетесь или подсказать?
            0
            подскажите, интересно даже )
              0
              Это заметно сложнее сделать, чем просто добавить еще одну строчку .setGroup(group)
                +1
                Спасибо что подсказали, я бы не догадался :)

                Это всего минут на 15 дольше чем запустить нотификацию со старшего (мобильного) приложения и ничуть не сложнее заведения brodcast-ресивера и сервиса, зато получаете «прямое» решение а так же дополнительные плюшки в самостоятельном мини-модуле на часах, с которым, кроме нестандартных нотификаций, можно делать много чего интересного в дальнейшем.
                  0
                  Согласен. Надеюсь описаное мной недокументированное поведение не поломают и этим можно будет пользоваться для экономии времени.
          0
          Спасибо за полезное наблюдение!

          Only users with full accounts can post comments. Log in, please.