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;


}

09-12 02:59