5 votos

¿Cómo se puede activar (no sólo encender o apagar) los datos móviles y el wifi utilizando adb?

Primera pregunta principal:

¿es posible conmutar (no sólo activar o desactivar) el estado de los datos móviles y del wifi mediante adb? (por ejemplo para el wifi: si no sabes el estado del wifi ahora. envías varios comandos y entonces estás seguro de que el estado del wifi cambió). si esto no es posible entonces la pregunta es ¿cómo averiguar el estado del wifi y de los datos móviles usando adb?

segundo:

¿es posible cambiar el estado del wifi-hotspot y del usb-modem vía abd?

qué puedo hacer:

Estoy acostumbrado

adb shell svc data enable/disable
adb shell svc wifi enable/disable

Para activar/desactivar el wifi y los datos móviles. Pero no conozco una forma de cambiar el estado con un comando como "adb shell svc data toggle". ¿Quizás haya un comando que devuelva el estado del wifi o de los datos móviles? Como adb shell svc data state . y devuelve "on" o "off". ¿hay alguna forma de cambiarlo cuando el teléfono está bloqueado?

También uso esos comandos para cambiar el wifi-hotspot y el usb-modem (a diferencia de los dos primeros comandos anteriores la pantalla puede estar apagada, pero el teléfono debe estar desbloqueado):

adb shell am start -n com.android.settings/.TetherSettings
adb shell input keyevent 20
adb shell input keyevent 20
adb shell input keyevent 20
adb shell input keyevent 66

la primera línea abre la página de configuración. keyevent 20 - simula la pulsación de una tecla down , evento clave 66 - enter . es para el usb-modem. para el wifi-hotspot uso la misma primera línea, key20 key66 key20 key66.

tengo samsung a50(Android 10) y ubuntu 20. el bash de cambio de estado del modem script se encuentra en /usr/local/bin por lo que puedo ejecutarlo desde la consola con solo escribir el nombre del archivo.

6voto

NikolayFR Puntos 13

obtener el estado:

adb shell settings get global airplane_mode_on
# 0|1 -  dis/en abled

adb shell settings get global mobile_data
# 0|1 - dis/en abled

adb shell settings get global wifi_on
# 0|1 - dis/en abled

adb shell settings get global bluetooth_on
# 2|1 - dis/en abled

adb shell settings get global cell_on
# 2|1 - dis/en abled

cambiar de estado:

airplane
  enable
    adb shell settings put global airplane_mode_on 1
    adb shell am broadcast -a android.intent.action.AIRPLANE_MODE
  disable
    adb shell settings put global airplane_mode_on 0
    adb shell am broadcast -a android.intent.action.AIRPLANE_MODE

mobile data
    adb shell svc data enable
    adb shell svc data disable

wifi
    adb shell svc wifi enable
    adb shell svc wifi disable

bluetooth
  eanable
    adb shell settings put global bluetooth_disabled_profiles 1
  disable 
    adb shell settings put global bluetooth_disabled_profiles 0

para alternar utilizar bash script que comprueba el estado y luego activar/desactivar como:

#!/bin/bash
function toggle_data {
    if [[ $(adb shell settings get global mobile_data) == "1" ]]; then
        adb shell svc data disable
    else
        adb shell svc data enable; fi
}
function toggle_wifi {
    if [[ $(adb shell settings get global wifi_on) == "1" ]]; then
        adb shell svc wifi disable
    else
        adb shell svc wifi enable; fi
}
toggle_wifi
toggle_data
exit 0;

3voto

Firelord Puntos 161

Al conocer la estado Supongo que te referías a si en X momento el Wi-Fi o los datos móviles están activados o desactivados. Esta información se puede obtener del volcado de conectividad servicio.

Ejecute este comando para obtener el estado de los datos móviles y del Wi-Fi:

adb shell dumpsys connectivity | sed -e '/[0-9] NetworkAgentInfo.*CONNECTED/p' -e '/Tether state:/,/Hardware offload:/p' -n

