Dowiedz się przez sieć, czy urządzenie z Androidem jest aktywne


9

Mam urządzenie TV nVidia Shield z systemem Android TV.

Aby zintegrować to z moją konfiguracją kina domowego, muszę mieć możliwość ustalenia, czy urządzenie jest aktywne, czy śpi.

W przypadku innych urządzeń po prostu używam polecenia ping, aby to ustalić. Ponieważ jednak urządzenia z Androidem są w zasadzie zawsze włączone, w tym przypadku to nie działa.

Jednym ze sposobów byłoby oczywiście napisanie prostej aplikacji, która otwiera port TCP, gdy urządzenie jest aktywne i zamyka go, gdy śpi.

Moje pytanie brzmi, czy istnieje prostszy sposób, może istniejąca aplikacja lub inny sposób na zrobienie tego bez rozwijania własnej aplikacji.


Czy Twoje urządzenie z Androidem jest zawsze podłączone do Wi-Fi?
frogatto

Mam wrażenie, że miksujesz „urządzenie jest aktywne lub śpi” z „byciem”. Proszę uściślić swoje pytania.
Marian Paździoch

@ HiI'mFrogatto Urządzenie nie korzysta z WiFi, jest podłączone przez Ethernet, więc zawsze jest podłączone do sieci.
Mika Fischer,

@ MarianPaździoch Android TV ma tryb zwany „trybem uśpienia”, który jest trybem niskiego zużycia energii, podobnym do tego, kiedy ekran telefonu lub tabletu jest wyłączony. Chcę rozróżnić ten tryb uśpienia od trybu aktywnego, w którym urządzenie wyświetla rzeczy na telewizorze. Czy to wyjaśnia problem?
Mika Fischer,

3
@MikaFischer "... bez pisania własnej aplikacji, ..." Przepełnienie stosu jest dla tych, którzy kodują:)
frogatto

Odpowiedzi:


1

Wygląda na to, że nVidia Shield Android TV jest wyposażony w system Android 5.1.1, a aktualizacja Marshmallow jest dostępna tylko od grudnia. Zakładam, że Android 5.1.1 jest wersją zainstalowaną na twoim urządzeniu.

Zapytanie o usługi systemowe

Włączyć w trybie bezprzewodowym na urządzeniu. W razie potrzeby postępuj zgodnie z oficjalnym przewodnikiem lub odpowiedzią Izzy, aby uzyskać instrukcje.

Możesz znaleźć status Androida - uśpienie lub przebudzenie - ze zrzutu różnych usług systemowych.

  • Usługa: moc

    adb shell dumpsys power
    

    Wyszukaj ciągi mWakefulnessi / lub Display Power: state. Oba dałyby ci potrzebny status.

    Przykład:

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

    daje mi

    mWakefulness=Asleep
    Display Power: state=OFF
    
  • Usługa: okno

    adb shell dumpsys window
    

    Wyszukaj ciągi mAwake=truei / lub mScreenOnEarly=truei / lubmScreenOnFully=true

    Przykład:

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

    daje mi

    mAwake=true
    mScreenOnEarly=true mScreenOnFully=true
    
  • Service: Display

    adb shell dumpsys display
    

    Wyszukaj ciągi mState=OFFi / lub mScreenState=OFF.

    Przykład:

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

    daje mi

    mState=OFF
    mScreenState=OFF
    

Użyj automatyzacji

Jeśli żadna z usług systemowych wymienionych w poprzedniej metodzie nie działała dla Ciebie, skonfiguruj aplikacja, taka jak Tasker lub MacroDroid lub Automate.

Korzystamy teraz z automatyzacji, aby zapisać status Androida w pliku, na przykład Sleeping for sleep mode i Przebudźcie się, gdy jest przebudzony.

Tasker ,

  • Profil: Zdarzenie → Wyświetlanie → Wyświetlanie wyłączone
  • Zadanie: (Akcje): Plik → Zapisz plik → wybierz plik tekstowy do zapisania, wpisz Uśpienie i odznacz Dodaj nową linię
  • Profil: Zdarzenie → Wyświetlanie → Wyświetlanie włączone
  • Zadanie: (Działania): Plik → Zapisz plik → wybierz plik tekstowy, w którym chcesz zapisać, wpisz Przebudź i odznacz Dodaj nową linię

MacroDroid

Android niestety nie jest dostarczany z echoani printfnarzędziem. Jeśli urządzenie jest zrootowane, możesz zainstalować busybox i zachować spokój. Jeśli nie, pobierz plik binarny busybox , ustaw uprawnienia do plików wykonywalnych i pchnij go do /data/local/tmpużycia adb push. Innym sposobem dla niezrootowanego urządzenia jest trzymanie trzech plików, jednego dla stanu, jednego z tekstem Sleeping i ostatniego z tekstem Awake. Ilekroć ekran się wyłącza / włącza, skopiuj drugi / trzeci plik do pierwszego.

