当前位置: 首页 > 面试题库 >

从CellSignalStrengthLte获取适用于Android应用程序API的RSRP 17+

李兴庆
2023-03-14
问题内容

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

有谁知道如何使用telephonyManager或CellSignalStrengthLte获得RSRP?还是有另一种也许更好的方式来获得RSRP?

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

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

如果有人解决了这个问题或找到了答案(我到处都是!),请告诉我!


问题答案:

更新:

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


 类似资料:
  • 因此,我正在尝试对第三方 API 提供程序进行 API 调用。在我的nodejs应用程序中接收新令牌没有问题,但是当我尝试在get函数中使用它时,我只收到403错误。但是,如果我通过Postman获得令牌,它就可以正常工作(在应用程序中),这对我来说似乎很奇怪? 如果我尝试在Postman中的get调用中使用从nodejs应用程序获取的令牌,那也是一样的,它不会起作用。 我已经多次检查从我的nod

  • 我使用HTML5开发cordova跨平台应用程序 以前我使用的是Cordova 7,其中android版本为6.3,支持android API 16到26。但根据谷歌的新规则,从2019年8月开始,所有应用程序都必须针对Android API 28,即Android 8 Cordova的最新版本是Cordova 9,它支持Android 8。Cordova没有发布任何支持Android 9的版本。

  • 当我在Android手机上调试应用程序时,我绝对没有遇到任何错误,但在AVD上,我一开始就得到了一个NullPointerException()。我的Android设备在22 API的Lollipop(5.1.1)上运行,我的AVD在28 API的Pie(9.0)上运行。我在gradle中将最小SDK设置为21,编译SDK设置为28。 这是错误: E/AndroidRuntime:致命异常:主进程

  • 一个使用Jersey在Java中构建的方法,它接受两个参数并存储在数据库中,它可以和postman一起正常工作,但当我在Android应用程序中使用它时,它不起作用。我试图通过截击和改装发送请求。 服务器端代码: Android代码: 公共无效寄存器(最终字符串用户名、最终字符串密码){ 邮差回应 截击请求: 公共无效寄存器Volley(最终字符串用户名,最终字符串密码){

  • 我已经在谷歌云功能中构建了API。当我试图直接获取API时,会出现CORS错误。虽然我添加了,但失败了。 来自“http://localhost:3000”的“https://xxxxxxxx.com”已被CORS策略阻止:对飞行前请求的响应未通过访问控制检查:请求的资源上没有“access-control-allog-origin”标头。如果一个不透明的响应满足您的需要,请将请求的模式设置为“n

  • 我已经从谷歌阅读了这个标准描述:https://developer.android.com/training/sharing/receive 在此之后,我更新了我的AndroidManifest.xml,以包括一个意图过滤器来接受来自其他应用程序的共享(对于各种哑剧类型)。 我可以将我的应用程序视为其他应用程序中的共享选项,当我在其他应用程序中选择一个文件(例如,照片应用程序中的图像文件)并选择与