Ejemplo de salida:

  1 NetworkAgentInfo \[**WIFI** () - 178\] CONNECTED/CONNECTED
  5 NetworkAgentInfo \[**MOBILE** (LTE) - 191\] CONNECTED/CONNECTED
Tether state:
  **rndis**0 - **TetheredState** - lastError = 0
  **wlan**0 - AvailableState - lastError = 0
  Upstream wanted: true
  Current upstream interface(s): \[rmnet\_data1\]
Hardware offload:

Aquí:

  • WIFI significa que el dispositivo está conectado a una red Wi-FI
  • MÓVIL significa que los datos móviles están habilitados
  • rndis es el nombre de la interfaz de anclaje USB
  • wlan es el nombre de la interfaz del punto de acceso Wi-Fi
  • TetheredState significa que se ha habilitado el tethering para la interfaz respectiva

En su salida:

  • si WIFI término con CONECTADO falta, que el dispositivo no está conectado a una red Wi-FI
  • si MÓVIL término con CONECTADO no hay estado, entonces el dispositivo móvil está deshabilitado
  • si TetheredState se muestra para rndis o wlan o ambos, que respectivamente, significa que USB tethering y Wi-Fi hotspot está/están habilitados.

A comprobar si la radio Wi-Fi está activada o desactivada ejecuta este comando:

adb shell dumpsys wifi | sed -n 1p

Ejemplo de salida si el Wi-Fi está activado:

Wi-Fi is **enabled**

enabled se muestra como disabled si la radio Wi-Fi está desactivada.


Del mismo modo, para comprobar si la radio celular tiene acceso a la red de telecomunicaciones o si está desactivado, ejecute este comando:

adb shell dumpsys telephony.registry | grep mServiceState | grep -o "mDataRegState=\[()0-9A-Z\_\]\*"

Ejemplo de salida:

mDataRegState=0(**IN\_SERVICE**)
mDataRegState=0(**IN\_SERVICE**)

Aquí:

  • IN_SERVICE significa que su radio celular o radios (si se admiten varias tarjetas SIM) está conectado a una red.
  • OUT_OF_SERVICE significaría no estar conectado a la red de telecomunicaciones
  • POWER_OFF significaría que el dispositivo está en modo avión.

La combinación de toda esta información le ayudaría a cerciorarse plenamente:

  • el estado de la radio Wi-Fi y su conectividad
  • el estado de la radio celular y su conectividad a internet
  • el estado del tethering USB y Wi-Fi

Ahora, ya sabes cómo activar/desactivar los datos móviles, el tethering USB y el Wi-Fi utilizando svc utilidad. Aunque no sé cómo fácilmente activar el hotspot, desactivar el hotspot es bastante fácil. Primero, habilita el Wi-Fi usando svc, y luego desactívalo con svc también.

Los dos comandos mencionados deberían ser suficientes para determinar el estado de conexión de los datos móviles, Wi-Fi, punto de acceso Wi-Fi y anclaje USB.

Nota: esta solución fue probada en un OnePlus 6 con Android 10.

2voto

St0rm Puntos 11

Datos móviles:

adb shell get global mobile_data 
adb shell get global mobile_data_always_on

Wifi:

adb shell get global wifi_on

Modo avión:

adb shell get global airplane_mode_on

0 votos

gracias. esto es lo que necesito. hace un par de días encontré estos comandos y terminaré el bash script pronto. Intentaré no olvidarme de añadirlo como respuesta a mi pregunta cuando lo termine. en el script uso estos adb comandos: adb shell settings get global adb shell settings put global adb shell am broadcast adb shell svc permite el control total de wifi, celular, m-data, bluetooth. Sólo tengo que averiguar cómo encender y apagar usb-módem y wifi-hotspot a través de adb. y hay problemas con la auto-completación de comandos bash script mientras se escribe, pero eso es un tema diferente.

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X