Scopri in rete se il dispositivo Android è attivo


9

Ho un dispositivo nVidia Shield TV, che esegue Android TV.

Per integrarlo nella configurazione del mio sistema home theater, devo essere in grado di determinare se il dispositivo è attivo o in stato di sospensione.

Per i miei altri dispositivi uso solo il ping per determinarlo. Tuttavia, poiché i dispositivi Android sono praticamente sempre accesi, in questo caso non funziona.

Un modo, ovviamente, sarebbe quello di scrivere una semplice app, che apre una porta TCP quando il dispositivo è attivo e la chiude quando dorme.

La mia domanda è se esiste un modo più semplice, forse un'app esistente o un altro modo per farlo senza sviluppare la mia app per farlo.


Il tuo dispositivo Android è sempre connesso al Wi-Fi?
frogatto,

Ho la sensazione che stai mescolando "il dispositivo è attivo o inattivo" con "essere acceso". Per favore, rendi la tua domanda più precisa.
Marian Paździoch,

@ HiI'mFrogatto Il dispositivo non utilizza WiFi, è collegato tramite Ethernet, quindi è sempre connesso alla rete.
Mika Fischer,

@ MarianPaździoch Android TV ha una modalità chiamata "modalità sleep", che è una modalità a basso consumo, simile a quando lo schermo di un telefono o tablet è spento. Voglio distinguere tra questa modalità di sospensione e la modalità attiva, in cui il dispositivo visualizza elementi sul televisore. Ciò chiarisce il problema?
Mika Fischer,

3
@MikaFischer "... senza scrivere la mia app, ..." Stack Overflow è per coloro che codificano:)
frogatto il

Risposte:


1

Sembra che nVidia Shield Android TV sia dotato di Android 5.1.1 e un aggiornamento Marshmallow è disponibile solo da dicembre. Suppongo che Android 5.1.1 sia la versione installata sul tuo dispositivo.

Servizi del sistema di query

Abilita in modalità wireless sul dispositivo. Segui la guida ufficiale o questa risposta di Izzy per istruzioni, se necessario.

Puoi trovare lo stato di Android - sleep o wake - dal dump di vari servizi di sistema.

  • Servizio: Potenza

    adb shell dumpsys power
    

    Cerca le stringhe mWakefulnesse / o Display Power: state. Entrambi ti darebbero lo status di cui hai bisogno.

    Esempio:

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

    mi da

    mWakefulness=Asleep
    Display Power: state=OFF
    
  • Servizio: finestra

    adb shell dumpsys window
    

    Cerca le stringhe mAwake=truee / o mScreenOnEarly=truee / omScreenOnFully=true

    Esempio:

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

    mi da

    mAwake=true
    mScreenOnEarly=true mScreenOnFully=true
    
  • Servizio: display

    adb shell dumpsys display
    

    Cerca le stringhe mState=OFFe / o mScreenState=OFF.

    Esempio:

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

    mi da

    mState=OFF
    mScreenState=OFF
    

Usa l'automazione

Se nessuno dei servizi di sistema menzionati nel metodo precedente ha funzionato per te, imposta un'app di , come Tasker o MacroDroid o Automate.

Ora useremmo l'automazione per scrivere lo stato di Android in un file, come Sleeping for sleep mode e Awake quando è attivo.

Tasker ,

  • Profilo: Evento → Visualizza → Visualizza spento
  • Attività: (Azioni): File → Scrivi file → selezionare un file di testo in cui scrivere, digitare Sleeping e deselezionare Aggiungi nuova riga
  • Profilo: Evento → Visualizza → Visualizza attivo
  • Attività: (Azioni): File → Scrivi file → selezionare un file di testo in cui scrivere, digitare Attiva e deselezionare Aggiungi nuova riga

MacroDroid

Android purtroppo non viene fornito con echoo printfutilità, se il dispositivo è rooted, puoi installare busybox ed essere in pace. In caso contrario, scarica il file binario busybox , imposta le autorizzazioni eseguibili e spingilo /data/local/tmpnell'uso adb push. Un altro modo per un dispositivo non rootato è di mantenere tre file, uno per lo stato, uno con il testo Sleeping e l'ultimo con il testo Awake. Ogni volta che lo schermo si spegne / si accende, copiare il secondo / terzo file nel primo.

