2012-03-01 13 views
6

¿Cómo se inicia la conexión de datos 3G en Android al mismo tiempo que está activada la conexión WiFi? ProbéInicio manual de la conexión 3G en Android y manteniéndolo en

IConnectivityManager.setMobileDataEnabled(enabled); // via reflection 

y funciona en el emulador, pero en mi teléfono real (Droid 2), se convierte brevemente luego de vuelta otra vez.

Desde el shell (adb shell), ip link proporciona los detalles de la conexión 3G:

15: ppp0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 3 link/ppp

Sin embargo, sólo está disponible cuando WiFi está apagado. Cuando WiFi está encendido y trato de encenderlo manualmente, se queja de que el dispositivo ppp0 no existe.

bash-3.2# ip link set ppp0 up 
ip link set ppp0 up 
Cannot find device "ppp0" 

Cuando intento para enumerar el dispositivo, ni siquiera puedo encontrar

bash-3.2# ls /dev/ppp* 
ls /dev/ppp* 
/dev/ppp 
+0

Tengo la sensación de que tendrá que cross-compilar un programa en C para convertir de forma nativa en la radio. Simplemente no puedo obtener una instancia de un objeto Java ConnectivityService para probar otras varias llamadas a métodos a nivel de aplicación. – Chloe

Respuesta

0

podría intentar mantener ambos activos al mismo tiempo, mediante la modificación de su connectivityservice, pero me gustaría consejos en su contra, ya que lo más probable es que destruya la duración de la batería.

Ver here si quieres darle una oportunidad de todos modos (y asegúrese de que tiene una copia de seguridad, obviamente)

+0

Gracias, lo vi, pero tiene que ser desplegable y funcionar para (la mayoría) del teléfono de todos. – Chloe

+0

El problema es que esto es estándar en Android (ciertos teléfonos pueden tener ambos activos al mismo tiempo, pero la mayoría de los teléfonos no). Así que tendrías que encontrar una forma de sobreescribir el código de Android en tu aplicación (de lo que no estoy seguro si es posible) – Andreas

+0

Sé que es posible porque he visto que las aplicaciones de tether lo hacen. Solo necesito activarlos para tener un host de interfaz multi-ip, pero sin el bridge. – Chloe

0

Si usted está tratando de conectarse a una máquina específica se puede tratar ConnectivityManager.requestRouteToHost.

+0

Naa Lo intenté. No enciende la radio y asigna una IP. Necesito acceso a cualquier host, no solo uno específico de todos modos. – Chloe

2

Según tengo entendido, no es posible conectar simultáneamente 3g y WiFi sin modificar el código fuente de la plataforma Android (al menos las versiones 2.3 y 4). El principal problema es hardcoded prioridades de conexiones definidas en frameworks/base/core/res/res/values/config.xml:

<!-- This string array should be overridden by the device to present a list of network 
attributes. This is used by the connectivity manager to decide which networks can coexist 
based on the hardware --> 
    <!-- An Array of "[Connection name],[ConnectivityManager connection type], 
[associated radio-type],[priority] --> 
<!--     ^^^^^^^^^^---------- Connection priority --> 

    <string-array translatable="false" name="networkAttributes"> 
     <item>"wifi,1,1,1"</item> 
     <item>"mobile,0,0,0"</item> 
     <item>"mobile_mms,2,0,2"</item> 
     <item>"mobile_supl,3,0,2"</item> 
     <item>"mobile_hipri,5,0,3"</item> 
    </string-array> 

Este config.xml se lee a continuación, por ConnectivityService que está suscrito para conectar/desconectar los eventos. Y en manejador de conexión que decide lo que debe hacer con otras conexiones:

private void handleConnect(NetworkInfo info) { 

     //------------8-<-------------------------- 

     // if this is a default net and other default is running 
     // kill the one not preferred 
     if (mNetAttributes[type].isDefault()) { 
      if (mActiveDefaultNetwork != -1 && mActiveDefaultNetwork != type) { 
       if ((type != mNetworkPreference && 
         mNetAttributes[mActiveDefaultNetwork].mPriority > 
         //         ^^^^^^^^^ --- From config.xml 
         mNetAttributes[type].mPriority) || 
         //     ^^^^^^^^^-------- From config.xml 
         mNetworkPreference == mActiveDefaultNetwork) { 
         // don't accept this one 
         if (DBG) Slog.v(TAG, "Not broadcasting CONNECT_ACTION " + 
           "to torn down network " + info.getTypeName()); 
         teardown(thisNet); 
         return; 
      //------------8-<-------------------------- 
Cuestiones relacionadas