3g 네트워크에서 현재 신호 강도와 현재 셀 ID 및 Lac을 내 응용 프로그램에 표시하려고합니다. API-8과 호환되어야하므로 android.telephony에서 SignalStrength 클래스를 사용하고 있습니다. 버튼을 클릭하면 현재 셀의 CID, Lac 및 신호 강도를 표시합니다. 나는 CID와 락을 얻고 있지만, 신호 강도는 항상 코드가 아래에 주어진다 0을 보여주고있다 : 나는 온라인으로 많은 예제를 확인하고 난 내 코드는 괜찮 생각내 PhoneStateListener가 신호 강도 표시에 호출되지 않습니다.
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에 들어 가지 않습니다. 내가 누락 된 것이 있습니까?
청취자를 등록 하시겠습니까? 권한이 있습니까? 그렇다면 'singalStrengths'를 정적으로 만들거나 환경 설정에 저장하는 것이 좋습니다. 심지어 그것은 최신 신호를 보여주지 않을 것입니다. http://stackoverflow.com/questions/3888775/instant-signal-strength –
글쎄, 오래 전부터 getRSSI() 메소드를 취소하고 listener 및 .getStrength()를 OnCreate() 내부에서 직접 처리하면 정상적으로 작동합니다. 그러나 솔직히 말해서 왜 아직도 잘 작동하는지 모르겠습니다. –
답변으로 게시 - 내가 왜 효과가 있었는지 모르겠다 - 당신이 만든 유일한 변화라고 확신합니까? –