Tengo la siguiente configuración: un dispositivo Wi-Fi que NO está conectado a Internet, como un dron o un dispositivo IoT. Los datos del dispositivo se cargarán en Internet.
Si bien es posible conectarse a ambas redes dentro de una aplicación usando ConnectivityManager
, no es posible usar Internet móvil fuera de la aplicación. Los dispositivos tienen Android 6.0 o superior, por lo que debería ser compatible con el sistema Android. Pero me parece que Samsung no implementó ese soporte.
¿Cómo uso Internet móvil, por ejemplo, para recibir correos electrónicos o notificaciones automáticas mientras estoy conectado a un Wi-Fi que no tiene Internet?
Gracias.
Se han hecho preguntas similares aquí:
¿Puede un teléfono Android conectarse a la red Wi-Fi y de datos móviles al mismo tiempo?
Sin embargo, debido a la descripción de la recompensa, intentaré agregar estos datos y ampliarlos un poco, ya que las respuestas no se marcaron como aceptadas.
Respuesta corta: es posible tener redes duales, pero las soluciones alternativas difieren ligeramente.
Multipath TCP (MPTCP) es Multipath-TCP es una extensión de TCP que permite el uso paralelo de múltiples conexiones a Internet. Multipath-TCP ya está implementado para el kernel de Linux, pero aún no está integrado en el kernel upstream oficial.
El código fuente (y algunos núcleos precompilados, incluidas las compilaciones de Android) se pueden encontrar aquí: http://multipath-tcp.org
Fuente adicional con referencia al dispositivo Samsung: MPTCP en dispositivos Android e implementación MultiPath TCP - Linux Kernel .
En otra fuente, habilite la conexión inalámbrica y 4g al mismo tiempo. Los usuarios afirman que pudieron habilitar la red dual con la siguiente solución (citado):
Todos los siguientes pasos realizados en un shell raíz:
cargar los controladores
busybox insmod /system/lib/modules/cfg80211.ko busybox insmod /system/lib/modules/wlan.ko
inicie wpa_supplicant para conectarse a la primera red inalámbrica disponible. El wpa_supplicant.conf
archivo que enumero a continuación es el que mantiene automáticamente el teléfono a medida que se une a nuevas redes. Si desea más control (por ejemplo, conectarse solo a una red específica), copie el wpa_supplicant.conf
archivo en algún lugar, modifíquelo según sea necesario y especifíquelo en la línea de comando.
wpa_supplicant -B -Dnl80211 -iwlan0 -c/data/misc/wifi/wpa_supplicant.conf
busybox pkill dhcpcd rm /data/misc/dhcp/* dhcpcd wlan0
busybox route
Para mí, esto muestra el valor predeterminado original primero en la lista (pasa por rm net_usb0
) seguido del nuevo configurado para la LAN inalámbrica wlan0
. Traceroute muestra el tráfico que sale por la primera.
Ahora, en este punto, si intenta habilitar wifi normalmente desde el teléfono, no funcionará. Para que funcione:
ifconfig wlan0 down ifconfig wlan0 unplumb rmmod wlan rmmod cfg80211
Y puedes volver a encender la conexión inalámbrica
Alternativamente con script:
# enable dual-networking:
pkill dhcpcd
svc wifi disable
svc data enable
netcfg wlan0 up
cd /data/misc/wifi/.
wpa_supplicant -B -Dnl80211 -iwlan0 -c/data/misc/wifi/wpa_supplicant.conf
dhcpcd wlan0
ip route add x.x.x.x via x.x.x.y # add any desired local route
# disable dual-networking:
ip route del x.x.x.x/x via x.x.x.y
pkill dhcpcd
pkill wpa_supplicant
rm -rf /data/misc/wifi/wlan0
netcfg wlan0 down
svc wifi disable
svc data disable
(Se necesita un ejecutor de scripts para ejecutar estos scripts y root; puede obtener uno aquí: SH Script Runner
Y señalaron:
Funciona perfectamente, pero tenga en cuenta que en realidad no ve que se encienda el ícono de wifi, pero si ejecuta, netcfg | grep UP
verá que la wlan0
interfaz está activa y funcionando (así como el rmnet_usb0 mobile data interface
, ambos estarán activos y tendrán la IP esperada) direcciones) y puede acceder a su LAN local mientras sus datos móviles 3g/4g proporcionan su ruta predeterminada al mundo exterior.
Los desarrolladores de la aplicación afirman que tiene la capacidad de realizar redes duales en dispositivos Android combinando redes 3G/4G y Wi-Fi.
Otra fuente: http://ironings4.rssing.com/chan-3701516/all_p2.html .
Proporcionó detalles sobre la creación de un script bash para modificar la tabla rotativa para permitir que tanto 3G como 4G funcionen con Wi-Fi. Aquí está el guión:
pkill com.android.phone sleep 30 route add -net 10.0.0.0 netmask 255.0.0.0 dev ppp0 route add -net 15.0.0.0 netmask 255.0.0.0 dev ppp0
Lo anterior es un ejemplo de un par de rangos de direcciones para redirigir a la conexión 3G a la tabla de enrutamiento a través del shell de Linux para usar INTRANET a través de ppp0
algunos rangos de direcciones, mientras que todas las demás direcciones de destino normalmente van a través de Wi-Fi.
El truco aquí es forzar una aplicación en el teléfono (o tal vez es un servicio called com.android.phone
) probablemente relacionada con la interfaz de radio 3G para que se bloquee mientras está conectado a wifi, el indicador de señal 3G se apagará durante unos segundos y poco después. volverá a la normalidad, pero esta vez con los íconos H (SDPA) y Wifi que se muestran en el área de notificación en la parte superior derecha de la pantalla.
Completamente citado:
“El objetivo del proyecto COIN es utilizar conexiones WiFi y 3G simultáneamente. Por lo tanto, entra en conflicto con la política del Servicio de conectividad, pero no hay una configuración para editar la política y está codificada de forma rígida. Puede encontrar la pista en ConnectivityService.java:handleConnect function.
Nuestra solución actual es bastante brutal, que consiste en enmascarar los ojos del Servicio de conectividad modificando su entrada del controlador de mensajes de la siguiente manera:
// must be stateless – things change under us.
private class MyHandler extends Handler {
@Override
public void handleMessage(Message msg) {
NetworkInfo info;
//added by COIN to disable Connectivity Service
int networkState = 8; //not any following state
/*use static google dns server for wifi and 3g*/
if (msg.what == NetworkStateTracker.EVENT_STATE_CHANGED) {
SystemProperties.set(“net.dns1″, “8.8.8.8″);
SystemProperties.set(“net.dns2″, “8.8.4.4″);
bumpDns();
}
//////////////////////////////////////////////
//switch (msg.what) {
switch (networkState) {
case NetworkStateTracker.EVENT_STATE_CHANGED:
info = (NetworkInfo) msg.obj;
int type = info.getType();
…..
And then compile the modified ConnectivityService.java in the android source code tree, you can get an new services.jar file in framework directory. Replace the existing services.jar on the cell phone with the following adb commands, then reboot the phone
adb shell “mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system”
adb shell “chmod 0777 /system/framework”
adb push services.jar /system/framework
adb shell “chmod 0644 /system/framework/services.jar”
adb shell “chmod 0755 /system/framework”
.”
Conclusión
Si bien no pude probar algunas de las soluciones yo mismo, aprendí que la mayoría de ellas podrían haber funcionado en versiones anteriores de Android (según la evidencia), por lo que no estoy seguro de si lo mismo es aplicable en Android 6. Es probable que esta función funcione. implementarse con tecnologías emergentes evidenciadas por la tecnología Multipath TCP descrita. Para todas las soluciones, se requiere root.
Espero que esto traiga algo de luz.
Referencias
(Incluido en el cuerpo del texto)
Brian Canard