2016-09-16 4 views
0

ここでIPアドレスを取得する際に問題があります。私は非推奨formatIpAddressを取り除くためにあらゆる可能な方法を見てきましたが、何も私はまったく同じようにMACアドレスを使用していたと私は、IPアドレス出力が0.0.0.0を使用していたとき、私はMACアドレスを得たが、私に適切なソリューションを与えることはありません。IPアドレスの問題

コードは次のとおりです。

WifiManager wifiManager = (WifiManager) getActivity().getSystemService(Context.WIFI_SERVICE); 
    WifiInfo wifiInfo = wifiManager.getConnectionInfo(); 
    //Ip Address 
    int ipAddress = wifiInfo.getIpAddress(); 
    String ip = Formatter.formatIpAddress(wifiManager.getConnectionInfo().getIpAddress()); 
    TextView ip_address= (TextView) v.findViewById(R.id.ip_address_mobfragment); 
    ip_address.setText(""+ip); 
+0

奇妙なこと、あなたのコードをチェックするint型ipAddressの= -1879004992、文字列IP = 192.168.0.144 – DEADMC

+0

その後、溶液は何である結果を得ましたか。 – Abhi

+0

ええ、あなたのテスト環境は何ですか?エミュレータ、実デバイス、...?それはインターネットに接続されていますか? – jdstaerk

答えて

0

さて、私は私自身のproblem.Iから解決策を持って

IPを印刷するには、このメソッドを使用していました

ここに私のコードです

public class Utils { 

/** 
* Convert byte array to hex string 
* @param bytes 
* @return 
*/ 
public static String bytesToHex(byte[] bytes) { 
    StringBuilder sbuf = new StringBuilder(); 
    for(int idx=0; idx < bytes.length; idx++) { 
     int intVal = bytes[idx] & 0xff; 
     if (intVal < 0x10) sbuf.append("0"); 
     sbuf.append(Integer.toHexString(intVal).toUpperCase()); 
    } 
    return sbuf.toString(); 
} 

/** 
* Get utf8 byte array. 
* @param str 
* @return array of NULL if error was found 
*/ 
public static byte[] getUTF8Bytes(String str) { 
    try { return str.getBytes("UTF-8"); } catch (Exception ex) { return null; } 
} 

/** 
* Load UTF8withBOM or any ansi text file. 
* @param filename 
* @return 
* @throws java.io.IOException 
*/ 
public static String loadFileAsString(String filename) throws java.io.IOException { 
    final int BUFLEN=1024; 
    BufferedInputStream is = new BufferedInputStream(new FileInputStream(filename), BUFLEN); 
    try { 
     ByteArrayOutputStream baos = new ByteArrayOutputStream(BUFLEN); 
     byte[] bytes = new byte[BUFLEN]; 
     boolean isUTF8=false; 
     int read,count=0; 
     while((read=is.read(bytes)) != -1) { 
      if (count==0 && bytes[0]==(byte)0xEF && bytes[1]==(byte)0xBB && bytes[2]==(byte)0xBF) { 
       isUTF8=true; 
       baos.write(bytes, 3, read-3); // drop UTF8 bom marker 
      } else { 
       baos.write(bytes, 0, read); 
      } 
      count+=read; 
     } 
     return isUTF8 ? new String(baos.toByteArray(), "UTF-8") : new String(baos.toByteArray()); 
    } finally { 
     try{ is.close(); } catch(Exception ex){} 
    } 
} 

/** 
* Returns MAC address of the given interface name. 
* @param interfaceName eth0, wlan0 or NULL=use first interface 
* @return mac address or empty string 
*/ 
public static String getMACAddress(String interfaceName) { 
    try { 
     List<NetworkInterface> interfaces = Collections.list(NetworkInterface.getNetworkInterfaces()); 
     for (NetworkInterface intf : interfaces) { 
      if (interfaceName != null) { 
       if (!intf.getName().equalsIgnoreCase(interfaceName)) continue; 
      } 
      byte[] mac = intf.getHardwareAddress(); 
      if (mac==null) return ""; 
      StringBuilder buf = new StringBuilder(); 
      for (int idx=0; idx<mac.length; idx++) 
       buf.append(String.format("%02X:", mac[idx])); 
      if (buf.length()>0) buf.deleteCharAt(buf.length()-1); 
      return buf.toString(); 
     } 
    } catch (Exception ex) { } // for now eat exceptions 
    return ""; 
    /*try { 
     // this is so Linux hack 
     return loadFileAsString("/sys/class/net/" +interfaceName + "/address").toUpperCase().trim(); 
    } catch (IOException ex) { 
     return null; 
    }*/ 
} 


public static String getIPAddress(boolean useIPv4) { 
    try { 
     List<NetworkInterface> interfaces = Collections.list(NetworkInterface.getNetworkInterfaces()); 
     for (NetworkInterface intf : interfaces) { 
      List<InetAddress> addrs = Collections.list(intf.getInetAddresses()); 
      for (InetAddress addr : addrs) { 
       if (!addr.isLoopbackAddress()) { 
        String sAddr = addr.getHostAddress(); 
        //boolean isIPv4 = InetAddressUtils.isIPv4Address(sAddr); 
        boolean isIPv4 = sAddr.indexOf(':')<0; 

        if (useIPv4) { 
         if (isIPv4) 
          return sAddr; 
        } else { 
         if (!isIPv4) { 
          int delim = sAddr.indexOf('%'); // drop ip6 zone suffix 
          return delim<0 ? sAddr.toUpperCase() : sAddr.substring(0, delim).toUpperCase(); 
         } 
        } 
       } 
      } 
     } 
    } catch (Exception ex) { } // for now eat exceptions 
    return ""; 
} 

と私が使用する必要が活動には次のようになります。

String ip=Utils.getIPAddress(true); 
0

あなたは(あなたがTBHそれらを必要とする場合はかなり確実ではない)マニフェストに権限を追加しましたか?

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
+0

ええ、私はマニフェストで許可を受けました。 – Abhi

0

がためにこの仕事をしてみてください私

WifiManager wm = (WifiManager)getActivity().getSystemService(getActivity().WIFI_SERVICE); 
    String ip = Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress()); 
    Log.d("ipaddress",""+ip); 

のAndroidManifest.xml

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

0.0.0.0があなたの解決策から来ています。 – Abhi

+0

add access ACCESS_WIFI_STATE –

+0

私は以前の許可をしていました。 – Abhi