首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检测三星S10 5G是否运行在5G网络上?

如何检测三星S10 5G是否运行在5G网络上?
EN

Stack Overflow用户
提问于 2019-04-09 17:38:42
回答 5查看 4.8K关注 0票数 4

Android增加了一种新的网络类型,NETWORK_TYPE_NR for 5G,这是Android所没有的。最近发布的三星S10完全支持5G。当它在5G网络上时,它可以在状态栏上显示5G图标。

第三方应用程序是否有可能知道5G网络上的Android设备是否存在?

任何帮助都将不胜感激。

下面的链接是新网络类型的定义。它在Android分支上是不可用的。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2019-05-03 18:08:21

我相信他们支持从Q到Pie的代码,因为5G的逻辑是在去年年底在Q (alpha)中实现的。所以当使用TelephonyManager.getNetworkType()

你可能会得到

20 (5G)

编辑

如下所示:网络类型将是13,因此它不能解决问题。

编辑

尝试使用反射

代码语言:javascript
复制
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;
}
票数 4
EN

Stack Overflow用户

发布于 2020-09-20 03:23:46

在Android 11. https://developer.android.com/about/versions/11/features/5g#detection上有一个检测5G的官方文档。

调用TelephonyManager.listen(),传入LISTEN_DISPLAY_INFO_CHANGED,以确定用户是否有5G网络连接。

票数 2
EN

Stack Overflow用户

发布于 2020-11-02 08:09:45

正如@Hunter建议的那样,您需要使用来自电话管理器的“侦听”,但是如果它是api 30+,则需要授予READ_PHONE权限并侦听LISTEN_DISPLAY_INFO_CHANGED,并从PhoneStateListener重写onDisplayInfoChanged

代码语言:javascript
复制
(context.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager).listen(customPhoneStateListener,PhoneStateListener.LISTEN_DISPLAY_INFO_CHANGED)

侦听器应该如下所示:

代码语言:javascript
复制
private  class CustomPhoneStateListener : PhoneStateListener() {
    override fun onDisplayInfoChanged(telephonyDisplayInfo: TelephonyDisplayInfo) {
               
                super.onDisplayInfoChanged(telephonyDisplayInfo)
              
                    when (telephonyDisplayInfo.overrideNetworkType) {
                         //5G
                        OVERRIDE_NETWORK_TYPE_LTE_ADVANCED_PRO,
                        OVERRIDE_NETWORK_TYPE_NR_NSA,
                        OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE -> setNetworkChange(NETWORK_TYPE_NR)
                        OVERRIDE_NETWORK_TYPE_LTE_CA -> {
                            setNetworkChange(19) //LTE+
                        }
                        else -> setNetworkChange(telephonyDisplayInfo.networkType)
                    }
                } else {
                    setNetworkChange(telephonyDisplayInfo.networkType)
                }
            }

   }

链接:https://developer.android.com/about/versions/11/features/5g#detection

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55598359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档