Android获取mac地址

转载 2015年07月07日 10:32:18

原文地址:http://www.cnblogs.com/Amandaliu/archive/2012/12/04/2802322.html

esult = wifiInfo.getMacAddress();
        Log.i(TAG_NETWORK,"Mac address(wifi): "+mResult);
        return mResult;
	}

这个是需要设备开通Wifi连接,获取到网卡的MAC地址

另,贴上,判断当前是否为wifi连接方式:

    //判断当前是否使用wifi连接
    private static boolean isWifiConnected(Context context){
    	ConnectivityManager cm;
    	cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    	boolean result = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.CONNECTED ? true : false ;
    	
    	Log.i(TAG_NETWORK,"isWifiConnected: "+result);
    	return result;
    }

(4) 调用Linux的busybox

	/**
	 * 通过callCmd("busybox ifconfig","HWaddr")获取mac地址
	 * @attention 需要设备装有busybox工具
	 * @return Mac Address
	 */
	private static String getMacFromCallCmd(){
		String result = "";
        result = callCmd("busybox ifconfig","HWaddr");
        
        if(result == null || result.length() <= 0){
        	Log.i(TAG_NETWORK,"callCmd returns null or empty");
        	return null;
        }
        
        //对该行数据进行解析
        //例如:eth0      Link encap:Ethernet  HWaddr 00:16:E8:3E:DF:67
        if(result.length()>0 && result.contains("HWaddr")==true){
        	String Mac = result.substring(result.indexOf("HWaddr")+6, result.length()-1);
        	Log.i(TAG_NETWORK,"Mac:"+Mac+" Mac.length: "+Mac.length());  
        	if(Mac.length()>1){
        		Mac = Mac.replaceAll(" ", "");
        		result = "";
        		
        		String[] tmp = Mac.split(":");
        		for(int i = 0;i<tmp.length;++i){
        			result +=tmp[i];
        		}
        	}
        	
        	Log.i(TAG_NETWORK,result+" result.length: "+result.length());
        }
    	Log.i(TAG_NETWORK,"Mac address(CallCmd): "+result);

        return result;
	}

其他相关函数:

   public static String callCmd(String cmd,String filter) {   
        String result = "";   
        String line = "";   
        try {
        	Process proc = Runtime.getRuntime().exec(cmd);
            InputStreamReader is = new InputStreamReader(proc.getInputStream());   
            BufferedReader br = new BufferedReader (is);   
            
            //执行命令cmd,只取结果中含有filter的这一行
            while ((line = br.readLine ()) != null && line.contains(filter)== false) {   
            	//result += line;
            	Log.i("test","line: "+line);
            }
            
            result = line;
            Log.i("test","result: "+result);
        }   
        catch(Exception e) {   
            e.printStackTrace();   
        }   
        return result;   
    } 

这个需要设备支持busybox工具。现在发现一些设备是没有安装该工具的,这时使用该方法,会报错。

(5)查询记录了MAC地址的文件“/proc/net/arp”

需要有这个文件,并且记录了相应的内容

   /**  
     * get the Mac Address from the file /proc/net/arp
     * @param context
     * @attention the file /proc/net/arp need exit 
	 * @return Mac Address
     */
    private static String getMacFromFile(Context context){
    	String mIP = Config.getIpAddress(context);
    	if(mIP == null || mIP.length()<=0)
    		return null;
    	
        List<String> mResult = readFileLines("/proc/net/arp");
        
        Log.d(TAG_NETWORK,"=======  /proc/net/arp  =========");
        for(int i =0;i<mResult.size();++i)
        	Log.d("line",mResult.get(i));
        Log.d(TAG_NETWORK,"===========================");
        
        
        if(mResult !=null && mResult.size()>1){        	
        	for(int j =1;j<mResult.size();++j){
        		List<String> mList = new ArrayList<String>();
        		String[] mType = mResult.get(j).split(" ");
        		for(int i =0;i<mType.length;++i){
                	if(mType[i]!=null && mType[i].length()>0)
                		mList.add(mType[i]);
                }

        		if(mList!=null && mList.size()>4 && mList.get(0).equalsIgnoreCase(mIP)){
	                    String result="";
	                    String[] tmp = mList.get(3).split(":");
	            		for(int i = 0;i<tmp.length;++i){
	            			result +=tmp[i];
	            		}
	            		result = result.toUpperCase();
	            		Log.i(TAG_NETWORK,"Mac address(file): "+result);
            		return result;
        		}
        	}
        }
    	return null;
    }


 

	 /**
     * 以行为单位读取文件,常用于读面向行的格式化文件
     */
    private static List<String> readFileLines(String fileName) {
        File file = new File(fileName);
        BufferedReader reader = null;
        String tempString ="";
        List<String> mResult = new ArrayList<String>();
        try {
        	Log.i("result","以行为单位读取文件内容,一次读一整行:");
            reader = new BufferedReader(new FileReader(file));
            while((tempString = reader.readLine())!=null){
            	mResult.add(tempString);
            }
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e1) {
                }
            }
        }
        
        return mResult;
    }

记录了MAC地址的文件“/proc/net/arp”内容大致如下:

IP address       HW type     Flags       HW address            Mask     Device
10.63.253.193    0x1         0x2         00:11:92:06:85:3f     *        eth0
10.63.253.194    0x1         0x2         00:11:92:06:85:3a     *        eth1
10.63.253.195    0x1         0x2         00:11:92:06:85:3b     *        eth2


Android获取Mac地址

  • 2015年01月20日 14:25
  • 1.14MB
  • 下载

关于获取Android6.0的MAC地址

最近接触6.0,发现使用单纯的wifiManager.getConnectionInfo().getMacAddress();方法获取不到MAc地址。后来Google一下发现 Google对硬件信息的...

android 获取mac地址源码

  • 2014年09月15日 19:01
  • 1.4MB
  • 下载

获取Android设备ID和Mac地址的apk

  • 2015年09月21日 17:34
  • 320KB
  • 下载

Android 获取WIFI MAC地址的方法

1. 常用方法,调用Android的API:WifiManager WifiManager wifi = (WifiManager) getSystemService(Context.WIF...

android jni获取 Mac地址

  • 2012年07月04日 11:51
  • 226KB
  • 下载

Android获取Mac地址-适配所有版本

最近由于项目需要MAC地址的记录,搞了一个通用的适配类,目前经过测试可以适配Android所有版本,我测试过的设备系统Android 4 5 6 7 7+都可以获取到,废话不多说直接上代码,简洁: ...

Android 在wifi下获取IP和MAC地址

转自 http://www.2cto.com/kf/201207/143403.html   Button   01 android:id="@+id/btn" 03 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android获取mac地址
举报原因:
原因补充:

(最多只允许输入30个字)