在看到question和答案(顺便说一句)之后,我编写了这段代码,与答案中的基本相同:
try {
List<CellInfo> cellInfoList = telephonyManager.getAllCellInfo();
for (CellInfo cellInfo : cellInfoList) {
if (cellInfo instanceof CellInfoGsm) {
CellInfoGsm cellInfoGsm = (CellInfoGsm) cellInfo;
CellIdentityGsm cellIdentity = cellInfoGsm.getCellIdentity();
final CellSignalStrengthGsm gsm = ((CellInfoGsm) cellInfo).getCellSignalStrength();
rsrpValue = gsm.getDbm();
pciValue = cellIdentity.getCid();
} else if (cellInfo instanceof CellInfoCdma) {
CellInfoCdma cellInfoCdma = (CellInfoCdma) cellInfo;
CellIdentityCdma cellIdentity = cellInfoCdma.getCellIdentity();
pciValue = cellIdentity.getBasestationId();
} else if (cellInfo instanceof CellInfoLte){
CellInfoLte cellInfoLte = (CellInfoLte) cellInfo;
CellIdentityLte cellIdentity = cellInfoLte.getCellIdentity();
pciValue = cellIdentity.getPci();
} else {
throw new Exception("Unknown type of cell signal!");
}
}
} catch (Exception e) {
Log.e(TAG, "Unable to obtain cell signal information", e);
}但是当我为GSM显示rsrpValue或pciValue时,我总是得到最大整数值(2147483647)。我用API 17在手机上试了一下。我的代码有什么问题吗?
谢谢
发布于 2013-11-19 17:11:55
尝试使用好的老PhoneStateListener来监听信号强度的变化。这就是对我有用的东西。使用此选项注册侦听器:
private TelephonyManager telManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
int currentSignalStrength = 0;
int asu = 0;
telManager.listen(new SignalStrengthListener(), PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);这是真正的听者:
private class SignalStrengthListener extends PhoneStateListener{
@Override
public void onSignalStrengthsChanged(SignalStrength signalStrength)
{
super.onSignalStrengthsChanged(signalStrength);
if (telManager.getPhoneType()== TelephonyManager.PHONE_TYPE_CDMA)
currentSignalStrength = signalStrength.getCdmaDbm();
else
asu = signalStrength.getGsmSignalStrength();
}
}在使用CellInfoGsm存在相同问题的Xperia上进行了测试。
https://stackoverflow.com/questions/19840487
复制相似问题