Как получить текущую силу сигнала ячейки?

Я хотел бы сохранить силу сигнала ячейки, и я делаю это так:

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


    }

}

Хорошо, но это работает, только если оно меняется. Мне нужен текущий уровень сигнала.

Есть ли способ просто спросить текущий уровень сигнала?

Ответ 1

Есть метод getAllCellInfo() в TelephonyManager, добавленный в API 17, который может быть хорошим решением. Пример использования:

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();

Ответ 2

Добавлен CellSignalStrengthGsm() Добавлен в уровень API 17

CellSignalStrengthGsm(). getDbm() даст вам силу сигнала как дБм

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. Которая предоставляет всю информацию, связанную с вашей мобильной сетью.