7 votos

¿Cómo encender el hotspot wi-fi usando la línea de comandos con Root?

He leído muchos posts al respecto como ¿Cómo encender el hotspot wi-fi usando ADB? pero todos ellos basados en "emulaciones de clic", pero tengo Root y no me soluciona el problema.

He intentado Hotspot VPN y funciona perfectamente incluso sin permisos Root (usando sólo el permiso "WRITE_SETTINGS").

Necesito habilitarlo usando la línea de comandos incluso cuando el teléfono está bloqueado, algo así como:

adb shell su -c service call connectivity 24 i32 0 i32 0 i32 0 s16 random

pero para el anclaje Wi-Fi.

Tengo un dispositivo rooteado con Android 11.

Actualización

He descubierto que es posible hacerlo mediante un comando similar:

service call tethering 4 null s16 random

void startTethering(in TetheringRequestParcel request, String callerPkg, String callingAttributionTag, IIntResultListener receiver);

Pero el primer argumento null está mal porque aquí debe estar esta interfaz:

parcelable TetheringRequestParcel {
    int tetheringType;
    LinkAddress localIPv4Address;
    LinkAddress staticClientAddress;
    boolean exemptFromEntitlementCheck;
    boolean showProvisioningUi;
    int connectivityScope;
}

Cómo ponerlo en lugar de null ?

8voto

Jack Wade Puntos 231

connectivity no tiene un método para iniciar el punto de acceso Wi-Fi. tethering servicio llama indirectamente wifi servicio al que puede llamar directamente.

startSoftAp y startTetheredHotspot métodos inician el hotspot, y stopSoftAp paradas, como los nombres sugieren.

Para Android 11, el orden de los tres métodos es 47 , 48 y 49 respectivamente. Así que para empezar:

~# service call wifi 47

Y a parar:

~# service call wifi 49

No se requiere ningún argumento de configuración. Android elige automáticamente la configuración de AP guardada.

Si se requiere un nombre de paquete como argumento, intente proporcionar una cadena vacía o null o android o com.android.shell .

Compruebe el número de método correspondiente a su versión de Android en el archivo de la interfaz de servicio: android.net.wifi.IWifiManager.aidl enlazado arriba.

Los tres métodos requieren android.permission.NETWORK_STACK que tiene un nivel de protección: signature , por lo que no funcionará sin Root.


Relacionado con esto:

0 votos

Gracias. ¡Funciona! Pero quiero saber para el feauture, que debo hacer cuando quiero llamar a throw service call donde algún argumento es objeto como en mi caso parcelable TetheringRequestParcel . ¿Es posible llamar a algunos métodos como él o sólo simple como wifi ?

1 votos

@mixalbl4 solo puedes pasar tipos de datos básicos desde shell como enteros o cadenas. Ver service -h . Parcel es un objeto Java, por lo que es necesario escribir código Java.

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