Здравствуй, Хабр! Хочу предложить вашему вниманию немного магии для часов на Wear OS.

Некоторое время назад, незадолго до выпуска Android 9.0, был представлен новый публичный API, позволяющий использовать устройства на Android в качестве Bluetooth-устройств ввода (мышь, клавиатура, геймпад, и т.д.), и вот я создал простое приложение, которое демонстрирует один из способов использования этого API. (Спойлер: это работает не только на девятом андроиде.)

Вы уже могли догадаться из названия, что делает это приложение: по сути, это обыкновенная аэромышь, совместимая с любыми устройствами на Windows, OSX, Linux (включая Raspbian), Chrome OS, Android (включая Android TV), при условии наличия приёмника Bluetooth; не требуются ни root-права, ни «серверное» приложение.

Достаточно запустить приложение, провести спаривание по Bluetooth, и можно будет:

  • Использовать часы как интуитивный указатель для презентаций (а также переключать слайды курсорными клавишами);
  • Играть во Fruit Ninja, размахивая руками (например, установив игру на Android TV с флешки, или на Chromebook из Play Store), см. демонстрацию ниже;
  • Управлять HTPC, лёжа на диване;
  • Использовать часы в качестве VR-контроллера в некоторых играх для Cardboard (впрочем, не для Daydream: там есть свой пульт);
  • Хвастаться перед друзьями своими телекинетическими способностями; :)
  • Управлять телефоном, подключенным через Samsung Dex;

Примерно представить себе, как это выглядит, можно по этому видео (демонстрация раннего прототипа конца 2015 года):



Как этим пользоваться


В приложении есть четыре режима: аэромышь, тачпад, курсорные клавиши и ввод текста.

Режим аэромыши достаточно самоочевиден. В нём есть две наэкранных кнопки для левого и правого клика, шторка сверху для переключения режима отслеживания движения в зависимости от того, на какую руку надеты часы (также есть режим, в котором часы можно держать в руке, как лазерную указку), и шторка снизу для дополнительных функций: клик с удержанием (также известный как «режим Fruit Ninja») и клик средней кнопкой. Если у ваших часов есть крутящаяся «корона», её можно использовать для прокрутки. Стрелка курсора мыши должна быть направлена в сторону экрана, которым вы управляете.

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

Режим курсорных клавиш довольно прост: тап по краям экрана вызывает нажатие соответствующих клавиш, двойной тап по центру вызывает нажатие Enter, длинное нажатие в центре используется для выхода, плюс есть свайпы из центра для клавиш Escape, Backspace, пробел и Tab.

Наконец, в режиме ввода текста можно использовать либо экранную клавиатуру, либо голосовой ввод. Надо отметить, что вводимый на подключенном устройстве текст зависит от раскладки клавиатруры. К сожалению, пока поддерживается только английская раскладка (можно было бы добавить больше, но это потребовало бы ручного переключения её как в приложении, так и на подключенном устройстве).

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

Также имеются некоторые настройки. Можно стабилизировать перемещения курсора (это сгладит мелкие движения вроде тряски рук), включить диагональные направления для курсорных клавиш (это полезно в тех самых играх для Cardboard), или снизить частоту передачи данных (что может помочь при использовании приложения с некоторыми старыми приставками Android TV на седьмом андроиде, когда мышиный курсор не успевает за движениями рук).

Немного о совместимости


Как я упомянул выше, API стал публичным в Android 9.0, однако приложение также будет работать на любых часах с Android 8.0. То есть, если при перезагрузке часов, после скачущих цветных точек, появляется большая цветная «W» и надпись «Wear OS by Google» вместо «Android Wear», то всё должно работать. Сам API появился в Android Oreo, и немного отличался (а также был скрыт), но до Android Pie он был включен только на часах. К слову, существует способ включить его на телефонах с восьмёркой, но для этого нужны root-права (на девятке всё и так будет работать).

Возможные проблемы и их решения


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

Для регулировки чувствительности следует зайти в настройки подключенного устройства, а не приложения.

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

Также имеет смысл выключить управление жестами в настройках часов при использовании режима аэромыши, иначе высока вероятность случайно выполнить жест «назад» или «домой».

Ссылки на скачивание


Play Store (не пытайтесь открыть эту ссылку с телефона, получите сообщение «устройство не совместимо»; либо откройте ссылку на компьютере, либо найдите приложение в Play Store на самих часах).

Исходный код (почти весь, кроме поддержки Oreo).

Комментарии (12)


  1. DaemonGloom
    19.02.2019 13:34

    Жаль, многие производители не поддерживают свои устройства. Множество часов так и осталось на старых версиях ОС — и для них этот метод не сработает.
    Зло смотрит на компанию ASUS


  1. ebt
    19.02.2019 14:31

    Не знаете ли, как с этим обстоят дела на часах Apple?


    1. ginkage Автор
      19.02.2019 14:38

      Для Apple есть приложения, требующие наличия «серверной» части, но поддержки Bluetooth HID Device API в них нет (да и HID Host они вряд ли поддерживают).


  1. AndreDeBonk
    19.02.2019 17:56

    «This app is incompatible with all of your devices.»

    Можно ссылку на apk оставить или разобраться с настройками в маркете?


    1. ginkage Автор
      19.02.2019 18:00

      С настройками в маркете всё в порядке.


    1. ginkage Автор
      19.02.2019 18:01

      Кстати, какие у вас часы?


      1. AndreDeBonk
        19.02.2019 19:36

        Galaxy Watch

        Как я понял, не совместимы? :(

        В часах часто меняются названия бренда, так что не отличаю уже их и не слежу


        1. ginkage Автор
          19.02.2019 19:39

          Galaxy Watch – это часы на платформе Tizen, а не на Android. Так что, увы, не совместимы (как и Apple Watch, как и Huawei Watch GT).


  1. emvaized
    21.02.2019 20:35

    Здравствуйте!
    Как подключить часы к компьютеру для работы этого приложения? К смартфону я их подключаю через приложение WearOS. А к компьютеру как?


    1. ginkage Автор
      21.02.2019 20:43

      Прежде всего вам нужен приёмник Bluetooth для компьютера: он может быть встроен в материнскую плату, или подключаться по USB.
      Далее можно просто выполнить сопряжение обычным образом, например вот инструкция для Windows.
      Когда приложение запущено (на экране виден список сопряжённых или доступных устройств), часы будут доступны для обнаружения, и их можно будет выбрать в списке доступных устройств на компьютере. Можно и наоборот: сделать комьпютер обнаруживаемым, и выбрать его в списке доступных устройств на часах.


      1. emvaized
        21.02.2019 23:47

        Я думал, часы можно только с телефоном спрягать через специальное приложение. А можно и просто подключать к чему-то, как наушники, без потери спряжения с телефоном?


        1. ginkage Автор
          22.02.2019 00:18
          +1

          Совершенно верно. Внутри часов — точно такой же Android, лишь с меньшим набором включенных Bluetooth-профилей. Как к телефону можно подключать множество устройств, так и к часам можно: например, часы можно спрягать с беспроводной гарнитурой, чтобы слушать музыку прямо с них — разумеется, без потери сопряжения с телефоном.