2013-05-13 5 views
9

나는 셀 신호 강도를 저장하고 싶습니다 그리고 난 이런 식으로 작업을 수행합니다현재 셀 신호 강도를 얻는 방법?

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


    } 

} 

좋아하지만 그것을 변경하는 경우에만 실행됩니다. 현재 신호 강도가 필요합니다.

현재 신호 강도를 묻는 방법이 있습니까?

+1

앱을 시작할 때이 수신기를 등록하면 현재 신호 강도가 유지됩니다. 리스너가 다시 호출 할 때까지는 변경되지 않습니다.이 시점에서 강도를 저장하는 내부 변수를 업데이트 할 수 있습니다. – Ryan

+0

Ryan이 말한 것처럼 ... 현재 신호 강도를 추적하면 현재의 상태를 항상 알 수 있습니다! – Vorsprung

답변

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를 사용하여, 나는 여전히 대답 덕분에 투표. –

+2

API 레벨 8에 해당하는 코드가 있습니까? –

+7

그냥 머리가 위로 : 일부 장치 (당신을보고 삼성) getAllCellInfo() 제대로 구현하지 않는 null을 반환합니다 보인다. –

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; 
    } 

당신은 배울 수를 신호 강도를 줄 것이다에 추가 추가 more from : https://developer.android.com/reference/android/telephony/CellInfo.html

CellInfoCdma, CellInfoGsm, CellInfoLte, CellInfoWcdma는 CellInfo의 하위 클래스입니다. 모바일 네트워크와 관련된 모든 정보를 제공합니다.

+1

나를 위해 완벽하게 일했습니다. 방금'CellinfoCdma'에 대해서'if' 브랜치를 추가했습니다. – Minoru

관련 문제