我没有调用我的PhoneStateListener来显示信号强度

时间:2013-02-17 14:09:12

标签: java android location signal-strength 3g-network

我试图在我的3g网络应用中显示当前的信号强度和当前的小区ID和Lac。由于它必须兼容API-8,我使用的是android.telephony的SignalStrength类。当我点击一个按钮时,我现在希望它显示当前单元格的CID,Lac和信号强度。我得到了CID和lac,但信号强度始终显示为0.代码如下:

public void onClick(View v) {
    switch (v.getId()) {
    case R.id.bShowCell:
        GsmCellLocation location;
        String cellID = "";
        String lac = "";
        Context context = (Context) getApplicationContext();
        TelephonyManager tm = (TelephonyManager) context
                .getSystemService(Context.TELEPHONY_SERVICE);
        location = (GsmCellLocation) tm.getCellLocation();
        cellID = String.valueOf(location.getCid());
        lac = String.valueOf(location.getLac());
        CurCell.setText(cellID);
        CellLac.setText(lac);
        CurStrgth.setText(getRSSI());
    }
}

public String getRSSI() {
    MyListener = new MyPhoneStateListener();
    Tel = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
    Tel.listen(MyListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
    String strength = MyListener.getStrength();
    return strength;
}

class MyPhoneStateListener extends PhoneStateListener {

    public int singalStrengths;

    @Override
    public void onSignalStrengthsChanged(SignalStrength signalStrength) {
        super.onSignalStrengthsChanged(signalStrength);
        int asu = signalStrength.getGsmSignalStrength();
        singalStrengths = -113 + 2 * asu;
    }

    public String getStrength() {
        return String.valueOf(singalStrengths);
    }
}

我在网上查了很多例子,我觉得我的代码还可以。但是当我在调试模式下检查它时,我看到当我单击按钮时,程序永远不会进入onSignalStrengthsChanged。有什么我想念的吗?

1 个答案:

答案 0 :(得分:0)

嗯,这就是我以后尝试的方式,它运行良好。我必须使CurStrgth.setText()独立于Button并在PhoneStateListener中,并从OnCreate()方法调用侦听器。它工作正常,只要信号强度发生变化,就会更新CurStrgth TextView。我的代码如下:

public class MainActivity extends Activity implements OnClickListener {


TextView CurStrgth;
MyPhoneStateListener MyListener;
TelephonyManager Tel;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    CurStrgth = (TextView) findViewById(R.id.tvCurCellStrength);

    MyListener = new MyPhoneStateListener();

    Tel = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
    Tel.listen(MyListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);


}


@Override
protected void onPause() {
    super.onPause();
    Tel.listen(MyListener, PhoneStateListener.LISTEN_NONE);
}

@Override
protected void onResume() {
    super.onResume();
    Tel.listen(MyListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
}

private class MyPhoneStateListener extends PhoneStateListener {
    String gsmStrength = "";

    @Override
    public void onSignalStrengthsChanged(SignalStrength signalStrength) {
        super.onSignalStrengthsChanged(signalStrength);
            gsmStrength = String
                .valueOf(signalStrength.getGsmSignalStrength() * 2 - 113);
        CurStrgth.setText(MyListener.getStrength() + "dBm");
    }

    public String getStrength() {
        return gsmStrength;
    }

}
}

现在,我检查了调用

    CurStrgth.setText(MyListener.getStrength() + "dBm");

在按钮的OnClick()方法内部,它只显示一次值但是如果我稍后按下按钮它永远不会更新强度并继续显示初始值。