标签: cellinfo

Android TelephonyManager requestCellInfoUpdate 返回 API 29 上的过时数据

一段时间以来,我在使用 Android 的 TelephonyManager 时遇到了问题。我们使用 TelephonyManager 进行电话信号实时测量,但在尝试升级到 API 29 时,它已成为一个问题。在 API 28 及以下版本中,我们只需用来TelephonyManager.allCellInfo从设备获取所有单元格信息,它就可以完美运行。但是,如果您以 API 29 为目标并使用上面相同的代码,那么读数就不会改变。它们通常会在您每次请求时发生变化,即使只是稍微像从 -98 到 -99 的信号变化。

我发现在 API 29 上,该过程必须与 Android 文档中所解释的有所不同。 https://developer.android.com/reference/android/telephony/TelephonyManager#requestCellInfoUpdate(java.util.concurrent.Executor,%20android.telephony.TelephonyManager.CellInfoCallback)

文档中的措辞如下:“针对 Android Q 或更高版本的应用程序将不再通过调用此 API 来触发缓存的 CellInfo 的刷新。相反,这些应用程序将收到最新的缓存结果,该结果可能不是最新的。针对 Android 的应用程序希望请求更新的 CellInfo 的 Q 或更高版本应调用 requestCellInfoUpdate();但是,在所有情况下,更新都会受到速率限制并且无法保证。要确定 CellInfo 数据的新近度,调用者应检查 CellInfo#getTimeStamp()。

因此使用TelephonyManager.allCellInfo不再触发数据刷新。相反,我使用TelephonyManager.requestCellInfoUpdate并使用了回调。我用来解决这个问题的代码如下。
注意,这是 Kotlin,但同样适用于 Java。

val tm: TelephonyManager = context.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager

