V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
oven
V2EX  ›  Android

华为 nova 6(5g)利用 TelephonyManager.getNetworkType()函数无法获取网络类型,返回值总是 0(即无法判断网络类型),请问原因是什么?

  •  
  •   oven · 2020-01-07 10:57:42 +08:00 · 11816 次点击
    这是一个创建于 1805 天前的主题,其中的信息可能已经有所发展或是发生改变。

    利用 TelephonyManager.getNetworkType()函数获取网络类型的代码:

    // 这里的 context 参数是在 MainActivity 中初始化,为:
    //        Context context = this;
    // 然后传入下面的代码所在的函数。
    TelephonyManager manager =  (TelephonyManager)
                   context.getSystemService(Context.TELEPHONY_SERVICE);
    int networkType = manager.getNetworkType();
    switch (networkType) {
        case TelephonyManager.NETWORK_TYPE_UNKNOWN:
            return "unknown";
        case TelephonyManager.NETWORK_TYPE_GPRS:
        case TelephonyManager.NETWORK_TYPE_EDGE:
        case TelephonyManager.NETWORK_TYPE_CDMA:
        case TelephonyManager.NETWORK_TYPE_1xRTT:
        case TelephonyManager.NETWORK_TYPE_IDEN:
            return "2G";
        case TelephonyManager.NETWORK_TYPE_UMTS:
        case TelephonyManager.NETWORK_TYPE_EVDO_0:
        case TelephonyManager.NETWORK_TYPE_EVDO_A:
        case TelephonyManager.NETWORK_TYPE_HSDPA:
        case TelephonyManager.NETWORK_TYPE_HSUPA:
        case TelephonyManager.NETWORK_TYPE_HSPA:
        case TelephonyManager.NETWORK_TYPE_EVDO_B:
        case TelephonyManager.NETWORK_TYPE_EHRPD:
        case TelephonyManager.NETWORK_TYPE_HSPAP:
            return "3G";
        case TelephonyManager.NETWORK_TYPE_LTE:
            return "4G";
        case TelephonyManager.NETWORK_TYPE_NR:
            return "5G";
        default:
            return String.valueOf(networkType);
        }
    }
    

    配置:

    • EMUI 10.0.1
    • Android 10

    另外我还尝试了 ConnectivityManager.getActiveNetworkInfo().getSubtype()方法,这个可以识别 4G 网络,但是连接到 5G 网络时仍然返回是 4G 网络。

    所以,请问我的代码是否有错误?有没有其他方法可以正确判断当前是 4G/5G 网络?

    14 条回复    2020-03-22 20:45:58 +08:00
    torchmu
        1
    torchmu  
       2020-01-07 11:55:28 +08:00
    READ_PHONE_STATE 权限有获取么?
    oven
        2
    oven  
    OP
       2020-01-07 12:49:59 +08:00
    @torchmu 没有,我看文档只需要获取 ACCESS_NETWORK_STATE。
    oven
        3
    oven  
    OP
       2020-01-07 12:51:39 +08:00
    @torchmu 加上这个权限之后还是不行
    psyche08
        4
    psyche08  
       2020-01-07 16:35:51 +08:00
    This method was deprecated in API level 29. Use TelephonyManager.getDataNetworkType() instead.
    better
        5
    better  
       2020-02-24 17:35:37 +08:00
    有任何进展吗?也遇到这个问题
    oven
        6
    oven  
    OP
       2020-03-04 20:29:14 +08:00
    @better 没有找到有效的方法,一个在考虑方案是用监听网络状态的 API。老哥用的是什么手机,操作系统版本是什么样的?
    oven
        7
    oven  
    OP
       2020-03-04 20:46:45 +08:00
    @psyche08 这个方法试过了,也不行
    better
        8
    better  
       2020-03-08 10:10:23 +08:00
    @oven huawei mate 30 pro 5g ,android 10。试了这几个方式都无法获取
    1. NetworkInfo#getSubtype()
    2. TelephonyManager#getNetworkType()
    3. TelephonyManager#getDataNetworkType()
    4. 通过 TelephonyManager.getAllCellInfo(),获取 5G 网络的两种模式 SA NSA,
    5. 通过 TelephonyManager.getServiceState,检查 ServiceState.getNrStatus() 返回值是否等于 3

    目前的 5G 信号,可能是 4G+的形式,就是厂商自己定义的 5G 信号。猜测还没有适配 Google 的代码吧。
    oven
        9
    oven  
    OP
       2020-03-08 17:16:10 +08:00
    better
        10
    better  
       2020-03-10 13:13:49 +08:00
    @oven 这个我试了,对应第 5 个方式。也无法获取
    oven
        11
    oven  
    OP
       2020-03-10 17:09:08 +08:00
    @better 可能是华为手机的原因,其他品牌的可能可行
    oven
        12
    oven  
    OP
       2020-03-16 08:49:12 +08:00
    @better 老哥有进展的话麻烦告知下
    oven
        13
    oven  
    OP
       2020-03-18 12:05:00 +08:00
    @better 老哥,我看到一个博客说在华为 mate30 5G 版找到了可行的办法,利用的是华为自定义的接口。链接: https://blog.csdn.net/alee_130158/article/details/103200027,我现在没有手机,没办法测试。如果可以的话希望你能测试一下,分享一下结果。多谢了
    better
        14
    better  
       2020-03-22 20:45:58 +08:00
    @oven 目前没有新的进展,我这部华为手机被寄回去了。后面我在看下这个
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   775 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 22:02 · PVG 06:02 · LAX 14:02 · JFK 17:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.