2009-12-27 12 views
20

Estoy tratando de 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 obtener la fortaleza de la señal del servicio celular en Android?

¿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); 
+0

agradable una d easy [tutorial] (http://www.firstdroid.com/2010/05/12/get-provider-gsm-signal-strength/) – mjosh

Respuesta

19

crear un PhoneStateListener y manejar 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.

+0

¿Funciona esto en 3.x y 4.x? – Supuhstar

+0

Cualquier solución para 4.x - 8.x? – gtzinos

13

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 teléfono Estado de escucha, registrarlo con el Administrador de telefonía utilizando una máscara de bits para indicar los eventos que desea escuchar, como se muestra en la 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, necesitará añadir estos a AndroidManifest.xml:

<uses-permission android:name="android.permission.READ_PHONE_STATE"/> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
Cuestiones relacionadas