Android Q为5G添加了新的网络类型NETWORK_TYPE_NR,但不适用于Android Pie。然而刚刚发布的三星S10 5G完全支持5G功能,当它在5G网络上时,它可以在状态栏上显示5G图标。
第三方应用程序是否可能知道手机在Pie设备的5G网络上?
任何帮助将不胜感激。
以下链接是新网络类型的定义。它在Android Pie分支上不可用。
Pie版本的源代码
https://android.googlesource.com/platform/frameworks/base/+/refs/heads/pie-release-2/telephony/java/android/telephony/TelephonyManager.java
具有NETWORK_TYPE_NR的最新源代码
https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/telephony/java/android/telephony/TelephonyManager.java#2375
最佳答案
我相信他们将代码从Q移植到Pie,因为5G的逻辑已于去年年底以Q(alpha)实现。
所以当使用TelephonyManager.getNetworkType()
你可能会得到
20(5G)
编辑
按照下面的评论:网络类型将为13,因此无法解决问题。
编辑
尝试使用反射
static boolean isNRConnected(TelephonyManager telephonyManager) {
try {
Object obj = Class.forName(telephonyManager.getClass().getName())
.getDeclaredMethod("getServiceState", new Class[0]).invoke(telephonyManager, new Object[0]);
Method[] methods = Class.forName(obj.getClass().getName()).getDeclaredMethods();
for (Method method : methods) {
if (method.getName().equals("getNrStatus") || method.getName().equals("getNrState")) {
method.setAccessible(true);
return ((Integer) method.invoke(obj, new Object[0])).intValue() == 3;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}