转自:http://my.oschina.net/chenj/blog/68680
近日在鼓捣这玩意,拿出来大家分享一下,代码比较简单,如果有不懂的再问
<Button android:id="@+id/btn" android:text="获取IP" android:layout_width="fill_parent" android:layout_height="wrap_content" android:onClick="onclick" /> <EditText android:id="@+id/ip_txt" android:layout_width="fill_parent" android:layout_height="wrap_content"/> <EditText android:id="@+id/mac_txt" android:layout_width="fill_parent" android:layout_height="wrap_content"/>
//这里是权限,添加为AndroidManifest.xml的<manifest>的子节点
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> <uses-permission android:name="android.permission.INTERNET"></uses-permission>
//接下来就是正文(注意IPV4与IPV6的区别,见注释)
package com.wifi; import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; import java.util.Enumeration; import android.app.Activity; import android.content.Context; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; public class MainActivity extends Activity { public static String IP; //本机IP public static String MAC; //本机MAC Button btn=null; EditText ip_txt=null; EditText mac_txt=null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); btn=(Button)findViewById(R.id.btn); ip_txt=(EditText)findViewById(R.id.ip_txt); mac_txt=(EditText)findViewById(R.id.mac_txt); } public void onclick(View v){ switch (v.getId()) { case R.id.btn: IP = getLocalIpAddress(); //获取本机IP MAC = getLocalMacAddress();//获取本机MAC ip_txt.setText(IP); mac_txt.setText(MAC); break; } } public String getLocalIpAddress() { try { for (Enumeration<NetworkInterface> en = NetworkInterface .getNetworkInterfaces(); en.hasMoreElements();) { NetworkInterface intf = en.nextElement(); for (Enumeration<InetAddress> enumIpAddr = intf .getInetAddresses(); enumIpAddr.hasMoreElements();) { InetAddress inetAddress = enumIpAddr.nextElement(); if (!inetAddress.isLoopbackAddress()&&(inetAddress instanceof Inet4Address)) { // 这是只获取IPV4的,如果要获取IPV6的,改成instanceof Inet6Address return inetAddress.getHostAddress().toString(); } } } } catch (SocketException ex) { Log.e("WifiPreference IpAddress", ex.toString()); } return null; } public String getLocalMacAddress() { WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); WifiInfo info = wifi.getConnectionInfo(); return info.getMacAddress(); } }
另一种方法:
WifiManager wifi_service = (WifiManager)getSystemService(WIFI_SERVICE); //检查wifi是否开启 if(!wifimanage.isWifiEnabled()) { wifimanage.setWifiEnabled(true); } WifiInfo wifiinfo= wifimanage.getConnectionInfo(); String ip=intToIp(wifiinfo.getIpAddress()); //将获取的int转为真正的ip地址,参考的网上的,修改了下 private String intToIp(int i) { return (i & 0xFF)+ "." + ((i >> 8 ) & 0xFF)? + "." + ((i >> 16 ) & 0xFF) +"."+((i >> 24 ) & 0xFF ); }
关于WifiManager的用法:http://blog.csdn.net/zd_1471278687/article/details/12158367