从CellSignalStrengthLte获取适用于Android应用API 17+的RSRP [英] Get RSRP from CellSignalStrengthLte for Android app API 17+

查看:2208
本文介绍了从CellSignalStrengthLte获取适用于Android应用API 17+的RSRP的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在过去十年中,有些人提出了类似的问题,但没有人有任何答案。我需要编写一个收集并存储RSRP,RSRQ,CINR和Cell ID的Android应用程序。答案需要与手机硬件允许的一样准确(我在三星Galaxy S5上进行测试),因为我需要使用这些值进行后期处理统计。

A few people over the past decade have asked similar questions but none have ANY answers. I need to write an android app that collects and stores RSRP, RSRQ, CINR, and Cell ID. The answers need to be as accurate as the phones hardware allows (I am testing on Samsung Galaxy S5) because I need to do post processing statistics with those values.

有谁知道如何使用telephonyManager或CellSignalStrengthLte获取RSRP?或者是否有另一种可能更好的方法来获得RSRP?

Does anyone know how to use telephonyManager or CellSignalStrengthLte to get RSRP? Or is there another, perhaps better way to get RSRP?

到目前为止,我能够做的最好的事情是使用PhoneStateListener和TelephonyManager来获取RSSI值,但RSSI对我的统计数据没用:

So far the best that I have been able to do is use a PhoneStateListener and TelephonyManager to get the RSSI values, but RSSI is useless for my statistics:

    package com.pscr.jparks.signalstrength;

    import android.app.Activity;
    import android.os.Bundle;
    import android.telephony.PhoneStateListener;
    import android.telephony.TelephonyManager;
    import android.widget.TextView;
    /*
    TS 27.007 8.5
    Defined values
    <rssi>:
    0 -113 dBm or less
    1 -111 dBm
    2...30 -109... -53 dBm
    31 -51 dBm or greater
    99 not known or not detectable
    */

    public class SignalStrengthActivity  extends Activity {

        SignalStrengthListener signalStrengthListener;
        TextView signalStrengthTextView;


        @Override
        public void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);

            //setup content stuff
            this.setContentView(R.layout.signal_strength);
            signalStrengthTextView = (TextView) findViewById(R.id.signalStrengthTextView);

            //start the signal strength listener
            signalStrengthListener = new SignalStrengthListener();
            ((TelephonyManager) getSystemService(TELEPHONY_SERVICE)).listen(signalStrengthListener, SignalStrengthListener.LISTEN_SIGNAL_STRENGTHS);
        }


        private class SignalStrengthListener extends PhoneStateListener {
            @Override
            public void onSignalStrengthsChanged(android.telephony.SignalStrength signalStrength) {

                // get the signal strength (a value between 0 and 31)
                int strengthAmplitude = signalStrength.getGsmSignalStrength();

                //do something with it (in this case we update a text view)
          signalStrengthTextView.setText(String.valueOf(strengthAmplitude));
          super.onSignalStrengthsChanged(signalStrength);
            }
        }
    }

如果有人解决了这个问题,或者找到了答案(我到处都看了!),请让我知道!

If anyone has solved this problem, or found an answer (I have looked everywhere!), please let me know!

推荐答案

更新:

TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
List<CellInfo> cellInfoList = tm.getAllCellInfo();
for (CellInfo cellInfo : cellInfoList)
{
    if (cellInfo instanceof CellInfoLte)
    {
        // cast to CellInfoLte and call all the CellInfoLte methods you need
        ((CellInfoLte)cellInfo).getCellSignalStrength().getDbm();
    }
}

这篇关于从CellSignalStrengthLte获取适用于Android应用API 17+的RSRP的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