tm.requestCellInfoUpdate(context.mainExecutor, object : CellInfoCallback() {
    override fun onCellInfo(activeCellInfo: MutableList<CellInfo>) {
        for (cellInfo in activeCellInfo) {
            val timeStamp = …
Run Code Online (Sandbox Code Playgroud)

android rate-limiting telephonymanager kotlin cellinfo

7
推荐指数
0
解决办法
1624
查看次数

收集 5G 蜂窝数据(新无线电)

在做了一些挖掘之后,我发现谷歌源代码包含与 NR(新无线电)相关的 5G 信息。有趣的是,这些更改在 dev 或 pie-dev 上不可用,但在 master 分支上可用!

电话经理包括 5g https://android.googlesource.com/platform/frameworks/base/+/master/telephony/java/android/telephony/TelephonyManager.java

5g 的 CellInfo 类 https://android.googlesource.com/platform/frameworks/base/+/master/telephony/java/android/telephony/CellInfoNr.java

5g电话类列表:

  • CellIdentityNr.java

  • CellInfoNr.java

  • CellSignalStrengthNr.java

我希望我的应用程序在第一部 5G 手机即将推出之前开始支持 5G,但新类不在我正在构建的 SDK 中 (28) 我需要等待 Android Q 吗?4G的故事是什么?

android telephonymanager cellinfo android-10.0

6
推荐指数
1
解决办法
1619
查看次数

华为荣耀7中getAllCellInfo()返回空列表

我有一个 Android 应用程序可以获取手机信号塔的信息。我使用 getAllCellInfo() 来获取主小区和相邻小区的信息。我将 ACCESS_COARSE_LOCATION 权限包含到 manifest.xml 中,并在运行时请求该权限。它适用于其他手机,但在华为荣耀7中,该函数返回一个空列表。

我的代码:
在此输入图像描述
目录: 在此输入图像描述

我检查了其他人的问题: getAllCellInfo returns null in android 4.2.1Android getAllCellInfo() returns null

从一个问题中,我想到华为手机不支持 getAllCellInfo() ,直到我安装了Network Cell Info LiteNetMonster,并且应用程序似乎可以在华为荣耀7中获取手机信息:

网络小区信息精简版
在此输入图像描述
网络怪物
在此输入图像描述

有人有这方面的信息吗?

android telephonymanager cellinfo

5
推荐指数
1
解决办法
2592
查看次数

CellInfo 究竟是什么以及如何使用 getAllCellInfo 来获取有关一种连接类型的信息?

目标:获取特定类型连接(我实际使用的连接)的信息(信号强度)。

问题:我不确定到底什么是 reperesentCellInfo以及如何从中提取信息getAllCellInfo

问题:

1)来自android开发者网站

CellInfo:来自某个时间点的不可变单元格信息。

这是什么意思?

2) 我想了解我使用的是 wcdma、umts、gsm 还是 lte。我在这里找到了一段使用getAllCellInfo的代码,低于我的改编版本以获得信号强度

  for (final CellInfo info : telephonyManager.getAllCellInfo()) {

            if (info instanceof CellInfoGsm) {

                final CellSignalStrengthGsm gsm = ((CellInfoGsm) info).getCellSignalStrength();
                if(gsm.getLevel() >= localMaxSignalStrength)
                     localMaxSignalStrength = gsm.getLevel();
                Toast.makeText(getApplicationContext(), "gsm rssi" + localMaxSignalStrength, Toast.LENGTH_LONG).show();

            } else if (info instanceof CellInfoWcdma) {

                final CellSignalStrengthWcdma cdma = ((CellInfoWcdma) info).getCellSignalStrength();
                if(cdma.getLevel() >= localMaxSignalStrength)
                    localMaxSignalStrength = cdma.getLevel();
                Toast.makeText(getApplicationContext(), "wcdma rssi" + localMaxSignalStrength, Toast.LENGTH_LONG).show();

            } else if (info instanceof …
Run Code Online (Sandbox Code Playgroud)

java android telephonymanager cellinfo

5
推荐指数
0
解决办法
1248
查看次数

在我的 Android 应用程序中检测 5G NR (SA/NSA)

我正在尝试检测 5G 网络。我使用电话管理器来获取NETWORK_TYPE。即使我在 5G 网络覆盖中并且我的手机显示 5G,我也没有得到 NETWORK_TYPE_NR。NETWORK_TYPE 始终为 13,即 LTE。Phones Engineering 服务模式显示 NR 相关数据。有没有办法检测 NR(独立或非独立)模式?

我还需要获取 NR 数据的单元信息。我使用telephonyManager.getAllCellinfo(),但我从未得到过cellinfonr的实例。

任何帮助表示赞赏。谢谢

android telephonymanager cellinfo 5g

5
推荐指数
1
解决办法
1807
查看次数

Android 11 5G 获取小区参数

我正在新的 Android studio 预览版上尝试网络类型 5G 上的 Android 11。我的目标是获取单元信息详细信息。但是,方法 getAllCellInfo() 在模拟器上返回空/空列表。Android 11 之前的所有模拟器都会返回有效值。我需要做任何额外的配置才能使其在 Android 11 上运行吗?

android telephonymanager cellinfo 5g android-11

5
推荐指数
0
解决办法
422
查看次数

onCellInfoChanged()回调始终为null

我正在尝试获取设备可以找到的所有可用单元的列表。但是我被卡住了,因为我的CellInfo始终为null,我不知道为什么。有人可以给我提示吗?Google的onCellInfoChanged()信息很少。

主要活动:

 CellListener cellListener = new CellListener(this);
 cellListener.start();
Run Code Online (Sandbox Code Playgroud)

CellListener:

public class CellListener extends PhoneStateListener {

private static final String TAG = "CellListener";
private TelephonyManager telephonyManager = null;
private PhoneStateListener listener = null;
private String newCell = null;  
private int events = PhoneStateListener.LISTEN_CELL_LOCATION | PhoneStateListener.LISTEN_CELL_INFO;
private Context context = null;

public CellListener(Context context) {
    this.context = context;
}

public void start() {

    telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
    CellLocation.requestLocationUpdate();

    telephonyManager.listen(this, events);
}

@Override
public void onCellInfoChanged(List<CellInfo> cellInfo) {
    Log.i("CellListener","onCellInfoChanged(List<CellInfo> cellInfo) ");
    super.onCellInfoChanged(cellInfo);

     if(cellInfo …
Run Code Online (Sandbox Code Playgroud)

android cell cellinfo

3
推荐指数
1
解决办法
5107
查看次数

getAllCellInfo() 在 Nexus 5x 上返回空列表

我读到getAllCellInfo(所有帖子),并有像类似的情况。下面发布的代码在 Android 6 (OnePlus One) 上运行良好,但在 Google Nexus 5x Android 8.1 API 27 上返回一个空的 Cellinfo 列表。我在清单中设置了 Permission ACCESS CORSE LOCATION 并在第一次运行应用程序时请求许可.

这是一个代码片段:

try {

        TelephonyManager tm = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
        String networkOperator = "";
        if (tm.getPhoneType() == TelephonyManager.PHONE_TYPE_GSM) { 
            networkOperator = tm.getNetworkOperator(); 
        }

        if (!TextUtils.isEmpty(networkOperator)) { //is not empty with Nexus 5x
            mcc = networkOperator.substring(0, 3); 
            mnc = networkOperator.substring(3);
        } else {
            mcc = "Unbekannt";
            mnc = "Unbekannt";
        }

        List<CellInfo> cell = tm.getAllCellInfo();
        System.out.println("List: "+cell);
        if (cell != null) …
Run Code Online (Sandbox Code Playgroud)

android telephonymanager cellinfo

1
推荐指数
1
解决办法
1473
查看次数

有没有办法将 CellInfoNr 转换为 CellSignalStrengthNr?

我正在寻找输出内部小区信息(如 RSRP、RSRQ、SINR、RSSI)的文档。

我想查看5G(新无线电)数据。

cellRSRP = ((CellSignalStrengthNr) ((CellInfoNr) cellInfo).getCellSignalStrength()).getCsiRsrp();
Run Code Online (Sandbox Code Playgroud)

这就是我尝试获得 5G 的 cellRSRP 的方法。这与获取 LTE 数据非常相似。


这不起作用,因为我故意施放

(CellSignalStrengthNr)
Run Code Online (Sandbox Code Playgroud)

在此代码上

((CellInfoNr) cellInfo).getCellSignalStrength())
Run Code Online (Sandbox Code Playgroud)

由于getCellSignalStrength()不返回CellSignalStrengthNr数据,(它返回CellSignalStrength

所以我只是投射代码,没有检测到错误,一切似乎都很顺利。

但事实并非如此,我来这里是为了问一个问题。

所以,简而言之,

  1. CellSignalStrengthNr没有不用铸造的正常制作方法?
  2. 或者我应该尝试更多不同的铸造方式?

android cellinfo 5g

1
推荐指数
1
解决办法
957
查看次数