之前需要用到5G网络信息,花了很长时间才去研究怎么判断是否是5G信号,但无论是官方说明的CellInfoNr,CellIdentityNr,CellSignalStrengthNr,最后连一个网络连接callback都用过了,在华为mate30 5G版上拿到的都是LTE(13),真的是心态爆炸。
一次偶然的机会看到ServiceState类,发现它有一个getNrState的方法,查了一下,返回为3的时候就是5G网络,详细代码如下
/**
* Get the NR 5G state of the mobile data network.
* @return the NR 5G state.
* @hide
*/
public @NRState int getNrState() {
final NetworkRegistrationInfo regInfo = getNetworkRegistrationInfo(
NetworkRegistrationInfo.DOMAIN_PS, AccessNetworkConstants.TRANSPORT_TYPE_WWAN);
if (regInfo == null) return NetworkRegistrationInfo.NR_STATE_NONE;
return regInfo.getNrState();
}
是一个隐藏的方法,但还是迫不及待的用反射试了一下
private boolean is5GConnected(){
TelephonyManager telephonyManager = (TelephonyManager