android Ip获取过滤掉ipv6正确获取到IP
public class MainActivity extends Activity {
private TextView iptv;
private TextView iptv2;
private String outips;
Handler mHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case 0:
iptv.setText(outips);
break;
default:
break;
}
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iptv = (TextView) findViewById(R.id.ip);
iptv2 = (TextView) findViewById(R.id.ip2);
// 获取wifi服务
String ips = null;
try {
ips = GetIpAddress();
iptv2.setText(ips);
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private String intToIp(int i) {
return (i & 0xFF) + "." + ((i >> 8) & 0xFF) + "." + ((i >> 16) & 0xFF)
+ "." + (i >> 24 & 0xFF);
}
/**
* if (intf.getName().toLowerCase().equals("eth0") ||
* intf.getName().toLowerCase().equals("wlan0")) 表示:仅过滤无线和有线的ip.
* networkInterface是有很多的名称的 比如sim0,remt1.....等等.我不需要用到就直接过滤了
*
* if (!ipaddress.contains("::")) 表示: 过滤掉ipv6的地址.不管无线还是有线 都有这个地址,
* 我这边显示地址大体是:fe80::288:88ff:fe00:1%eth0 fe80::ee17:2fff:fece:c0b4%wlan0
* 一般都是出现在第一次循环.第二次循环就是真正的ipv4的地址.
*
* @return
* @throws SocketException
*/
public String GetIpAddress() throws SocketException {
String ipaddress = "";
Enumeration<NetworkInterface> netInterfaces = null;
try {
netInterfaces = NetworkInterface.getNetworkInterfaces();
while (netInterfaces.hasMoreElements()) {
NetworkInterface intf = netInterfaces.nextElement();
if (intf.getName().toLowerCase().equals("eth0")
|| intf.getName().toLowerCase().equals("wlan0")) {
for (Enumeration<InetAddress> enumIpAddr = intf
.getInetAddresses(); enumIpAddr.hasMoreElements();) {
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress()) {
ipaddress = inetAddress.getHostAddress().toString();
if (!ipaddress.contains("::")) {// ipV6的地址
ipaddress = ipaddress;
}
}
}
} else {
continue;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return ipaddress;
}
String GetNetIp(String ipaddr) {
URL infoUrl = null;
InputStream inStream = null;
try {
infoUrl = new URL(ipaddr);
URLConnection connection = infoUrl.openConnection();
HttpURLConnection httpConnection = (HttpURLConnection) connection;
int responseCode = httpConnection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
inStream = httpConnection.getInputStream();
BufferedReader reader = new BufferedReader(
new InputStreamReader(inStream, "utf-8"));
StringBuilder strber = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null)
strber.append(line + "\n");
inStream.close();
return strber.toString();
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "";
}
// private InetAddress getLocalIpAddress() throws UnknownHostException {
// WifiManager wifiManager = (WifiManager) MainActivity.this
// .getSystemService(android.content.Context.WIFI_SERVICE);
// WifiInfo wifiInfo = wifiManager.getConnectionInfo();
// int ipAddress = wifiInfo.getIpAddress();
// return InetAddress.getByName(String.format("%d.%d.%d.%d",
// (ipAddress & 0xff), (ipAddress >> 8 & 0xff),
// (ipAddress >> 16 & 0xff), (ipAddress >> 24 & 0xff)));
// }
}