android - triangulacion - programa para ubicar antenas de celulares
¿Cómo obtener la fortaleza de la señal del servicio celular en Android? (2)
Intento escribir una aplicación de Android muy simple que verifique la intensidad de la señal de la celda actual. Hasta ahora, solo he encontrado algo llamado getNeighboringCellInfo()
, pero no estoy seguro si eso incluye la celda actual.
¿Cómo obtengo la intensidad de la señal de la celda ACTUAL en Android?
¿ getNeighborCellInfo()
obtiene la celda actual? No parece estar basado en los resultados que he podido obtener con él. Aquí está mi código actual:
List<NeighboringCellInfo> n = tm.getNeighboringCellInfo();
//Construct the string
String s = "";
int rss = 0;
int cid = 0;
for (NeighboringCellInfo nci : n)
{
cid = nci.getCid();
rss = -113 + 2*nci.getRssi();
s += "Cell ID: " + Integer.toString(cid) + " Signal Power (dBm): " +
Integer.toString(rss) + "/n";
}
mainText.setText(s);
Este código puede ayudar:
PhoneStateListener phoneStateListener = new PhoneStateListener() {
public void onCallForwardingIndicatorChanged(boolean cfi) {}
public void onCallStateChanged(int state, String incomingNumber) {}
public void onCellLocationChanged(CellLocation location) {}
public void onDataActivity(int direction) {}
public void onDataConnectionStateChanged(int state) {}
public void onMessageWaitingIndicatorChanged(boolean mwi) {}
public void onServiceStateChanged(ServiceState serviceState) {}
public void onSignalStrengthChanged(int asu) {}
};
Una vez que haya creado su propio receptor de estado de teléfono, insértelo en el administrador de telefonía con una máscara de bits para indicar los eventos que desea escuchar, como se muestra en el siguiente fragmento de código:
TelephonyManager telephonyManager = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
telephonyManager.listen(phoneStateListener,
PhoneStateListener.LISTEN_CALL_FORWARDING_INDICATOR |
PhoneStateListener.LISTEN_CALL_STATE |
PhoneStateListener.LISTEN_CELL_LOCATION |
PhoneStateListener.LISTEN_DATA_ACTIVITY |
PhoneStateListener.LISTEN_DATA_CONNECTION_STATE |
PhoneStateListener.LISTEN_MESSAGE_WAITING_INDICATOR |
PhoneStateListener.LISTEN_SERVICE_STATE |
PhoneStateListener.LISTEN_SIGNAL_STRENGTH);
Además, necesita agregar estos a AndroidManifest.xml:
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
crea un PhoneStateListener y maneja la devolución de llamada onSignalStrengthChanged. Cuando su aplicación se inicializa, debe darle una notificación inicial. Esto está en 1.x. en 2.x, hay un issue abierto sobre esto.