2013-05-13 3 views
9

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

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


    } 

} 

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

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

+1

Если вы регистрируете этот прослушиватель, когда ваше приложение запускается, у вас есть сила тока. Он не изменится, пока вы не вызовете слушателем снова, в этот момент вы сможете обновить внутреннюю переменную, сохраняющую силу. – Ryan

+0

Как говорит Райан ... если вы будете отслеживать текущую силу сигнала, тогда вы всегда будете знать, что это такое! – Vorsprung

ответ

15

В TelephonyManager добавлен метод getAllCellInfo() в 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(); 
+1

Хороший, но я использую более низкую апи, я все еще проголосовал за ответ спасибо. –

+2

Есть ли эквивалентный код для уровня API 8? –

+7

Просто хедз-ап: Кажется, что некоторые устройства (глядя на вас, Samsung) неправильно реализуют getAllCellInfo() и возвращают null. –

11

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

+1

Работал идеально для меня. Я просто добавил ветку 'if' для' CellinfoCdma'. – Minoru

Смежные вопросы