0

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に入らないことがわかりました。足りないものはありますか?

4

1 に答える 1

0

まあ、これは私が後で試した方法であり、それはうまくいきました。CurStrgth.setText()をButtonから独立させ、PhoneStateListener内で作成し、OnCreate()メソッドからリスナーを呼び出す必要がありました。また、正常に動作し、信号強度が変化するたびにCurStrgthTextViewを更新します。私のコードを以下に示します。

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()メソッド内で、値は1回だけ表示されますが、後でボタンを押すと、Strengthは更新されず、初期値が表示され続けます。

于 2013-07-08T15:30:24.890 に答える