У меня есть устройство nVidia Shield TV, которое работает под управлением Android TV.
Чтобы интегрировать это в настройку домашнего кинотеатра, мне необходимо определить, активно ли устройство или находится в спящем режиме.
Для других моих устройств я просто использую ping, чтобы определить это. Однако, поскольку устройства Android в основном всегда включены, в этом случае это не работает.
Конечно, можно написать простое приложение, которое открывает порт TCP, когда устройство активно, и закрывает его, когда оно спит.
У меня вопрос: есть ли более простой способ, может быть, существующее приложение или какой-либо другой способ сделать это без разработки собственного приложения для этого.
standby
android-tv
Мика Фишер
источник
источник
:)
Ответы:
Похоже, что nVidia Shield Android TV поставляется с Android 5.1.1, а обновление Marshmallow доступно только с декабря. Я предполагаю, что Android 5.1.1 - это версия, установленная на вашем устройстве.
Запрос системных служб
Включить ADB в беспроводном режиме на устройстве. При необходимости следуйте официальному руководству или этому ответу Иззи для получения инструкций.
Вы можете узнать состояние Android - спящий или бодрствующий - из свалки различных системных сервисов.
Сервис: мощность
Поиск строк
mWakefulness
и / илиDisplay Power: state
. Они оба дадут вам статус, который вам нужен.Пример:
дает мне
Сервис: Окно
Поиск строк
mAwake=true
и / илиmScreenOnEarly=true
и / илиmScreenOnFully=true
Пример:
дает мне
Сервис: Дисплей
Поиск строк
mState=OFF
и / илиmScreenState=OFF
.Пример:
дает мне
Использовать автоматизацию
Если ни одна из системных служб, упомянутых в предыдущем методе, не работает для вас, настройте приложение для автоматизации , такое как Tasker, MacroDroid или Automate.
Теперь мы будем использовать автоматизацию для записи состояния Android в файл, например, «Спящий режим» и «Пробуждение», когда он активен.
Tasker ,
MacroDroid
Android , к сожалению , не входит
echo
илиprintf
утилита, если устройство укоренено , то вы можете установить BusyBox и быть в мире. Если нет, загрузите двоичный файл busybox , установите права доступа к исполняемому файлу и вставьте его в/data/local/tmp
использованиеadb push
. Другой способ для нерутированного устройства - сохранить три файла, один для состояния, один с текстом Sleeping и последний с текстом Awake. Всякий раз, когда экран выключается / включается, скопируйте второй / третий файл в первый.MacriDroid также требует плагин, такой как Secure Settings для выполнения команд.
Действие: Безопасные настройки → Действия → Команда запуска:
echo Sleeping > FILE_PATH
Действие: Безопасные настройки → Действия → Команда запуска:
echo Awake > FILE_PATH
Для нерутированного Android
echo
следует заменить на./data/local/tmp/busybox echo
. В противном случае выполните операцию копирования с помощью командыcp SOURCE DESTINATION
.Автоматизировать
Ваш поток должен более или менее выглядеть как это изображение
(Нажмите на изображение, чтобы увеличить)
Вам нужно создать два потока, один для сна и другой для бодрствования. Второй блок в потоке называется Broadcast receive и находится в разделе Apps. Третий блок называется File write text и находится в разделе «Файл и хранилище».
Теперь вы можете проверить содержимое этого файла, используя adb в беспроводном режиме или используя SSH (требуется сервер SSH на Android; запустите сервер на всех интерфейсах и не привязывайте его к одному интерфейсу.)
Существует еще одна возможность, например, заставить ваше приложение автоматизации загружать файл на локальный или удаленный сервер, чтобы вы могли запросить этот сервер вместо Android, чтобы узнать состояние.
источник
На самом деле это не решение, но в настройках устройства, вероятно, есть опция, которая отключает Wi-Fi, когда устройство переходит в режим ожидания. Даже если такой опции нет, я уверен, что для этого должна быть заявка. Таким образом, если Wi-Fi отключен в состоянии IDLE, тогда будет работать подход «ping», но вам придется иметь дело с неработающими фоновыми обновлениями и т. Д., Когда устройство переходит в состояние IDLE.
Я не думаю, что для этого решения есть приложение по умолчанию, но, возможно, вам поможет следующий момент. Вы можете создать свое собственное приложение для Android, которое прослушивает PowerManager.ACTION_DEVICE_IDLE_MODE_CHANGED,
Intent
и после получения какого-либо запроса от вашего сервера оно может отправить его обратно, если устройство не спит или нет. Однако обратите внимание, что когда ваше устройство получает запрос от сервера, оно, вероятно, проснется.источник
Вы можете настроить сценарий оболочки, чтобы узнать, находится ли устройство в режиме ожидания. Если устройство находится в режиме ожидания. Затем вы можете
отправить сигнал на устройство. Например, вы можете использовать команду оболочки adb, как показано ниже: adb shell dumpsys deviceidle
источник
dumpsys deviceidle
по крайней мере , не работает на моем телефоне по крайней мере (даетCan't find service: deviceidle
).