MacriDroid wymaga również wtyczki, takiej jak Bezpieczne ustawienia do wykonywania poleceń.

  • Trigger: Screen On / Off → Screen Off
  • Akcja: Zabezpieczone ustawienia → Akcje → Uruchom polecenie:

    • Komenda: echo Sleeping > FILE_PATH
    • Nazwa polecenia: Wyłącz ekran
  • Trigger: Screen On / Off → Screen On
  • Akcja: Zabezpieczone ustawienia → Akcje → Uruchom polecenie:

    • Komenda: echo Awake > FILE_PATH
    • Nazwa polecenia: Wyłącz ekran

W przypadku niezrootowanego Androida echonależy go zastąpić ./data/local/tmp/busybox echo. W przeciwnym razie wykonaj operację kopiowania za pomocą polecenia cp SOURCE DESTINATION.

Automatyzacja

Twój przepływ powinien mniej więcej przypominać ten obraz

(Kliknij obraz, aby powiększyć)

IMG:

Musisz stworzyć dwa przepływy, jeden dla snu, a drugi dla przebudzenia. Drugi blok w przepływie nosi nazwę Odbiór emisji i można go znaleźć w obszarze Aplikacje. Trzeci blok nosi nazwę Tekst zapisu pliku i można go znaleźć w Plik i przechowywanie.

Możesz teraz sprawdzić zawartość tego pliku za pomocą adb w trybie bezprzewodowym lub SSH (wymaga serwera SSH w Androidzie; uruchom serwer na wszystkich interfejsach i nie łącz go z jednym interfejsem).


Istnieje jeszcze inna możliwość, na przykład przesłanie pliku z aplikacji automatyzacji na lokalny lub zdalny serwer, dzięki czemu można zapytać ten serwer zamiast Androida o status.



Coś mi mówi, że to nie będzie płynna jazda na Android TV. Daj mi znać, jeśli moja odpowiedź w ogóle nie zadziała. Zdejmę to. Nie zamierzam czaić się wokół nieprzydatnej odpowiedzi.
Firelord

1
Wow, dzięki za szczegółową odpowiedź! Korzystanie z Taskera w ten sposób działało jak urok! Jedynym zastrzeżeniem jest to, że musisz go podłączyć, aby go skonfigurować. Nie napisałem do pliku. Zamiast tego napisałem prosty serwer HTTP w Pythonie i wysyłam do niego żądania GET z tarczy.
Mika Fischer

Tak, twoja technika też jest niezła. To tak, jakby powiedzieć serwerowi, że żyjesz. I dzięki za nagrodę! Czy mógłbyś mi powiedzieć, czy moja metoda 1 (ta metoda usługi systemowej) nie powiodła się, czy jeszcze jej nie wypróbowałeś?
Firelord

1
Nie próbowałem tego, ponieważ nie jestem zrootowany i, o ile widzę, konieczne jest podłączenie komputera do urządzenia, aby włączyć tryb sieci adb (na przykład po ponownym uruchomieniu), co jest dla mnie zbyt niewygodne ...
Mika Fischer

0

To nie jest właściwie rozwiązanie, ale w ustawieniach urządzenia prawdopodobnie jest opcja, która wyłącza Wi-Fi, gdy urządzenie przechodzi w tryb bezczynności. Nawet jeśli nie ma takiej opcji, jestem pewien, że musi być na to aplikacja. Jeśli więc Wi-Fi jest wyłączone w stanie bezczynności, podejście „ping” będzie działać, ale musisz poradzić sobie z niedziałającymi aktualizacjami w tle i tak dalej, gdy urządzenie przejdzie w stan bezczynności.

Nie sądzę, że jest to domyślna aplikacja dla tego rozwiązania, ale być może dalszy punkt pomoże. Możesz utworzyć własną aplikację dla systemu Android, która nasłuchuje programu PowerManager.ACTION_DEVICE_IDLE_MODE_CHANGED, Intent a po otrzymaniu żądania z serwera może odesłać, jeśli urządzenie nie działa. Zauważ jednak, że kiedy urządzenie otrzyma żądanie serwera, prawdopodobnie się obudzi.


Dobry pomysł, jednak jest to dekoder STB i podłączony przez Ethernet. I jak napisałem, wiem, że mogę napisać aplikację. Pytanie brzmi, czy można to zrobić :)
Mika Fischer,

AFAIK nie ma dużej różnicy w rodzajach połączeń na Androidzie z POV dewelopera. Prawdopodobnie jest to aplikacja 3D, która może wyłączyć wszelkie połączenia, w tym przewodowe, gdy urządzenie przejdzie w stan bezczynności.

0

Możesz skonfigurować skrypt powłoki, aby wiedzieć, czy urządzenie jest w trybie bezczynności .. jeśli urządzenie jest w stanie bezczynności .. następnie możesz
wysłać sygnał do urządzenia .. Na przykład możesz użyć polecenia powłoki adb, jak poniżej: adb shell dumpsys deviceidle


Co ciekawe, będę musiał sprawdzić, czy mogę dostać adb działający w sieci, czy też zamiast niego można użyć serwera SSH.
Mika Fischer,

Jednak dumpsys deviceidletak naprawdę nie działa na moim telefonie przynajmniej (daje Can't find service: deviceidle).
Mika Fischer,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.