2012-02-27 6 views
10

मैं सीडीएमए उपकरणों के लिए सिग्नल शक्ति की जांच कर रहा हूं। क्या कोई सीमा signalStrength.getCdmaDbm() रिटर्न निर्दिष्ट कर सकता है? सबसे कम -120 है लेकिन पूर्ण सिग्नल शक्ति के लिए मूल्य क्या है? मुझे सबसे ज्यादा मिला -52।सीडीएमए उपकरणों के लिए डीबीएम में सिग्नलस्टेंथथ के लिए रेंज

उत्तर

16

अच्छी तरह से मुझे यकीन नहीं है कि यह वही है जो आप खोज रहे हैं लेकिन एंड्रॉइड स्रोत में सिग्नलस्टेंथ.जेवा फ़ाइल को देखने के बाद मैंने थोड़ा सा कोड देखा जिसमें सीडीएमए डीबीएम और ईसीओ स्तरों के स्तर का एक गुच्छा है।

DBM 
level 4 >= -75 
level 3 >= -85 
level 2 >= -95 
level 1 >= -100 

Ecio 
level 4 >= -90 
level 3 >= -110 
level 2 >= -130 
level 1 >= -150 

और स्तर दो

actualLevel = (levelDbm < levelEcio) ? levelDbm : levelEcio; 

के सबसे कम है, लेकिन मैंने देखा है कि यह वास्तविक अधिसूचना में दिखा सलाखों से संबद्ध हों नहीं है। यदि 3 जी में तो इस स्तर को नजरअंदाज कर दिया जाता है और शोर से शोर अनुपात का उपयोग किया जाता है।

signalStrength.getEvdoSnr() // value is 0 to 8 so divide by two to get the bars 

यदि डेटा 3 जी से 1x तक गिरता है तो वास्तविक लेवल का उपयोग करें।

यह बार कोड की संख्या दिखाने के लिए मेरा कोड था।

public void onSignalStrengthsChanged(SignalStrength signalStrength) { 
     super.onSignalStrengthsChanged(signalStrength); 
     if (signalStrength.isGsm()) { 
      if (signalStrength.getGsmSignalStrength() != 99) 
       signalStrengthValue = signalStrength.getGsmSignalStrength() * 2 - 113; 
      else 
       signalStrengthValue = signalStrength.getGsmSignalStrength(); 
     } else { 
      final int snr = signalStrength.getEvdoSnr(); 
      final int cdmaDbm = signalStrength.getCdmaDbm(); 
      final int cdmaEcio = signalStrength.getCdmaEcio(); 
      int levelDbm; 
      int levelEcio; 
      int level = 0; 

      if (snr == -1) { 
       if (cdmaDbm >= -75) levelDbm = 4; 
       else if (cdmaDbm >= -85) levelDbm = 3; 
       else if (cdmaDbm >= -95) levelDbm = 2; 
       else if (cdmaDbm >= -100) levelDbm = 1; 
       else levelDbm = 0; 

       // Ec/Io are in dB*10 
       if (cdmaEcio >= -90) levelEcio = 4; 
       else if (cdmaEcio >= -110) levelEcio = 3; 
       else if (cdmaEcio >= -130) levelEcio = 2; 
       else if (cdmaEcio >= -150) levelEcio = 1; 
       else levelEcio = 0; 

       level = (levelDbm < levelEcio) ? levelDbm : levelEcio; 
      } else { 
       if (snr == 7 || snr == 8) level =4; 
       else if (snr == 5 || snr == 6) level =3; 
       else if (snr == 3 || snr == 4) level = 2; 
       else if (snr ==1 || snr ==2) level =1; 

      } 

      text.setText("Bars= " + level); 


     } 
    } 
इस नीचे पर बनाने के विधि प्रयोग में

, और यह भी सुनिश्चित प्रकट कर READ_PHONE_STATE उपयोग करता है।

TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); 
    AndroidPhoneStateListener phoneStateListener = new AndroidPhoneStateListener(text); 
    telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS); 
+0

क्या होगा यदि फोन जीएसएम है। परिवर्तनीय "सिग्नलस्टेंथवैल्यू" डीबीएम मान है। ईसीआईओ मूल्य की गणना कैसे करें? – MCGBra

संबंधित मुद्दे