zoukankan      html  css  js  c++  java
  • android程序获取WIFI的IP地址和MAC地址

    转自: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

  • 相关阅读:
    数据库字段太多,批量快速建立实体类方法(适合大量字段建立实体类)
    SQL service 中的 ”输入SQL命令窗口“ 打开了 “属性界面” 回到 ”输入SQL命令窗口“
    计算机软件编程英语词汇集锦
    编程常用英语词汇
    svn上传和下载项目
    当启动tomcat时出现tomcat setting should be set in tomcat preference page
    Implicit super constructor Object() is undefined for default constructor. Must define an explicit constructor
    eclipse中选中一个单词 其他相同的也被选中 怎么设置
    Spring Boot的@SpringBootApplication无法引入的问题
    最全的SpringCloud视频教程
  • 原文地址:https://www.cnblogs.com/qrlozte/p/3670832.html
Copyright © 2011-2022 走看看