簡體   English   中英

Android:每秒獲取cdmaDbm

[英]Android : get cdmaDbm every second

對您來說,這只是一個簡單的問題,因為我找不到任何相關信息。 我只想每秒記錄一次CDMA信號強度

你有指針嗎?

我發現了很多示例,但是它們都使用了onSignalChange()方法,該方法實際上對我不起作用。

謝謝

好吧,我不確定這是否是您要查找的內容,但是在查看android源代碼中的SignalStrength.java文件后,我注意到了一些代碼,其中包含一堆cdma dbm和ecio級別的代碼。

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;

但我注意到這與通知中顯示的實際條形不相關。 如果在3G中,則忽略此級別,並使用信噪比。

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

如果數據從3G下降到1倍,則使用ActualLevel。

這是我的代碼,顯示顯示條數。

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


        }
    }

在on create方法中,請在下面使用此方法,並確保清單使用READ_PHONE_STATE。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM