Дізнайтеся по мережі, чи активний пристрій Android


9

У мене є телевізор nVidia Shield, на якому працює Android TV.

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

Для інших моїх пристроїв я просто використовую ping, щоб визначити це. Однак, оскільки пристрої Android в основному завжди увімкнено, у цьому випадку це не працює.

Одним із способів, звичайно, було б написати простий додаток, який відкриває порт TCP, коли пристрій активний, і закриває його, коли він спить.

Моє запитання - чи є простіший спосіб, можливо, наявний додаток чи якийсь інший спосіб зробити це, не розробляючи власного додатка для цього.


Чи завжди ваш пристрій Android підключений до Wi-Fi?
frogatto

У мене виникає відчуття, що ви змішуєте "пристрій активний або спить" з "увімкненим". Будь ласка, зробіть питання більш точним.
Marian Paździoch

@ HiI'mFrogatto Пристрій не використовує WiFi, він підключений через Ethernet, тому він завжди підключений до мережі.
Міка Фішер

@ MarianPaździoch Android TV має режим під назвою "режим сну", який є режимом низької потужності, подібний до вимкнення екрана телефону або планшета. Я хочу розрізняти цей режим сну та активний режим, коли пристрій відображає речі на телевізорі. Чи пояснює це проблема?
Міка Фішер

3
@MikaFischer "... без написання власної програми, ..." Переповнення стека для тих, хто :)
кодує

Відповіді:


1

Схоже, Android TV TV nVidia Shield поставляється з Android 5.1.1, а оновлення Marshmallow доступне лише з грудня. Я припускаю, що Android 5.1.1 - це версія, встановлена ​​у вашому пристрої.

Послуги системи запитів

Увімкнути в бездротовому режимі на пристрої. Дотримуйтесь офіційного керівництва або цієї відповіді Ізі за інструкціями, якщо це потрібно.

Ви можете знайти статус Android - сон або пробуджений - із сміття різних системних сервісів.

  • Сервіс: живлення

    adb shell dumpsys power
    

    Шукайте рядки mWakefulnessта / або Display Power: state. Обидва вони нададуть вам потрібний вам статус.

    Приклад:

    adb shell 'dumpsys power | grep -e "mWakefulness=" -e "Display Power"'
    

    дає мені

    mWakefulness=Asleep
    Display Power: state=OFF
    
  • Сервіс: Вікно

    adb shell dumpsys window
    

    Шукайте рядки mAwake=trueта / або mScreenOnEarly=trueта / абоmScreenOnFully=true

    Приклад:

    adb shell 'dumpsys window | grep -e "mAwake=" -e "mScreenOnEarly" -e "mScreenOnFully"'
    

    дає мені

    mAwake=true
    mScreenOnEarly=true mScreenOnFully=true
    
  • Сервіс: Дисплей

    adb shell dumpsys display
    

    Шукайте рядки mState=OFFта / або mScreenState=OFF.

    Приклад:

    adb shell 'dumpsys display | grep -e "mState=" -e "mScreenState"'
    

    дає мені

    mState=OFF
    mScreenState=OFF
    

Використовуйте Автоматизацію

Якщо жодна із системних служб, згаданих у попередньому методі, не працювала для вас, встановіть додаток, такий як Tasker або MacroDroid або Automate.

Зараз ми використовуємо автоматизацію для запису статусу Android у файл, наприклад, «Сон для сну» та «Прокидайтеся», коли він не прокидається.

Tasker ,

  • Профіль: Подія → Дисплей → Дисплей вимкнено
  • Завдання: (Дії): Файл → Написати файл → Виберіть текстовий файл, який потрібно записати, введіть сплячий і зніміть прапорець Додати новий рядок
  • Профіль: Подія → Дисплей → Дисплей увімкнено
  • Завдання: (Дії): Файл → Написати файл → Виберіть текстовий файл, який потрібно вписати, введіть Пробудити та зніміть прапорець Додати новий рядок

MacroDroid

Android , до жаль , не входить echoабо printfутиліта, якщо пристрій вкорінене , то ви можете встановити BusyBox і бути в світі. Якщо ні, завантажте бінарний файл зайнятої програми , встановіть виконавчі дозволи та натисніть на їх /data/local/tmpвикористання adb push. Інший спосіб для не вкоріненого пристрою - зберігати три файли, один для стану, один з текстом сплячого і останній з текстом Прокидайтеся. Кожен раз, коли екран вимикається / вмикається, скопіюйте другий / третій файл у перший.

