转自: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; //本机IPpublic static String MAC; //本机MAC Button btn=null;EditText ip_txt=null;EditText mac_txt=null;@Overridepublic 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(); //获取本机IPMAC = 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 Inet6Addressreturn 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