How to get current cell signal strength?

后端 未结 2 768
盖世英雄少女心
盖世英雄少女心 2020-12-09 05:52

I would like to store the cell signal strength, and I do it like this:

private class GetRssi extends PhoneStateListener {
    @Override
    public void onSig         


        
相关标签:
2条回答
  • 2020-12-09 06:07

    CellSignalStrengthGsm() is added Added in API level 17

    CellSignalStrengthGsm().getDbm() will give you the signal strength as dBm

     private static String getSignalStrength(Context context) throws SecurityException {
        TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
        String strength = null;
        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) cellInfos.get(i);
                        CellSignalStrengthWcdma cellSignalStrengthWcdma = cellInfoWcdma.getCellSignalStrength();
                        strength = String.valueOf(cellSignalStrengthWcdma.getDbm());
                    } else if (cellInfos.get(i) instanceof CellInfoGsm) {
                        CellInfoGsm cellInfogsm = (CellInfoGsm) cellInfos.get(i);
                        CellSignalStrengthGsm cellSignalStrengthGsm = cellInfogsm.getCellSignalStrength();
                        strength = String.valueOf(cellSignalStrengthGsm.getDbm());
                    } else if (cellInfos.get(i) instanceof CellInfoLte) {
                        CellInfoLte cellInfoLte = (CellInfoLte) cellInfos.get(i);
                        CellSignalStrengthLte cellSignalStrengthLte = cellInfoLte.getCellSignalStrength();
                        strength = String.valueOf(cellSignalStrengthLte.getDbm());
                    } else if (cellInfos.get(i) instanceof CellInfoCdma) {
                        CellInfoCdma cellInfoCdma = (CellInfoCdma) cellInfos.get(i);
                        CellSignalStrengthCdma cellSignalStrengthCdma = cellInfoCdma.getCellSignalStrength();
                        strength = String.valueOf(cellSignalStrengthCdma.getDbm());
                    }
                }
            }
        }
        return strength;
    }
    

    Please note that above code will return strength of the last cell in the list.

    You can learn more from: https://developer.android.com/reference/android/telephony/CellInfo.html

    CellInfoCdma, CellInfoGsm, CellInfoLte, CellInfoWcdma are the subclasses of CellInfo. Which gives all information related to your mobile network.

    0 讨论(0)
  • 2020-12-09 06:22

    There is getAllCellInfo() method in TelephonyManager added in API 17 that could be good solution. Example of use:

    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();
    
    0 讨论(0)
提交回复
热议问题