Juicio de conexión de red de Android y procesamiento de obtención de tipo de red

Para obtener información de la red, es necesario agregar los permisos correspondientes en el archivo AndroidManifest.xml.

1) Determinar si hay una conexión de red

public boolean isNetworkConnected(Context context) { if (context != null) { ConnectivityManager mConnectivityManager = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo(); if (mNetworkInfo != null) { return mNetworkInfo.isAvailable(); } } devuelve falso; }









2) Determinar si la red WIFI está disponible

public boolean isWifiConnected(Context context) { if (context != null) { ConnectivityManager mConnectivityManager = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo mWiFiNetworkInfo = mConnectivityManager .getNetworkInfo(ConnectivityManager.TYPE_WIFI); if (mWiFiNetworkInfo != null) { return mWiFiNetworkInfo.isAvailable(); } } devuelve falso; }










3) Determinar si la red MOBILE está disponible

public boolean isMobileConnected(Context context) { if (context != null) { ConnectivityManager mConnectivityManager = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo mMobileNetworkInfo = mConnectivityManager .getNetworkInfo(ConnectivityManager.TYPE_MOBILE); if (mMobileNetworkInfo != null) { return mMobileNetworkInfo.isAvailable(); } } devuelve falso; }










4) Obtenga la información del tipo de conexión de red actual Manager) Contexto .getSystemService
(context.connectivity_service) ;networkinfo mnetworkinfo = mconnectivityManager.getActualInfo ();););););;););););); ;););;););;);;); 1 ; GetActualNetWorkinfo ();). if (mNetworkInfo != null && mNetworkInfo.isAvailable()) { return mNetworkInfo.getType(); } } return -1 ; }









Al desarrollar una aplicación para Android, cuando se trata de acceso a la red, a menudo es necesario verificar el estado de la red para proporcionar a los usuarios los recordatorios necesarios. Generalmente, este trabajo se puede realizar a través de ConnectivityManager.

ConnectivityManager tiene cuatro tareas principales:

1. Supervise el estado de la red móvil (incluidos GPRS, WIFI, UMTS, etc.)

2. Cuando cambie el estado del teléfono móvil, envíe una transmisión

3. Conmutación por error cuando falla una conexión de red

4. Proporcione aplicaciones con un estado de alta precisión y granularidad gruesa de las redes disponibles

Cuando queremos monitorear el estado de la red en el programa, solo necesitamos seguir unos pocos pasos:

1. Defina un receptor para sobrecargar la función onReceive en él y complete las funciones requeridas en él, como cambiar la apariencia del espacio según si WIFI y GPRS están desconectados

receptor de conexión = nuevo receptor de difusión () {

@Override
public void onReceive(Context context, Intent intent) { ConnectivityManager connectMgr = (ConnectivityManager) getSystemService(CONECTIVITY_SERVICE); NetworkInfo mobNetInfo = connectMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); NetworkInfo wifiNetInfo = connectMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);


if (!mobNetInfo.isConnected() && !wifiNetInfo.isConnected()) {
 Log.i(TAG, "unconnect");
 // unconnect network
 }else {

// connect network
 }

}
};

2. Registre el receptor en un lugar apropiado, puede registrarse en el programa y llamar a la siguiente función en onCreate:

IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
registerReceiver(conexiónReceptor, intentFilter);

3. Cancele el registro del Receptor cuando corresponda, puede cancelarlo en el programa, simplemente llame a la siguiente función en onDestroye:

if (receptor de conexión! = nulo) { unregisterReceiver (receptor de conexión); }

PD: Hay muchas formas de usar TelephonyManager en Internet, el método es el siguiente (pero lo he intentado varias veces y hay problemas, como que cada vez que entro por primera vez a una Actividad, automáticamente recibo una señal de desconexión de la red, y cada vez que cambia el estado de la red Recibí múltiples devoluciones de llamada y el estado es incorrecto. No sé a qué prestar atención, ¡por favor avise!)

final TelephonyManager mTelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);

mTelephonyMgr.listen(nuevo PhoneStateListener(){

@Anular

public void onDataConnectionStateChanged(int state) {

cambiar (estado) {

case TelephonyManager.DATA_DISCONNECTED://La red está desconectada

romper;

case TelephonyManager.DATA_CONNECTING://La red se está conectando

romper;

case TelephonyManager.DATA_CONNECTED://conectado a la red

romper;

}

}

}, PhoneStateListener.LISTEN_DATA_CONNECTION_STATE);

