Découvrez sur le réseau si l'appareil Android est actif

9

J'ai un appareil nVidia Shield TV, qui exécute Android TV.

Afin d'intégrer cela dans ma configuration home cinéma, je dois pouvoir déterminer si l'appareil est actif ou en veille.

Pour mes autres appareils, j'utilise simplement ping pour déterminer cela. Cependant, étant donné que les appareils Android sont toujours allumés, cela ne fonctionne pas dans ce cas.

Une façon, bien sûr, serait d'écrire une application simple, qui ouvre un port TCP lorsque l'appareil est actif et le ferme lorsqu'il est en veille.

Ma question est de savoir s'il existe un moyen plus simple, peut-être une application existante ou une autre façon de le faire sans développer ma propre application pour ce faire.

Mika Fischer
la source
Votre appareil Android est-il toujours connecté au Wi-Fi?
frogatto
J'ai l'impression que vous mélangez "l'appareil est actif ou en train de dormir" avec "être allumé". Veuillez rendre votre question plus précise.
Marian Paździoch
@ HiI'mFrogatto L'appareil n'utilise pas le WiFi, il est connecté via Ethernet, il est donc toujours connecté au réseau.
Mika Fischer
@ MarianPaździoch Android TV dispose d'un mode appelé "mode veille", qui est un mode basse consommation, similaire à lorsque l'écran d'un téléphone ou d'une tablette est éteint. Je veux faire la distinction entre ce mode veille et le mode actif, où l'appareil affiche des trucs sur le téléviseur. Est-ce que cela clarifie le problème?
Mika Fischer
3
@MikaFischer "... sans écrire ma propre application, ..." Stack Overflow est pour ceux qui codent:)
frogatto

Réponses:

1

Il semble que nVidia Shield Android TV soit livré avec Android 5.1.1 et une mise à jour Marshmallow est disponible depuis décembre uniquement. Je suppose que Android 5.1.1 est la version installée sur votre appareil.

Services du système de requête

Activez en mode sans fil sur l'appareil. Suivez le guide officiel ou cette réponse d'Izzy pour obtenir des instructions, si nécessaire.

Vous pouvez trouver l'état d'Android - en veille ou éveillé - à partir du vidage de divers services système.

  • Service: Puissance

    adb shell dumpsys power
    

    Recherchez les chaînes mWakefulnesset / ou Display Power: state. Les deux vous donneraient le statut dont vous avez besoin.

    Exemple:

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

    Donne moi

    mWakefulness=Asleep
    Display Power: state=OFF
    
  • Service: Fenêtre

    adb shell dumpsys window
    

    Rechercher les chaînes mAwake=trueet / ou mScreenOnEarly=trueet / oumScreenOnFully=true

    Exemple:

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

    Donne moi

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

    adb shell dumpsys display
    

    Recherchez les chaînes mState=OFFet / ou mScreenState=OFF.

    Exemple:

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

    Donne moi

    mState=OFF
    mScreenState=OFF
    

Utiliser l'automatisation

Si aucun des services système mentionnés dans la méthode précédente ne fonctionnait pour vous, configurez une application d' , telle que Tasker ou MacroDroid ou Automate.

Nous utiliserions maintenant l'automatisation pour écrire le statut d'Android dans un fichier, comme Sleeping for sleep mode et Awake lorsqu'il est réveillé.

Tasker ,

  • Profil: Événement → Affichage → Affichage désactivé
  • Tâche: (Actions): Fichier → Écrire un fichier → sélectionnez un fichier texte dans lequel écrire, tapez Veille et décochez Ajouter une nouvelle ligne
  • Profil: Événement → Affichage → Affichage activé
  • Tâche: (Actions): Fichier → Écrire un fichier → sélectionnez un fichier texte dans lequel écrire, tapez Awake et décochez Ajouter une nouvelle ligne

MacroDroid

Android ne vient malheureusement pas avec echoou printfutilitaire, si l'appareil est enraciné, vous pouvez installer busybox et être en paix. Sinon, téléchargez le binaire busybox , définissez les autorisations exécutables et poussez-le à /data/local/tmputiliser adb push. Un autre moyen pour un périphérique non rooté est de conserver trois fichiers, un pour l'état, un avec le texte Sleeping et le dernier avec le texte Awake. Chaque fois que l'écran s'éteint / s'allume, copiez le deuxième / troisième fichier dans le premier.

