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