En cuanto al segundo método, no lo he probado. El primer método sigue siendo relativamente fácil de usar.Si desea que el programa se oculte en segundo plano, se recomienda abrir un servicio y registrar BroadcastReceiver en el servicio, pero no olvide cancelar el registro.

Me encontré con una situación así en la prueba, un dispositivo de enrutamiento que actualmente está conectado a wifi está apagado, pero el programa no captura la red desconectada, probablemente porque el dispositivo móvil se conecta inmediatamente a otro dispositivo de enrutamiento.

Estado de la red de monitoreo de Android

public static boolean isNetworkAvailable(Context context) { ConnectivityManager conectividad = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); if (conectividad == nulo) { Log.i(“NetWorkState”, “No disponible”); falso retorno; } más { NetworkInfo[] info = conectividad.getAllNetworkInfo(); if (info != null) { for (int i = 0; i < info.length; i++) { if (info[i].getState() == NetworkInfo.State.CONNECTED) { Log.i(“NetWorkState” , “Disponible”); devolver verdadero; } } } } devuelve falso; }
















El método anterior es el código para juzgar si la red está conectada, devolver verdadero para indicar que hay una red y devolver falso para indicar que no hay red. En el desarrollo de aplicaciones de red de Android, a menudo es necesario determinar si la conexión de red está disponible, por lo que a menudo es necesario monitorear los cambios en el estado de la red. El monitoreo del estado de la red de Android puede usar BroadcastReceiver para recibir transmisiones de cambios de estado de la red. La implementación específica es la siguiente:
@Override
public void onReceive(Context context, Intent intent) { Log.e(TAG, "Network Status Change");

éxito booleano = falso;

//Obtener el servicio de conexión de red
ConnectivityManager connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
// State state = connManager.getActiveNetworkInfo().getState();
State state = connManager.getNetworkInfo(
ConnectivityManager.TYPE_WIFI).getState(); // Obtener el estado de conexión de la red
si (Estado.CONECTADO == estado) { // Determinar si se está utilizando la red WIFI
éxito = verdadero;
}

state = connManager.getNetworkInfo(
ConnectivityManager.TYPE_MOBILE).getState(); // Obtener el estado de conexión de la red
if (State.CONNECTED != state) { // Determinar si se está utilizando la red GPRS
success = true;
}

if (!success) { Toast.makeText(LocationMapActivity.this, "Su conexión de red ha sido interrumpida", Toast.LENGTH_LONG).show(); }

}

En Actividad onCreate:

//Registrar monitoreo de red
IntentFilter filter = new IntentFilter();
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
registerReceiver(mNetworkStateReceiver, filter);
//In onDestroy in Activity:'

unregisterReceiver(mNetworkStateReceiver); //Cancelar monitoreo

Muchos amigos encontrarán juicios sobre el tipo de red de telefonía móvil durante el desarrollo de Android, porque en lo que respecta a la plataforma actual de Android: puede haber 4 estados

  1.无网络(这种状态可能是因为手机停机,网络没有开启,信号不好等原因)

  2.使用WIFI上网

  3.CMWAP(中国移动代理)

  4.CMNET上网

El siguiente es el método de juicio de la red:

  • Obtenga el estado actual de la red -1: sin red 1: red WIFI 2: red wap 3: red neta

    public static int getAPNType (contexto contexto) {

     int netType = -1;  
    
     ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    
     NetworkInfo networkInfo = connMgr.getActiveNetworkInfo(); 
    
      
    
     if(networkInfo==null){ 
    
         return netType; 
    
     } 
    
     int nType = networkInfo.getType(); 
    
     if(nType==ConnectivityManager.TYPE_MOBILE){ 
    
         Log.e("networkInfo.getExtraInfo()", "networkInfo.getExtraInfo() is "+networkInfo.getExtraInfo()); 
    
         if(networkInfo.getExtraInfo().toLowerCase().equals("cmnet")){ 
    
             netType = CMNET; 
    
         } 
    
         else{ 
    
             netType = CMWAP; 
    
         } 
    
     } 
    
     else if(nType==ConnectivityManager.TYPE_WIFI){ 
    
         netType = WIFI; 
    
     } 
    
     return netType; 
    

    }

Supongo que te gusta

Origin blog.csdn.net/hongranzuoxiang/article/details/110389948
Recomendado
Clasificación