利用 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); } }
配置:
另外我还尝试了 ConnectivityManager.getActiveNetworkInfo().getSubtype()方法,这个可以识别 4G 网络,但是连接到 5G 网络时仍然返回是 4G 网络。
所以,请问我的代码是否有错误?有没有其他方法可以正确判断当前是 4G/5G 网络?
1 torchmu 2020-01-07 11:55:28 +08:00 READ_PHONE_STATE 权限有获取么? |
![]() | 4 psyche08 2020-01-07 16:35:51 +08:00 This method was deprecated in API level 29. Use TelephonyManager.getDataNetworkType() instead. |
5 better 2020-02-24 17:35:37 +08:00 有任何进展吗?也遇到这个问题 |
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 的代码吧。 |
9 oven OP @better 这个帖子在三星 galaxy S10 5G 上实现了 https://stackoverflow.com/questions/55598359/how-to-detect-samsung-s10-5g-is-running-on-5g-network。 |
13 oven OP @better 老哥,我看到一个博客说在华为 mate30 5G 版找到了可行的办法,利用的是华为自定义的接口。链接: https://blog.csdn.net/alee_130158/article/details/103200027,我现在没有手机,没办法测试。如果可以的话希望你能测试一下,分享一下结果。多谢了 |