MacriDroid richiede anche un plug-in, ad esempio Impostazioni protette per eseguire i comandi.

  • Trigger: schermo acceso / spento → schermo spento
  • Azione: Impostazioni sicure → Azioni → Esegui comando:

    • Comando: echo Sleeping > FILE_PATH
    • Nome comando: Schermo spento
  • Trigger: schermo acceso / spento → schermo acceso
  • Azione: Impostazioni sicure → Azioni → Esegui comando:

    • Comando: echo Awake > FILE_PATH
    • Nome comando: Schermo spento

Per un Android non rootato, echodovrebbe essere sostituito con ./data/local/tmp/busybox echo. In caso contrario, fare un'operazione di copia con il comando cp SOURCE DESTINATION.

Automatizzare

Il tuo flusso dovrebbe assomigliare più o meno a questa immagine

(Clicca sull'immagine per ingrandire)

IMG:

La tua necessità di creare due flussi, uno per il sonno e l'altro per il risveglio. Il secondo blocco nel flusso è denominato Ricezione trasmissione e si trova in App. Il terzo blocco si chiama File write text e si trova in File & Storage.

Ora puoi controllare il contenuto di quel file usando adb in modalità wireless o usando SSH (richiede un server SSH su Android; esegui il server su tutte le interfacce e non associarlo a un'unica interfaccia).


Esiste un'altra possibilità, ad esempio fare in modo che l'app di automazione carichi il file su un server locale o remoto in modo da poter eseguire una query su quel server anziché su Android per conoscere lo stato.



Qualcosa mi dice che non sarà una corsa fluida su Android TV. Fammi sapere se la mia risposta non funziona affatto. Lo abbasso. Non intendo mantenere una risposta inutile in agguato.
Firelord

1
Caspita, grazie per la risposta dettagliata! Usare Tasker in questo modo ha funzionato come un incantesimo! L'unica avvertenza è che è necessario collegare un mouse per configurarlo. Non ho scritto su un file. Invece ho scritto un semplice server HTTP in Python e gli ho inviato richieste GET dallo scudo.
Mika Fischer,

Sì, anche la tua è una bella tecnica. È come dire al server che sei vivo. E grazie per la generosità! Ti dispiacerebbe dirmi se il mio metodo 1 (quel metodo di servizio di sistema) non è riuscito o non l'hai ancora provato?
Firelord

1
Non l'ho provato perché non sono rootato e, per quanto posso vedere, è necessario collegare un computer al dispositivo abilitare la modalità di rete adb (dopo i riavvii per esempio), che è troppo scomodo per me ...
Mika Fischer,

0

Questa non è in realtà una soluzione, ma nelle impostazioni del dispositivo c'è probabilmente un'opzione che disabilita il Wi-Fi quando il dispositivo passa in modalità inattiva. Anche se non esiste tale opzione, sono sicuro che ci deve essere un'applicazione per questo. Pertanto, se il Wi-Fi è disabilitato nello stato IDLE, l'approccio "ping" funzionerà, ma è necessario gestire gli aggiornamenti in background non funzionanti e così via quando il dispositivo passa allo stato IDLE.

Non penso che ci sia un'applicazione predefinita per questa soluzione, ma forse un ulteriore punto ti aiuterà. È possibile creare la propria applicazione Android in ascolto di PowerManager.ACTION_DEVICE_IDLE_MODE_CHANGED Intent e alla ricezione di ricevere un tipo di richiesta dal proprio server può inviare se il dispositivo è attivo o meno. Tuttavia, quando il dispositivo riceve la richiesta del server, probabilmente si risveglierà.


Buona idea, tuttavia questo è un set-top-box e collegato via Ethernet. E come ho scritto, so che posso scrivere un'app. La domanda è se c'è un modo per aggirarlo :)
Mika Fischer l'

AFAIK non c'è grande differenza nei tipi di connessione su Android dal POV di dev. Quindi probabilmente c'è un'app per le feste in 3D che può disabilitare qualsiasi tipo di connessione, incluso quella cablata quando il dispositivo entra nello stato inattivo.

0

È possibile impostare uno script di shell per sapere se il dispositivo è in modalità inattiva ... se il dispositivo è inattivo ... quindi è possibile
inviare il segnale al dispositivo .. Ad esempio è possibile utilizzare il comando shell adb come di seguito: adb shell dumpsys deviceidle


Interessante, dovrò vedere se cerco di far funzionare adb tramite la rete o se è possibile utilizzare un server SSH.
Mika Fischer,

Tuttavia, dumpsys deviceidlenon funziona davvero sul mio telefono (dà Can't find service: deviceidle).
Mika Fischer,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.