10 votes

Vérifier sur le réseau si un appareil Android est actif

J'ai un appareil nVidia Shield TV, qui fonctionne sous Android TV.

Afin d'intégrer ce dispositif dans mon installation de cinéma à domicile, je dois être en mesure de déterminer si l'appareil est actif ou endormi.

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

Une solution, 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 endormi.

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

1voto

Firelord Points 23064

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

Services du système d'interrogation

Activer adb en mode sans fil sur l'appareil. Suivez les guide officiel o cette réponse d'Izzy pour des instructions, si nécessaire.

Vous pouvez trouver le statut d'Android - sommeil ou éveillé - à partir de la décharge de divers services système.

  • Service : Puissance

    adb shell dumpsys power

    Rechercher les chaînes de caractères mWakefulness et/ou Display Power: state . Les deux vous donneraient le statut dont vous avez besoin.

    Ejemplo:

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

    me donne

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

    adb shell dumpsys window

    Rechercher les chaînes de caractères mAwake=true et/ou mScreenOnEarly=true et/ou mScreenOnFully=true

    Ejemplo:

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

    me donne

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

    adb shell dumpsys display

    Rechercher les chaînes de caractères mState=OFF et/ou mScreenState=OFF .

    Ejemplo:

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

    me donne

    mState=OFF
    mScreenState=OFF

Utiliser l'automatisation

Si aucun des services du système mentionnés dans la méthode précédente n'a fonctionné pour vous, configurez une automatisation comme Tasker, MacroDroid ou Automate.

Nous allons maintenant utiliser l'automatisation pour écrire l'état d'Android dans un fichier, par exemple Sleeping pour le mode veille et Awake lorsqu'il est éveillé.

Tasker ,

  • Profil : Événement → Affichage → Affichage désactivé
  • Tâche : (Actions) : Fichier → Écrire un fichier → sélectionner un fichier texte dans lequel écrire, taper Dormir et décocher Ajouter une nouvelle ligne.
  • Profil : Événement → Affichage → Affichage activé
  • Tâche : (Actions) : Fichier → Écrire un fichier → sélectionner un fichier texte dans lequel écrire, taper Réveil et décocher Ajouter une nouvelle ligne.

MacroDroid

Android n'est malheureusement pas livré avec echo o printf Si l'appareil est enraciné, vous pouvez installer l'utilitaire busybox et être en paix. Sinon, téléchargez busybox binaire définit les permissions de l'exécutable et le place dans le répertoire de l'entreprise. /data/local/tmp en utilisant adb push . Une autre façon pour un appareil non rooté est de garder 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/se rallume, copiez le deuxième/troisième fichier dans le premier.

MacriDroid nécessite également un plugin, tel que Paramètres sécurisés pour exécuter des commandes.

  • Gâchette : Écran activé/désactivé → Écran désactivé
  • Action : Paramètres de sécurité → Actions → Commande d'exécution :

    • Commandement : echo Sleeping > FILE_PATH
    • Nom de la commande : Screen off
  • Gâchette : Écran activé/désactivé → Écran activé
  • Action : Paramètres de sécurité → Actions → Commande d'exécution :

    • Commandement : echo Awake > FILE_PATH
    • Nom de la commande : Screen off

Pour un Android non rooté, echo doit être remplacé par ./data/local/tmp/busybox echo . Sinon, effectuez une opération de copie en utilisant la commande cp SOURCE DESTINATION .

Automatiser

Votre flux devrait plus ou moins ressembler à cette image

(Cliquez sur l'image pour l'agrandir)

IMG:

Vous devez créer deux flux, un pour le sommeil et l'autre pour l'éveil. Le deuxième bloc dans le flux est nommé Réception des émissions et se trouve dans la rubrique Apps. Le troisième bloc s'appelle Texte d'écriture de fichier et se trouve dans la rubrique Fichier et stockage.

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é, par exemple 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 le statut.


0voto

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 si cette option n'existe pas, je suis sûr qu'il doit y avoir une application pour cela. Ainsi, si le Wi-Fi est désactivé en mode veille, l'approche "ping" fonctionnera, mais vous devrez faire face à l'absence de mises à jour en arrière-plan, etc. lorsque l'appareil passe en mode veille.

Je ne pense pas qu'il y ait une application par défaut pour cette solution mais peut-être que les points suivants vous aideront. Vous pouvez créer votre propre application Android qui écoute PowerManager.ACTION_DEVICE_IDLE_MODE_CHANGED Intent et à la réception d'une requête de votre serveur, il peut renvoyer si l'appareil est éveillé ou non. Notez cependant que lorsque votre appareil reçoit une requête du serveur, il se réveillera probablement.

0voto

Vous pouvez mettre en place un script shell pour savoir si l'appareil est en mode veille.
Envoyer un signal à l'appareil . Par exemple, vous pouvez utiliser la commande adb shell comme ci-dessous : adb shell dumpsys deviceidle

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X