首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检测网络是否被配置为Android上的移动热点?

如何检测网络是否被配置为Android上的移动热点?
EN

Stack Overflow用户
提问于 2014-07-01 15:43:54
回答 3查看 7.3K关注 0票数 7

从Android4.1开始,您的设备可以检测它是否连接到移动热点(考虑到移动热点也运行Android4.1或更高版本)。此外,您还可以选择将网络标记为移动热点(设置/数据使用/溢出菜单/移动热点)。

,但作为一个用户,我指的是开发人员,如何检测到这一点呢?它没有存储在WifiConfiguration中,那么它在哪里?

一些背景:我想为Android构建一个简单的工具,它可以检查您是否连接到您或Android标记为移动热点的网络。如果是,它将检查是否没有其他(非热点)网络可用.如果是这样的话,它应该连接到这些其他网络,因为这些网络应该更快,而且没有数据上限。为什么?因为我的手机和平板电脑经常连接到(移动)热点,即使有一个更好的网络。

下面是我正在寻找的一些伪代码:

代码语言:javascript
复制
// Check if android has detected mobile hotspot
WifiManager wifiMgr = getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiMgr .getConnectionInfo();
boolean isMobileHotspot = wifiInfo.isMobileHotspot;

更新2014年7月3日

好的,所以Matiash的答案是好的,但是ConnectivityManager.isActiveNetworkMetered()只返回当前网络的值。我确实需要它,所以它帮助了我,但它把我带到了我的工具/应用程序的下一部分:

如果设备连接到移动热点(或Android所称的“计量网络”),我想检查附近的任何接入点是否是更好的选择。因此,在连接到AP之前,我需要知道是否有任何已知的AP (WifiManager.getConfiguredNetworks())也被标记为这样.

我有一个List<ScanResult>和一个List<WifiConfiguration>,看起来它们都没有这个信息。

这让我回到我最初的问题:是否有方法在数据使用下检索移动热点(由Android和/或用户配置)?这次我是说所有的人。

更新2014年7月7日

我在AOSP问题跟踪器中发布了一个特性请求,以便访问(只读)到NetworkPolicyManager。请在此投票:https://code.google.com/p/android/issues/detail?id=73206&thanks=73206&ts=1404719243

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-07-01 15:57:01

您可以通过调用ConnectivityManager.isActiveNetworkMetered()来访问此信息。

这将返回活动连接是否是热点(如数据使用->移动热点中定义的)。

关于第二部分,我很抱歉,但我认为那是不可能的。该标志不是公共的,即使您获得了可以通过反射检索它(android.net.NetworkPolicyManager)的对象:

代码语言:javascript
复制
Object npm = Class.forName("android.net.NetworkPolicyManager").getDeclaredMethod("from", Context.class).invoke(null, this);
Object policies = npm.getClass().getDeclaredMethod("getNetworkPolicies").invoke(npm);

调用getNetworkPolicies()需要MANAGE_NETWORK_POLICY权限,而非系统应用程序不能获得MANAGE_NETWORK_POLICY权限,因为它具有“签名”保护级别。

不过,我希望被证明是错误的。)可能查看管理此信息的Android活动的源代码(settings/blob/master/src/com/android/settings/net/DataUsageMeteredSettings.java),特别是buildWifiPref()方法,将提供一些线索。

票数 6
EN

Stack Overflow用户

发布于 2014-07-01 16:17:44

我不知道你想要什么是可能的,但是你可以通过检查ip来检查你的设备是否连接到网络上。您可以使用下面的工具来查看您是否有ip,并且应该知道他是否连接到一个网络。

公共静态布尔.getSystemService(Context.CONNECTIVITY_SERVICE);check_connection(最终上下文_context) {布尔连接;ConnectivityManager conectivtyManager = (ConnectivityManager) _context _context if (conectivtyManager.getActiveNetworkInfo() != null & conectivtyManager.getActiveNetworkInfo().isAvailable() & conectivtyManager.getActiveNetworkInfo().isConnected()) { connected = true;}{ connected = false;}返回连接;}

票数 0
EN

Stack Overflow用户

发布于 2021-07-28 11:45:55

代码语言:javascript
复制
    //Check if hotspot tethering is enabled
    try {
        ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
        boolean isMobileData = connectivityManager.isActiveNetworkMetered();

        if(isMobileData) {
            List<NetworkInterface> interfaces = Collections.list(NetworkInterface.getNetworkInterfaces());
            for (NetworkInterface networkInterface : interfaces) {
                if (networkInterface.getName().equals("ap0")) {
                    //Tethering is enabled
                    SendHotspotEnabledHandler sendHotspotEnabledHandler = new SendHotspotEnabledHandler(new WeakReference<Context>(SendInstalledAppsService.this));
                    sendHotspotEnabledHandler.execute();
                    break;
                }
            }
        }

    } catch (SocketException e) {
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24514387

复制
相关文章

相似问题

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