【问题标题】:How do I program android to look for a particular network?如何对 android 进行编程以查找特定网络?
【发布时间】:2012-06-19 02:21:59
【问题描述】:

我的应用程序只有在校园网络上才能访问校园数据时才有效。在公共 wifi 或 3g 网络上运行应用程序时,应用程序将挂起然后强制关闭。如何对我的应用程序进行编程以检查该专用网络/wifi 或检查 android 当前正在使用什么连接,如果不等于“校园 wifi”那么......?

【问题讨论】:

    标签: android networking private


    【解决方案1】:

    从你所说的我认为你想强制应用程序只使用 Campus wifi。

    所以你来了

    创建 WifiConfiguration 实例:

    String networkSSID = "put network SSID here";
    String networkPass = "put network password here";
    
    WifiConfiguration conf = new WifiConfiguration();
    conf.SSID = "\"" + networkSSID + "\"";   //ssid must be in quotes
    

    那么,对于 WEP 网络,您需要这样做:

    conf.wepKeys[0] = "\"" + networkPass + "\""; 
    conf.wepTxKeyIndex = 0;
    conf.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
    conf.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40); 
    

    对于 WPA 网络,您需要像这样添加密码:

    conf.preSharedKey = "\""+ networkPass +"\"";
    

    对于开放网络,您需要这样做:

    conf.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
    

    然后,您需要将其添加到 Android wifi 管理器设置中:

    WifiManager wifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE); 
    wifiManager.add(conf);
    

    最后,您可能需要启用它,以便 Android 连接到它:

    List<WifiConfiguration> list = wifiManager.getConfiguredNetworks();
    for( WifiConfiguration i : list ) {
        if(i.SSID != null && i.SSID.equals("\"" + networkSSID + "\"")) {
             wm.disconnect();
             wm.enableNetwork(i.networkId, true);
             wm.reconnect();                
    
             break;
        }           
     }
    

    请注意,在 WEP 的情况下,如果您的密码是十六进制的,则不需要用引号括起来。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-07
      • 1970-01-01
      相关资源
      最近更新 更多