【问题标题】:How can I get a list of available networks (GSM/LTE, WiFi, etc) in Android如何在 Android 中获取可用网络(GSM/LTE、WiFi 等)的列表
【发布时间】:2018-07-16 07:47:26
【问题描述】:

我尝试获取可用网络列表,但当 WiFi 开启时,我只看到“WIFI”,尽管 GSM/LTE 已启用。 有没有获得可用网络列表的好方法?

我正在尝试这样做:

ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
String strNetworkName = "";
if(null != connManager) {
    Network networks[] = connManager.getAllNetworks();
    if(networks != null) {
         NetworkInfo nwInfo = null;
         for(Network nw: networks) {
             nwInfo = connManager.getNetworkInfo(nw);
             strNetworkName += nwInfo.getTypeName() + ", ";
        }
    }
}
Toast.makeText(getApplicationContext(), strNetworkName, Toast.LENGTH_SHORT).show();

【问题讨论】:

    标签: android network-programming android-connectivitymanager


    【解决方案1】:

    我开发了返回连接名称和网络映射的函数。 我认为这可能很有趣。

    Map<String,Network> getAvailableNetwoks(Context context) {
        ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    
        HashMap<String,Network> setNetworkName = new HashMap<String,Network>();
        if (null != connManager) {
    
            // Set MOBILE network for checking is it existing
            activateMobileNetwork(context, connManager);
    
            Network networks[] = connManager.getAllNetworks();
            if (networks != null) {
                NetworkInfo nwInfo;
                for (Network nw : networks) {
                    nwInfo = connManager.getNetworkInfo(nw);
                    setNetworkName.put(nwInfo.getTypeName(), nw);
                }
            }
        }
    
        return setNetworkName;
    }
    
    void activateMobileNetwork(Context context, ConnectivityManager connManager) {
        NetworkRequest.Builder builder = new NetworkRequest.Builder();
        builder.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
        builder.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR);
    
        NetworkRequest networkRequest = builder.build();
        connManager.requestNetwork(networkRequest, new ConnectivityManager.NetworkCallback() {
            @Override
            public void onAvailable(Network network) {
                super.onAvailable(network);
                Toast.makeText(context, "MOBILE connect", Toast.LENGTH_SHORT).show();
            }
        });
    }
    

    【讨论】:

      猜你喜欢
      • 2011-03-11
      • 1970-01-01
      • 1970-01-01
      • 2012-11-05
      • 1970-01-01
      • 2013-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多