利用 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,我现在没有手机,没办法测试。如果可以的话希望你能测试一下,分享一下结果。多谢了
|