Android获取sim卡频段信息

公司一些Android设备,在交给客户使用时,需要使用sim卡网络,但是有时候网络不好,要给客户证据说明是网络问题,一个办法是网络测速,还有就是获取一下频段信息,根据这个信息可以和中国移动沟通问题来源,比如在某些地方,移动只部署了一两个频段,而有的频段速度快,有的频段速度慢,所以可以通过频段信息判断网络问题。

查询结果示例:TDD B34(36275),这里显示频段为 TDD B34频段,频点为36275。示例代码如下(注:本代码在5G频段换算时仅写了中国移动N41、N79、N28频段,其它5G频段的没写),tm.serviceState这个API是Android 8.0 才出的,在低版本的话也可以用反射试一下,看是否只是未公开,且这个API需要READ_PHONE_STATEACCESS_FINE_LOCATION权限。

fun getBandInfo() {
    val tm = getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
    val serviceState = tm.serviceState ?: return
    val channelNumber = serviceState.channelNumber
    val duplexMode = serviceState.duplexMode
    val band = getBand(channelNumber)
    val mode = getMode(duplexMode)
    Log.i("MainActivity","$mode $band($channelNumber)")
}
fun getMode(mode: Int) : String {
    return when (mode) {
        1 -> "FDD"
        2 -> "TDD"
        else -> "未知duplexMode: $mode"
    }
}
fun getBand(EARFCN: Int): String {
    var band = nrarfcnToBand(EARFCN)
    if (band != -1) return "N$band"
    band = earfcnToBand(EARFCN)
    if (band != -1) return "B$band"
    return "$EARFCN"
}
fun nrarfcnToBand(nrarfcn: Int): Int {
    val band = when(nrarfcn) {
        in 499200 .. 537999 -> 41
        in 693334 .. 733334 -> 79
        in 272010 ..276660 -> 28
        else -> -1
    }
    return band
}
fun earfcnToBand(EARFCN: Int): Int {
    val band = when (EARFCN) {
        in 0 until 600, in 18000 until 18600 -> 1
        in 600 until 1200, in 18600 until 19200 -> 2
        in 1200 until 1950, in 19200 until 19950 -> 3
        in 1950 until 2400, in 19950 until 20400 -> 4
        in 2400 until 2650, in 20400 until 20650 -> 5
        in 2650 until 2750, in 20650 until 20750 -> 6
        in 2750 until 3450, in 20750 until 21450 -> 7
        in 3450 until 3800, in 21450 until 21800 -> 8
        in 3800 until 4149, in 21800 until 22149 -> 9
        in 4150 until 4750, in 22150 until 22745 -> 10
        in 4750 until 4950, in 22750 until 22950 -> 11
        in 5010 until 5180, in 23010 until 23180 -> 12
        in 5180 until 5280, in 23180 until 23280 -> 13
        in 5280 until 5380, in 23280 until 23379 -> 14
        in 5730 until 5850, in 23730 until 23850 -> 17
        in 5850 until 6000, in 23850 until 24000 -> 18
        in 6000 until 6150, in 24000 until 24150 -> 19
        in 6150 until 6450, in 24150 until 24450 -> 20
        in 6450 until 6600, in 24450 until 24600 -> 21
        in 6600 until 7400, in 24600 until 25399 -> 22
        in 7500 until 7700, in 25500 until 25699 -> 23
        in 7700 until 8040, in 25700 until 26040 -> 24
        in 8040 until 8690, in 26040 until 26690 -> 25
        in 8690 until 9040, in 26690 until 27040 -> 26
        in 9040 until 9209, in 27040 until 27210 -> 27
        in 9210 until 9660, in 27210 until 27660 -> 28
        in 36000 until 36200 -> 33
        in 36200 until 36350 -> 34
        in 36350 until 36950 -> 35
        in 36950 until 37550 -> 36
        in 37550 until 37750 -> 37
        in 37750 until 38250 -> 38
        in 38250 until 38650 -> 39
        in 38650 until 39650 -> 40
        in 39650 until 41590 -> 41
        in 41590 until 43590 -> 42
        in 43590 until 45590 -> 43
        in 45590 until 46590 -> 44
        else -> -1
    }
    return band
}

对于5G的频段,在官网:https://portal.3gpp.org/desktopmodules/Specifications/SpecificationDetails.aspx?specificationId=3202,链接界面如下:
在这里插入图片描述
点击如上链接,会跳出一个文件列表页面,如下:
在这里插入图片描述
这是3GPP TS 38.104规范,它定义了NR-ARFCN(NR绝对射频信道编号)与频段的对应关系,上面列出来的文件列表是不同版本的TS 38.104规范,这些文件的命名方式一般是“TS编号-版本号.zip”,例如,38104-001.zip表示TS 38.104版本0.1.0。 要查找NR-ARFCN范围与频段的对应表,您可以下载最新版本的TS 38.104规范。 在该文档的第5章,通常会列出频段和NR-ARFCN的对应关系。 请注意,随着规范的更新,具体章节和表格编号可能会有所变化。 因此,建议您参考最新版本的TS 38.104,以获取最准确的信息。

获取最新版本看文件的日期即可,点击日期最上面的 “desc” 按降序排序,这样排在最前面的即为最新的版本了。如下:
在这里插入图片描述
在这里插入图片描述
打开该文件就能看到具体版本号,以及该版本的日期,如下:
在这里插入图片描述
GPT说了,NR-ARFCN范围与频段的对应表在第5章,看了一下还真的是,如下:
在这里插入图片描述
表格名称翻译为 “表 5.4.2.3-1:FR1 中每个工作频段适用的 NR-ARFCN”,在这个表格中,可以看到N41频段对应的NR-ARFCN范围为499200-537999,它又分上下行的(Uplink、Downlink),而且n41中第二列又分15和30,搞不懂这些区别。而且我发现n90频段的NR-ARFCN范围和N41是一样的,如下:
在这里插入图片描述
它的第二列分15、30、100。

