2012-01-17 15 views
6

Quiero saber la intensidad de la señal de mi torre celular actual en Android. Después de un poco de investigación encontré, que debería usar un PhoneStateListener que escuchar una actualización para obtener el valor (forma extraña de hacer eso en mi humilde opinión).Detener el oyente después de la primera actualización

Así que quiero obtener la señal tan pronto como la obtenga y detener al oyente después. Este es el código que utilizo:

// object containing the information about the cell 
MyGSMCell myGSMCell = new MyGSMCell(cid,lac); 
// object listening for the signal strength 
new GetGsmSignalStrength(myGSMCell, context); 

... 

public class GetGsmSignalStrength { 

    private MyGSMCell callback; 
    private TelephonyManager telMan; 
    private MyPhoneStateListener myListener; 

    public GetGsmSignalStrength(MyGSMCell callback, Context context) { 
      this.callback = callback; 
      this.myListener = new MyPhoneStateListener(); 
      this.telMan = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); 
      this.telMan.listen(this.myListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS); 

    } 

    private class MyPhoneStateListener extends PhoneStateListener 
    { 
      public void onSignalStrengthsChanged(SignalStrength signalStrength) 
      { 
        // get the strength 
        super.onSignalStrengthsChanged(signalStrength); 
        // return it to the MyGSMCell object to set the value 
        callback.setStrength(signalStrength.getGsmSignalStrength()); 
      } 
    } 
} 

me gustaría dejar al oyente en cuanto me mando un setStrength(value)

Alguna idea?

Gracias

Respuesta

10

Desde el docs:

para anular el registro de un oyente, pase el objeto detector y establecer los hechos argumento para LISTEN_NONE (0).

Por lo tanto, añadir esto a su oyente:

telMan.listen(myListener, PhoneStateListener.LISTEN_NONE); 
+0

funciona bien, gracias –

Cuestiones relacionadas