MacriDroid nécessite également un plugin, tel que Secure Settings pour exécuter des commandes.

  • Déclencheur: écran activé / désactivé → écran désactivé
  • Action: Paramètres sécurisés → Actions → Exécuter la commande:

    • Commander: echo Sleeping > FILE_PATH
    • Nom de la commande: écran éteint
  • Déclencheur: écran activé / désactivé → écran activé
  • Action: Paramètres sécurisés → Actions → Exécuter la commande:

    • Commander: echo Awake > FILE_PATH
    • Nom de la commande: écran éteint

Pour un Android non rooté, echodoit être remplacé par ./data/local/tmp/busybox echo. Sinon, effectuez une opération de copie à l'aide de la commande cp SOURCE DESTINATION.

Automatiser

Votre flux devrait plus ou moins ressembler à cette image

(Cliquez sur l'image pour agrandir)

IMG:

Votre besoin de créer deux flux, l'un pour le sommeil et l'autre pour le réveil. Le deuxième bloc du flux est nommé Diffusion de réception et se trouve sous Applications. Le troisième bloc est nommé File write text et se trouve sous File & Storage.

Vous pouvez maintenant vérifier le contenu de ce fichier en utilisant adb en mode sans fil ou en utilisant SSH (nécessite un serveur SSH sur Android; exécutez le serveur sur toutes les interfaces et ne le liez pas à une seule interface.)


Il existe une autre possibilité, telle que faire en sorte que votre application d'automatisation télécharge le fichier sur un serveur local ou distant afin que vous puissiez interroger ce serveur au lieu d'Android pour connaître l'état.


Seigneur du feu
la source
Quelque chose me dit que ce ne sera pas facile sur Android TV. Faites-moi savoir si ma réponse ne fonctionne pas du tout. Je vais le retirer. Je n'ai pas l'intention de garder une réponse inutile qui se cache.
Firelord
1
Wow, merci pour la réponse détaillée! Utiliser Tasker comme ça a fonctionné comme un charme! La seule mise en garde est que vous devez connecter une souris pour la configurer. Je n'ai pas écrit dans un fichier. Au lieu de cela, j'ai écrit un simple serveur HTTP en Python et je lui envoie des requêtes GET depuis le bouclier.
Mika Fischer
Oui, la vôtre est aussi une belle technique. C'est comme dire au serveur que vous êtes vivant. Et merci pour la générosité! Pourriez-vous me dire si ma méthode 1 (cette méthode de service système) a échoué ou si vous ne l'avez pas encore essayée?
Firelord
1
Je ne l'ai pas essayé car je ne suis pas rooté et pour autant que je sache, il est nécessaire de connecter un ordinateur à l'appareil activer le mode réseau adb (après redémarrage par exemple), ce qui est trop gênant pour moi ...
Mika Fischer
0

Ce n'est pas vraiment une solution, mais dans les paramètres de l'appareil, il y a probablement une option qui désactive le Wi-Fi lorsque l'appareil passe en mode veille. Même s'il n'y a pas une telle option, je suis sûr qu'il doit y avoir une demande pour cela. Donc, si le Wi-Fi est désactivé à l'état IDLE, l'approche "ping" fonctionnera, mais vous devrez gérer les mises à jour en arrière-plan qui ne fonctionnent pas et ainsi de suite lorsque l'appareil passe à l'état IDLE.

Je ne pense pas qu'il existe une application par défaut pour cette solution, mais peut-être qu'un autre point vous aidera. Vous pouvez créer votre propre application Android qui écoute PowerManager.ACTION_DEVICE_IDLE_MODE_CHANGED Intent et après avoir reçu une sorte de demande de votre serveur, elle peut renvoyer si l'appareil est réveillé ou non. Cependant, notez que lorsque votre appareil reçoit une demande de serveur, il se réveillera probablement.


la source
Bonne idée, mais il s'agit d'un décodeur et connecté via Ethernet. Et comme je l'ai écrit, je sais que je peux écrire une application. La question est de savoir s'il existe un moyen de le faire :)
Mika Fischer
AFAIK il n'y a pas de grande différence dans les types de connexion sur Android par rapport au POV du développeur. Il existe donc probablement une application de fête 3D qui peut désactiver tout type de connexion, y compris filaire lorsque l'appareil passe en mode veille.
0

Vous pouvez configurer un script shell pour savoir si le périphérique est en mode veille .. si le périphérique est inactif .. vous pouvez ensuite
envoyer un signal au périphérique .. Par exemple, vous pouvez utiliser la commande adb shell comme ci-dessous: adb shell dumpsys deviceidle


la source
Intéressant, je devrai voir si je peux faire fonctionner adb sur le réseau ou si un serveur SSH peut être utilisé à la place.
Mika Fischer
Cependant, dumpsys deviceidlene fonctionne pas vraiment sur mon téléphone au moins (donne Can't find service: deviceidle).
Mika Fischer