Tengo un dispositivo nVidia Shield TV, que ejecuta Android TV.
Para integrar esto en mi configuración de cine en casa, necesito poder determinar si el dispositivo está activo o inactivo.
Para mis otros dispositivos, solo uso ping para determinar esto. Sin embargo, dado que los dispositivos Android están básicamente siempre encendidos, esto no funciona en este caso.
Una forma, por supuesto, sería escribir una aplicación simple, que abre un puerto TCP cuando el dispositivo está activo y lo cierra cuando está inactivo.
Mi pregunta es si hay una manera más simple, tal vez una aplicación existente o alguna otra forma de hacerlo sin desarrollar mi propia aplicación para hacerlo.
standby
android-tv
Mika Fischer
fuente
fuente
:)
Respuestas:
Parece que nVidia Shield Android TV viene con Android 5.1.1 y una actualización de Marshmallow está disponible solo desde diciembre. Supongo que Android 5.1.1 es la versión instalada en su dispositivo.
Consultar servicios del sistema
Habilite adb en modo inalámbrico en el dispositivo. Siga la guía oficial o esta respuesta de Izzy para obtener instrucciones, si es necesario.
Puede encontrar el estado de Android, en reposo o despierto, desde el volcado de varios servicios del sistema.
Servicio: poder
Buscar las cadenas
mWakefulness
y / oDisplay Power: state
. Ambos te darían el estado que necesitas.Ejemplo:
me da
Servicio: ventana
Buscar las cadenas
mAwake=true
y / omScreenOnEarly=true
y / omScreenOnFully=true
Ejemplo:
me da
Servicio: pantalla
Buscar las cadenas
mState=OFF
y / omScreenState=OFF
.Ejemplo:
me da
Usar automatización
Si ninguno de los servicios del sistema mencionados en el método anterior funcionó para usted, configure una aplicación de automatización , como Tasker o MacroDroid o Automate.
Ahora usaríamos la automatización para escribir el estado de Android en un archivo, como Dormir para el modo de suspensión y Despertar cuando está despierto.
Tasker ,
MacroDroid
Android lamentablemente no viene con
echo
oprintf
utilidad, si el dispositivo tiene sus raíces entonces se puede instalar busybox y estar en paz. De lo contrario, descargue binario busybox , establezca permisos ejecutables y póngalo en/data/local/tmp
usoadb push
. Otra forma para un dispositivo no rooteado es mantener tres archivos, uno para el estado, uno con el texto Durmiendo y el último con el texto Despertar. Siempre que la pantalla se apague / encienda, copie el segundo / tercer archivo en el primero.MacriDroid también requiere un complemento, como Configuración segura para ejecutar comandos.
Acción: Configuración segura → Acciones → Ejecutar comando:
echo Sleeping > FILE_PATH
Acción: Configuración segura → Acciones → Ejecutar comando:
echo Awake > FILE_PATH
Para un Android no rooteado,
echo
debe reemplazarse con./data/local/tmp/busybox echo
. De lo contrario, realice una operación de copia con el comandocp SOURCE DESTINATION
.Automatizar
Tu flujo debería verse más o menos como esta imagen
(Haga clic en la imagen para ampliarla)
Su necesidad de crear dos flujos, uno para dormir y otro para estar despierto. El segundo bloque en el flujo se denomina recepción de difusión y se puede encontrar en Aplicaciones. El tercer bloque se llama Texto de escritura de archivo y se puede encontrar en Archivo y almacenamiento.
Ahora puede verificar el contenido de ese archivo usando adb en modo inalámbrico o SSH (requiere un servidor SSH en Android; ejecute el servidor en todas las interfaces y no lo vincule a una sola interfaz).
Existe otra posibilidad, como hacer que su aplicación de automatización cargue el archivo en un servidor local o remoto para que pueda consultar ese servidor en lugar de Android para conocer el estado.
fuente
En realidad, esta no es una solución, pero en la configuración del dispositivo probablemente haya una opción que deshabilite el Wi-Fi cuando el dispositivo pasa al modo inactivo. Incluso si no existe tal opción, estoy seguro de que debe haber una aplicación para esto. Entonces, si el Wi-Fi está deshabilitado en estado IDLE, entonces el enfoque de "ping" funcionará, pero debe lidiar con actualizaciones de fondo que no funcionan y así sucesivamente cuando el dispositivo pasa al estado IDLE.
No creo que haya una aplicación predeterminada para esta solución, pero quizás algún punto adicional lo ayude. Puede crear su propia aplicación de Android que escuche a PowerManager.ACTION_DEVICE_IDLE_MODE_CHANGED
Intent
y al recibir algún tipo de solicitud de su servidor, puede enviarla de regreso si el dispositivo está despierto o no. Sin embargo, tenga en cuenta que cuando su dispositivo recibe la solicitud del servidor, probablemente se despierte.fuente
Puede configurar un script de shell para saber si el dispositivo está en modo inactivo ... si el dispositivo está inactivo ... luego puede
enviar señal al dispositivo ... Por ejemplo, puede usar el comando adb shell como se muestra a continuación: adb shell dumpsys deviceidle
fuente
dumpsys deviceidle
no funciona realmente en mi teléfono al menos (daCan't find service: deviceidle
).