2012-09-26 11 views
8

Creé un BroadcastReceiver que escucha un evento CONNECTIVITY_CHANGE. Por ahora, simplemente imprimo la acción del Intent que llama al BroadcastReceiver y sus extras. Estoy usando un teléfono de prueba en nuestra oficina aquí en Manila y la tarjeta SIM es de Dinamarca. Cuando se invoca onReceive(), esto es lo que se imprime en LogCat:Detectando cuando el roaming está desactivado en Android

action: android.net.conn.CONNECTIVITY_CHANGE 
key: extraInfo, value: data.tre.dk 
key: htcCurrentActiveNetwork, value: null 
key: networkInfo, value: null 
key: reason, value: roamingOn 
key: noConnectivity, value: null 
key: inetCondition, value: null 

Necesito saber cuál es el valor de reason es cuando la itinerancia se apaga - podría ser roamingOff adivinando, pero no puede saber seguro, a menos que vaya a Dinamarca. Esto se debe a que tengo que realizar una tarea cuando el servicio de itinerancia se apaga, y noté por LogCat que el evento CONNECTIVITY_CHANGE se activó por motivos distintos a alternar entre los modos de itinerancia. ¿O hay una forma mejor de detectar cuando el roaming está desactivado?

Código para el receptor de radiodifusión:

public void onReceive(Context context, Intent intent) { 
    Log.d(This.LOGTAG, "action: " + intent.getAction()); 
    Bundle extras = intent.getExtras(); 
    for (String key : extras.keySet()) { 
     Log.d(This.LOGTAG, "key: " + key + ", value: " + extras.getString(key)); 
    } 
} 

entrada de manifiesto:

<receiver android:name=".listener.RoamingListener"> 
    <intent-filter> 
     <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
    </intent-filter> 
</receiver> 

Respuesta

1

Hay una diferencia entre la itinerancia de datos y la red de itinerancia.

En general, el roaming de red le permite a su compañía de telecomunicaciones pasar por satélites de terceros mientras se encuentra fuera del país para que pueda permanecer conectado a sus servicios. Incluso si ya le dijo a su compañía de telecomunicaciones que desea suscribirse al roaming de la red, NO se activará hasta que realmente comience a conectarse a través de satélites de telecomunicaciones de terceros, y eso solo ocurre cuando usted está realmente fuera del país.

La itinerancia de datos es simplemente permitir/no permitir que su dispositivo consuma datos móviles mientras se encuentra en el modo de itinerancia de la red. Es más dependiente del dispositivo y puedes activarlo o desactivarlo fácilmente en la aplicación de configuración del teléfono.

En resumen, si desea detectar el roaming de la red, use TelephonyManager.isNetworkRoaming(). Si desea verificar si la itinerancia de datos está activada o desactivada, use Settings.Secure.getInt(getContentResolver(), Settings.Secure.DATA_ROAMING).

IMPORTANTE: No he probado personalmente los siguientes escenarios y no estoy seguro de qué valor devolverá isNetworkRoaming().

  1. No le indicó a su compañía de telecomunicaciones doméstica que active el roaming de la red, pero cuando llegó a otro país, el teléfono comenzó a detectar otras redes de telecomunicaciones.
  2. Después del escenario 1, su teléfono le pide que elija a cuál de las redes de telecomunicaciones detectadas se debe conectar. Usted elige uno y el teléfono intenta conectarse. No sé qué valor va a devolver isNetworkRoaming() aquí porque, en primer lugar, no se suscribió al roaming de la red.
0

Usted puede simplemente utilizar esta línea para la detección de estado de itinerancia:

Settings.Secure.getInt(getContentResolver(), Settings.Secure.DATA_ROAMING) 

Este gama s no necesita ningún permiso o receptor especial.

Source

+0

Acabo de registrar el resultado de esa línea junto con el resultado de 'TelephonyManager.isNetworkRoaming()'.Descubrí que 'Settings.Secure.DATA_ROAMING' puede devolver un' 0' (es decir, el roaming de datos está desactivado) mientras que 'isNetworkRoaming()' es 'true'. Supongo que esto se debe a que la compañía de telecomunicaciones aún se encuentra en el modo de itinerancia de la red, pero no estoy permitiendo que mi dispositivo use Internet móvil. Parecen ser conmutadores diferentes, y estoy buscando el modo de roaming de la red. –

+0

¿Y qué quieres saber? Supongo que 'TelephonyManager.isNetworkRoaming()' muestra que estás en roaming, y la configuración muestra si puedes usar Internet en roaming – Jin35

+0

Estoy buscando el modo roaming de la red porque estoy tratando de medir la próxima factura mensual del usuario-- y eso incluye no solo la cantidad de datos móviles enviados/recibidos a través del roaming de datos. –

Cuestiones relacionadas