我正在尝试使用Android API在三星S20 (T-S20)上检测5G Nr小区信息
CellIdentityNr https://developer.android.com/reference/android/telephony/CellIdentityNr.html和
CellSignalStrengthNr https://developer.android.com/reference/android/telephony/CellSignalStrengthNr
这是我的代码,它检测细胞信息:
try {
if (cellInfo instanceof CellInfoGsm) {
CellInfoGsm cellInfoGsm = (CellInfoGsm) cellInfo;
logGSMCellInfo(cellInfoGsm, allCellInfoProps);
} else if (cellInfo instanceof CellInfoLte) {
CellInfoLte cellInfoLte = (CellInfoLte) cellInfo;
logLTECellInfo(cellInfoLte, allCellInfoProps);
} else if (cellInfo instanceof CellInfoCdma) {
CellInfoCdma cellInfoCdma = (CellInfoCdma) cellInfo;
logCDMACellInfo(cellInfoCdma, allCellInfoProps);
} else if (cellInfo instanceof CellInfoWcdma) {
CellInfoWcdma cellInfoWcdma = (CellInfoWcdma) cellInfo;
logWCDMACellInfo(cellInfoWcdma, allCellInfoProps);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
if (cellInfo instanceof CellInfoTdscdma) {
CellInfoTdscdma cellInfoTdscdma = (CellInfoTdscdma) cellInfo;
logTDSCDMACellInfo(cellInfoTdscdma, allCellInfoProps);
} else if (cellInfo instanceof CellInfoNr) {
CellInfoNr cellInfoNr = (CellInfoNr) cellInfo;
logNrCellInfo(cellInfoNr, allCellInfoProps);
}
}
collectionOfCellInfo.add(allCellInfoProps);
} catch (Exception e) {
Log.e(TAG, "getLatestCellInfoAsCollection: Exception=" + e.getMessage());
e.printStackTrace();
}问题是,即使手机在顶部栏中显示5G,表示5G连接,我仍然可以获得WCDMA小区信息,而我应该得到Nr.。
通过这个链接,我推测CellInfoNr对象只在NR-SA设备上收集,这就解释了为什么我无法在其他手机上获取Nr信息。但为什么我在三星S20上买不到呢?Detect 5G NR (SA/NSA) in my Android Application
是代码有问题,还是5G网络模式可用导致的?
另外,如何确认我的S20处于“独立(5G)”模式?
发布于 2021-02-22 04:13:06
哈希姆-我可以通过下面的代码确定网络是否连接-但我不知道如何让CellInfoNR获得5G信号强度。
你想好如何让CellInfoNR获取5G连接的所有细节了吗?
telephonyManager.listen(new CustomPhoneStateListener(c),PhoneStateListener.LISTEN_DISPLAY_INFO_CHANGED);然后是这个类:
public class CustomPhoneStateListener extends PhoneStateListener {
Context context;
CustomPhoneStateListener(Context c) {
this.context = c;
}
@Override
public void onDisplayInfoChanged(@NonNull TelephonyDisplayInfo telephonyDisplayInfo) {
if (ActivityCompat.checkSelfPermission(context, android.Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
} else {
super.onDisplayInfoChanged(telephonyDisplayInfo);
if (telephonyDisplayInfo.getOverrideNetworkType() == TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA) {
//do something
}
if (telephonyDisplayInfo.getOverrideNetworkType() == TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE) {
//do something else
}
}
}}
https://stackoverflow.com/questions/64118636
复制相似问题