2013-05-13 111 views
9

我想存储单元格的信号强度,我不喜欢这样写道:如何获得当前的细胞信号强度?

private class GetRssi extends PhoneStateListener { 
    @Override 
    public void onSignalStrengthsChanged(SignalStrength signalStrength) { 
     super.onSignalStrengthsChanged(signalStrength); 
     Variables.signal = signalStrength.getGsmSignalStrength(); 


    } 

} 

好,但这只有当它改变运行。我需要当前的信号强度。

有没有一种方法来询问当前的信号强度?

+1

如果您在应用程序启动时注册该监听器,则您具有当前的信号强度。它不会改变,直到您再次被听众调用,您可以更新存储强度的内部变量。 – Ryan 2013-05-13 19:35:16

+0

像Ryan说的...如果你跟踪当前的信号强度,那么你将永远知道它目前是什么! – Vorsprung 2013-05-13 19:51:38

回答

15

在API 17中添加了TelephonyManager中的getAllCellInfo()方法,这可能是一个很好的解决方案。使用示例:

TelephonyManager telephonyManager = (TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE); 
// for example value of first element 
CellInfoGsm cellinfogsm = (CellInfoGsm)telephonyManager.getAllCellInfo().get(0); 
CellSignalStrengthGsm cellSignalStrengthGsm = cellinfogsm.getCellSignalStrength(); 
cellSignalStrengthGsm.getDbm(); 
+1

好,但我使用较低的API,我仍然投票答复谢谢。 – 2013-05-15 13:39:56

+2

是否有API级别8的等效代码? – 2013-06-03 15:57:14

+7

只是抬头:似乎有些设备(看着你三星)没有正确实现getAllCellInfo()并且会返回null。 – 2013-11-19 13:29:48

11

CellSignalStrengthGsm()被添加在API级别17

CellSignalStrengthGsm()getDbm()会给你的信号强度dBm的

TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); 

List<CellInfo> cellInfos = telephonyManager.getAllCellInfo(); //This will give info of all sims present inside your mobile 
if(cellInfos!=null){ 
    for (int i = 0 ; i<cellInfos.size(); i++){ 
      if (cellInfos.get(i).isRegistered()){ 
       if(cellInfos.get(i) instanceof CellInfoWcdma){ 
        CellInfoWcdma cellInfoWcdma = (CellInfoWcdma) telephonyManager.getAllCellInfo().get(0); 
        CellSignalStrengthWcdma cellSignalStrengthWcdma = cellInfoWcdma.getCellSignalStrength(); 
        strength = String.valueOf(cellSignalStrengthWcdma.getDbm()); 
       }else if(cellInfos.get(i) instanceof CellInfoGsm){ 
        CellInfoGsm cellInfogsm = (CellInfoGsm) telephonyManager.getAllCellInfo().get(0); 
        CellSignalStrengthGsm cellSignalStrengthGsm = cellInfogsm.getCellSignalStrength(); 
        strength = String.valueOf(cellSignalStrengthGsm.getDbm()); 
       }else if(cellInfos.get(i) instanceof CellInfoLte){ 
        CellInfoLte cellInfoLte = (CellInfoLte) telephonyManager.getAllCellInfo().get(0); 
        CellSignalStrengthLte cellSignalStrengthLte = cellInfoLte.getCellSignalStrength(); 
        strength = String.valueOf(cellSignalStrengthLte.getDbm()); 
       } 
      } 
     } 
     return strength; 
    } 

你可以学习。更多来自: https://developer.android.com/reference/android/telephony/CellInfo.html

CellInfoCdma,CellInfoGsm,CellInfoLte,CellInfoWcdma是CellInfo的子类。其中提供了与您的移动网络相关的所有信息。

+1

完全适合我。我也为'CellinfoCdma'添加了'if'分支。 – Minoru 2016-09-13 16:23:56