发现还有另一个表格:
在这里插入图片描述
表名翻译为:表 5.4.2.3-4:增强信道栅格中每个工作频段适用的 NR-ARFCN,跟前一个表格不知道有什么不一样,而且这个表中没有n41频段。而且在同一个表格中不同频段的 NR-ARFCN也是有重复的,比如n77和n78频段有重复,n41和n90有重复。

对于两个表格的不同,GPT答案如下:

在 3GPP TS 38.104 中,这两个表格的作用和使用场景是不同的,具体选择哪一个取决于您的需求:

  1. Table 5.4.2.3-1: Applicable NR-ARFCN per operating band in FR1

    • 用途:此表格定义了在 FR1(Frequency Range 1,450 MHz 到 6000 MHz)频率范围内,每个操作频段的标准 NR-ARFCN(NR绝对射频信道编号) 范围。
    • 应用场景:该表适用于大多数常规场景,是操作频段和 NR-ARFCN 范围的标准映射关系,供无线通信设备的常规频率分配使用。
    • 推荐使用场景:
      • 标准频段配置。
      • 常规通信频谱规划和分配。
      • 设备对频率支持的确认。
  2. Table 5.4.2.3-4: Applicable NR-ARFCN per operating band for enhanced channel raster

    • 用途:此表格定义了针对增强信道栅格(enhanced channel raster)的 NR-ARFCN 范围。增强信道栅格是一种在特定场景下使用的优化频谱配置,主要用于更精细的信道间隔和更灵活的频谱使用。
    • 应用场景:该表适用于需要增强信道栅格的特殊场景,例如:
      • 特定的频谱共享方案。
      • 更细粒度的频谱优化需求。
      • 需要在复杂射频环境中对频率资源进行更高效的利用。

选择依据

  • 常规使用:如果您是针对标准的 NR 部署或常规频谱规划,应该以 Table 5.4.2.3-1 为准。
  • 特殊场景:如果您在设计或优化需要支持增强信道栅格的系统(例如设备需要更精细的信道配置),可以参考 Table 5.4.2.3-4。

建议

  • 优先使用 Table 5.4.2.3-1:因为这是默认的 NR-ARFCN 和频段对应关系,适用范围更广。
  • 如果确实需要增强信道栅格支持,则使用 Table 5.4.2.3-4,但需确保设备和网络支持该特性。

我的应用场景是:在Android手机中,可以获取到信号中的nr-arfcn,我需要知道当前手机sim卡的信号使用的是哪个频段,这个场景我应该选择使用哪个表格?

推荐表格:Table 5.4.2.3-1: Applicable NR-ARFCN per operating band in FR1

  • 原因:该表是标准的 NR-ARFCN 与频段的对应关系,广泛用于常规的 5G NR 部署场景。手机通信系统通常遵循这一标准进行频段和信道分配。
  • 适用性:此表适合您的需求,因为它是 NR-ARFCN 的基础对应表,涵盖了大多数常规操作频段。

为何不选择 Table 5.4.2.3-4?

  • Table 5.4.2.3-4 是针对 增强信道栅格(enhanced channel raster) 的特殊场景,通常用于需要更精细频谱规划的场合。
  • 这种增强信道栅格的配置需要设备明确支持,并非所有设备或运营商都会使用。因此,对普通手机 SIM 卡信号的分析,它的实用性较低。

在 Table 5.4.2.3-1 中,您提到的 n41 和 n90 的 NR-ARFCN 范围相同(499200 - 537999)。因此,仅根据 NR-ARFCN 是无法直接区分信号所属的频段的。但您可以结合其他信息来判断 NR-ARFCN 属于哪一个频段。
在这里插入图片描述

  1. 查询运营商分配的频段
  • 在实际网络部署中,不同的运营商可能只启用了 n41 或 n90 其中之一。
  • 您可以通过 Android 的 TelephonyManager API 查询 PLMN(Public Land Mobile Network,公共陆地移动网络号),然后根据 PLMN 号判断运营商。
  • 参考运营商的公开频谱分配信息,确认对应的频段。
  1. 获取信道带宽
  • n41 和 n90 的带宽配置可能不同:
    • n41 常用于大带宽(例如 100 MHz)。
    • n90 通常用于更小的带宽,且主要用于某些特定场景。
  • Android API 可能允许您获取信号的带宽信息,从而进一步确认频段。
  1. 利用小区信号信息
  • 在 Android 中,通过 API(例如 CellInfoNr 或 ServiceState),获取小区 ID 或更多信号信息。
  • 小区的其他特征(如载波频率或支持的频段)可以帮助区分。

这也太复杂了,对于5G频段,网上信息一般是这样说的:目前国内外主要使用的是n1/n3/n28/n41/n77/n78/n79共7个频段。所以代码里面我们就判断这7个频段就行了,然后中国电信和中国联通使用的是n78频段,而中国移动使用的是n41和n79,所以对于n77和n78重复的部分,我们就当n78频段处理,必竟这是联通和电信的常用5G频段,对于n41和n90重复,我们就当n41处理,因为n41是移动常用5G频段,这样就比较简单了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

android_cai_niao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值