【问题标题】:Detect wifi IP address on Android?在Android上检测wifi IP地址?
【发布时间】:2011-12-20 00:02:00
【问题描述】:

我需要确定Android设备是否连接到Wifi,如果是,获取它的Wifi IP地址。

我知道如何使用 ConnectivityManager 来确定活动网络是否是 Wifi 网络,并且我知道如何使用 java.net.NetworkInterface 来遍历可用的网络接口并获取它们的 IP 地址。

如果找到多个地址,我不知道该怎么做是确定哪个 IP 地址属于 Wifi 网络。有什么建议吗?

谢谢。

【问题讨论】:

    标签: android networking wifi


    【解决方案1】:
    public String getIpAddr() {
       WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
       WifiInfo wifiInfo = wifiManager.getConnectionInfo();
       int ip = wifiInfo.getIpAddress();
    
       String ipString = String.format(
       "%d.%d.%d.%d",
       (ip & 0xff),
       (ip >> 8 & 0xff),
       (ip >> 16 & 0xff),
       (ip >> 24 & 0xff));
    
       return ipString;
    }
    

    请注意:您需要在AndroidManifest.xml 中添加android.permission.INTERNETandroid.permission.ACCESS_WIFI_STATE<user-permission/> 才能访问代码。

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    

    【讨论】:

    • 不需要INTERNET权限;只是 ACCESS_WIFI_STATE(至少在 4.1.1 上)
    • 太棒了!!!这是唯一可用于获取我的智能手机的本地 Wifi-LAN IP 的代码。我真的搜索了几个小时。
    • 您可以使用 Formatter.formatIpAddress 而不是手动进行格式化。
    • 有没有办法获取 IPv6 Wifi 地址?
    【解决方案2】:

    请尝试此代码。

    ConnectivityManager connec = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    
    //To fetch the state of the Wi-Fi network in the device
    Boolean isWifi = connec.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnectedOrConnecting(); 
    
    WifiManager wifiMgr = (WifiManager) getBaseContext().getSystemService(Context.WIFI_SERVICE); 
    WifiInfo wifiInfo = wifiMgr.getConnectionInfo(); 
    
    //To fetch the name of the Wi-Fi network to which the device is connected
    String wifiName = wifiInfo.getSSID(); 
    

    【讨论】:

    • 这很有用,因为它为我提供了 Wifi 网络的名称,但这并不是我真正想要的。当我枚举网络接口时,它们具有诸如“tiwlan0”之类的名称。我需要将该名称与活动网络相关联。
    【解决方案3】:
    static final int IP_ADDRESS_LENGTH = 32;
    
      public static Integer getSystemWifiIpAddress(Context context)
      {
        WifiManager wManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
        WifiInfo wInfo = wManager.getConnectionInfo();
    
        int ipAddress = wInfo.getIpAddress();
        if (ipAddress == 0)
          return null;
        return ipAddress;
      }
    

    【讨论】:

    • IP怎么可能是int?
    猜你喜欢
    • 2012-05-27
    • 2013-05-19
    • 2014-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多