MacriDroid також вимагає плагін, наприклад захищені налаштування для виконання команд.

  • Тригер: Увімкнення / вимкнення екрана → Екран вимкнено
  • Дія: Безпечні налаштування → Дії → Запустити команду:

    • Команда: echo Sleeping > FILE_PATH
    • Назва команди: екран вимкнено
  • Тригер: Увімкнення / вимкнення екрана → Екран увімкнено
  • Дія: Безпечні налаштування → Дії → Запустити команду:

    • Команда: echo Awake > FILE_PATH
    • Назва команди: екран вимкнено

Для не вкорінених Android, його echoслід замінити на ./data/local/tmp/busybox echo. В іншому випадку виконайте операцію копіювання за допомогою команди cp SOURCE DESTINATION.

Автоматизувати

Ваш потік повинен більш-менш виглядати таким чином

(Клацніть зображення, щоб збільшити)

IMG:

Вам потрібно створити два потоки, один для сну, а інший для неспання. Другий блок у потоці має назву Broadcast прием і його можна знайти в розділі Apps. Третій блок має назву Текст написання файлу і його можна знайти у розділі Файл та зберігання.

Тепер ви можете перевірити вміст цього файлу за допомогою adb в бездротовому режимі або за допомогою SSH (потрібен SSH-сервер на Android; запускайте сервер на всіх інтерфейсах і не прив'язуйте його до єдиного інтерфейсу.)


Існує ще одна можливість, наприклад, змусити додаток для автоматизації завантажувати файл на локальний або віддалений сервер, щоб ви могли запитувати цей сервер замість Android, щоб дізнатися про стан.



Щось підказує мені, що це не буде плавною їздою на Android TV. Повідомте мене, якщо моя відповідь взагалі не працює. Я його зніму. Я не маю наміру тримати непослушну відповідь, що ховається навколо.
Firelord

1
Ого, дякую за детальну відповідь! Використання подібного Tasker працювало як шарм! Єдиний застереження полягає в тому, що вам потрібно підключити мишу, щоб налаштувати її. Я не писав у файл. Натомість я написав простий HTTP-сервер у Python та надсилав GET запити на нього із щита.
Міка Фішер

Так, і ваша хороша техніка. Це як сказати серверу, що ти живий. І дякую за щедроту! Не хотіли б ви сказати мені, чи не вдався мій метод 1 (метод системної служби) чи ви ще не спробували його?
Firelord

1
Я не пробував, тому що я не вкорінений, і, наскільки я бачу, необхідно підключити комп'ютер до пристрою, щоб включити режим adb мережі (наприклад, перезавантаження, наприклад), що занадто незручно для мене ...
Міка Фішер

0

Це насправді не рішення, але в налаштуваннях пристрою, ймовірно, є параметр, який відключає Wi-Fi, коли пристрій переходить у режим очікування. Навіть якщо такої опції немає, я впевнений, що для цього має бути програма. Отже, якщо Wi-Fi відключений у режимі IDLE, тоді "ping" підхід працюватиме, але вам доведеться мати справу з непрацюючими фоновими оновленнями тощо, коли пристрій переходить у стан IDLE.

Я не думаю, що для цього рішення існує програма за замовчуванням, але, можливо, вам допоможе подальший пункт. Ви можете створити власний додаток для Android, який слухає PowerManager.ACTION_DEVICE_IDLE_MODE_CHANGED, Intent і після отримання якогось запиту від вашого сервера він може відправити назад, якщо пристрій прокинувся чи ні. Однак зауважте, що коли ваш пристрій отримає запит сервера, він, ймовірно, прокинеться.


Хороша ідея, однак це телеприймач і підключений через Ethernet. І як я писав, я знаю, що можу написати додаток. Питання в тому, чи є спосіб зробити це :)
Міка Фішер

AFAIK немає великої різниці у типах підключення на Android від Dev's POV. Тож, мабуть, існує програма для партії 3d, яка може відключити будь-який тип з'єднання, включаючи провідне, коли пристрій переходить у режим очікування.

0

Ви можете налаштувати скрипт оболонки, щоб знати, чи пристрій перебуває в режимі очікування. Якщо пристрій працює в режимі очікування .. тоді ви можете
відправити сигнал на пристрій .. Наприклад, ви можете використовувати команду оболонки adb, як показано нижче: adb shell dumpsys deviceidle


Цікаво, що мені доведеться дізнатися, чи можу я отримати рекламу adb, що працює над мережею, чи може замість цього використовувати сервер SSH
Міка Фішер

Однак dumpsys deviceidleнасправді не працює на моєму телефоні принаймні (дає Can't find service: deviceidle).
Міка Фішер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.