Truco Android: acceder a los datos de la red wifi y telefonía

by Francho Joven

21 Nov 2010

. Comments

En algunos casos puede ser interesante conocer datos de la red que está usando. Las clases TelephonyManager y WifiManager nos facilitan conocer esta información.

El siguiente código hace uso de ellas para averiguar si la wifi está activada (y sus datos) así como información sobre la red telefónica que esta usando como el operador (MCC/MNC, nombre y país) o tipo de red.

También configura un botón que abre la configuración wifi del sistema.

[sourcecode lang="java"]
package org.francho.test.network;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.provider.Settings;
import android.telephony.TelephonyManager;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class NetworkTest extends Activity {
private TextView tInfo;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

// Al pulsar el boton lanzamos la configuración de wifi
Button configWifi = (Button) findViewById(R.id.botonConfigWifi);
configWifi.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(Settings.ACTION_WIFI_SETTINGS);
startActivity(i);
}
});

// Campo de texto donde mostraremos la info
tInfo = (TextView) findViewById(R.id.textoInfo);
}

@Override
public void onStart() {
super.onStart();

String info = "Wifi"+ "\n";

// Comprobamos si la wifi está activada o no
WifiManager wifiMan = (WifiManager) getSystemService(Context.WIFI_SERVICE);

if (wifiMan.isWifiEnabled()) {
info +="\t" + "Estado: activa "+"\n";

WifiInfo wifi = wifiMan.getConnectionInfo();
info +="\t" + wifi.toString().replace(", ", "\n\t");
} else {
info +="\t" + "Estado: inactiva"+ "\n";
}

// Averiguamos datos de la red telefónica
TelephonyManager tlfMan = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);

info +="\n" + "Telefonía: " + "\n";
info +="\t" + "Operador (MCC+MNC): " + tlfMan.getNetworkOperator() + "\n";
info +="\t" + "Nombre Operador: " + tlfMan.getNetworkOperatorName() + "\n";
info +="\t" + "Nº País: " + tlfMan.getNetworkCountryIso() + "\n";

switch (tlfMan.getNetworkType()) {
case TelephonyManager.NETWORK_TYPE_GPRS:
info +="\t" + "Tipo red: GPRS" + "\n";
break;
case TelephonyManager.NETWORK_TYPE_HSDPA:
info +="\t" + "Tipo red: HSDPA" + "\n";
break;
case TelephonyManager.NETWORK_TYPE_HSPA:
info +="\t" + "Tipo red: HSPA" + "\n";
break;
case TelephonyManager.NETWORK_TYPE_UMTS:
info +="\t" + "Tipo red: UMTS" + "\n";
break;
case TelephonyManager.NETWORK_TYPE_UNKNOWN:
info +="\t" + "Tipo red: desconocida " + "\n";
break;
default:
info +="\t" + "Tipo red: otra (" + tlfMan.getNetworkType() + ")\n";
}
tInfo.setText(info);
}
}
[/sourcecode]
Para que este código funcione deberemos declarar los siguientes permisos en el AndroidManifest
[sourcecode lang="xml"]
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
[/sourcecode]