如何使用Java代码获取Android移动终端Mac地址

快下班了,现在总结一下如何使用Java代码获取Android移动终端Mac地址:

通过设备开通WiFi连接获取Mac地址是最可取的,代码如下:

	/**
	 * 设备开通WiFi连接,通过wifiManager获取Mac地址
	 *
	 * @author 高焕杰
	 */
	public static String getMacFromWifi(Context context){
		ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
		State wifiState = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();
		if(wifiState == NetworkInfo.State.CONNECTED){//判断当前是否使用wifi连接
	        WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
	        if (!wifiManager.isWifiEnabled()) { //如果当前wifi不可用
	        	wifiManager.setWifiEnabled(true);
	        }
	        WifiInfo wifiInfo = wifiManager.getConnectionInfo();
	        return wifiInfo.getMacAddress();
		}
        return null;
	}

除了上面这种方法,网上还给出了另外两种方法:

1、通过调用Linux的busybox命令获取Mac地址:

	/**
	 * 通过调用Linux的busybox命令获取Mac地址
	 *
	 * @author 高焕杰
	 */
	private static String getMacFromCallCmd(){
        try {
        	String readLine = "";
        	Process process = Runtime.getRuntime().exec("busybox ifconfig");
            BufferedReader bufferedReader = new BufferedReader (new InputStreamReader(process.getInputStream()));
            while ((readLine = bufferedReader.readLine ()) != null) {//执行命令cmd,只取结果中含有"HWaddr"的这一行
            	if(readLine.contains("HWaddr")){
            		return readLine.substring(readLine.indexOf("HWaddr")+6, readLine.length()-1);
            	}
            }
        }catch(Exception e) {  //如果因设备不支持busybox工具而发生异常。
            e.printStackTrace();
        }
        return null;
	}

注意:这种方法在Android Pad中可以准确获取到的Mac地址,但是在Android手机中无法准确获取到。

2、通过查询记录了MAC地址的文件(文件路径:“/proc/net/arp”)获取Mac地址:

/**
	 * 通过查询记录了MAC地址的文件(文件路径:“/proc/net/arp”)获取Mac地址
	 *
	 * @author 高焕杰
	 */
    private static String getMacFromFile(Context context){
    	String readLine ="";
        BufferedReader bufferedReader = null;
        try {
        	bufferedReader = new BufferedReader(new FileReader(new File("/proc/net/arp")));
            int rollIndex = 0;
            while((readLine = bufferedReader.readLine())!=null){
            	if(rollIndex == 1){
	            	break;
            	}
            	rollIndex = rollIndex + 1;
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (bufferedReader != null) {
                try {
                	bufferedReader.close();
                } catch (IOException e) {
                	e.printStackTrace();
                }
            }
        }
        if(readLine !=null && readLine.length()>1){
        	String[] subReadLineArray = readLine.split(" ");
        	int rollIndex = 1;
    		for(int i = 0; i < subReadLineArray.length; ++i){
            	if(!TextUtils.isEmpty(subReadLineArray[i])){
            		if(rollIndex == 4){
            			return subReadLineArray[i];
            		}
            		rollIndex = rollIndex + 1;
            	}
            }
        }
    	return null;
    }

注意:无论在Android Pad中还是在Android手机中,这种方法都无法准确获取到Mac地址。

0分下载示例

时间: 2024-08-12 12:27:29

如何使用Java代码获取Android移动终端Mac地址的相关文章

如何使用Java代码获取文件、文件流或字符串的编码方式

今天通过网络资源研究了一下如何使用Java代码获取文件.文件流或字符串的编码方式,现将代码与大家分享: package com.ghj.packageoftool; import info.monitorenter.cpdetector.io.ASCIIDetector; import info.monitorenter.cpdetector.io.ByteOrderMarkDetector; import info.monitorenter.cpdetector.io.CodepageDete

Java代码获取NTP服务器时间

apache的commons-net包下面有ntp相关的实现类,主要类有: 1  org.apache.commons.net.ntp.NTPUDPClient ? 1  org.apache.commons.net.ntp.TimeInfo 类NTPUDPClient中相关方法: ? 1  TimeInfo getTime(InetAddress host, int port) throws IOException ? 1 TimeInfo getTime(InetAddress host) 

通过Java代码获取系统信息

在开发中,我们需要获取JVM中的信息,以及操作系统信息,内存信息,CPU信息,磁盘信息,网络信息等,通过Java的API不能获取内存等信息,需要sigar的第三方依赖包. ①:加入依赖 <dependency> <groupId>org.hyperic.sigar</groupId> <artifactId>com.springsource.org.hyperic.sigar</artifactId> <version>1.6.3&l

java 获取访问者ip和mac地址

获取访问者ip,代码: <% String sip=""; try{ sip = (String)request.getRemoteAddr(); }catch(Exception e){ } %> 获取访问者mac地址,法是用UDP协议来发送查询mac指令然后返回值中解析mac.代码 <% String smac = ""; String sip = request.getHeader("x-forwarded-for");

Java如何获取本地计算机的IP地址和主机名?

在Java编程中,如何获取本地计算机的IP地址和主机名? 以下示例显示如何使用InetAddress类的getLocalAddress()方法获取系统的本地IP地址和主机名. package com.yiibai; import java.net.InetAddress; public class GetLocalIPAddress { public static void main(String[] args) throws Exception { InetAddress addr = Ine

java获取当前计算机网卡MAC地址

package com.yjm.testmac; import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; import java.net.UnknownHostException; import java.util.Enumeration; public class MacTest { public static void main(String[] args)

java获取硬盘ID以及MAC地址

http://blog.csdn.net/coolwzjcool/article/details/6698327 为了达到软件注册,或者说软件和电脑绑定的目的,需要将电脑上的固定编号进行一系列的算法计算,并生成唯一和软件匹配的号码. 那么使用java如何达到这个目的呢? 通常做法都是通过java的Runtime来完成,通过 process的输入流,进行获取相关的信息. 下面列举具体的例子: 1.DiskUtils 获取硬盘编号 import java.io.File; import java.i

Java里面获取当前服务器的IP地址

java中获取当前服务器地址主要使用到InetAddress这个类 public static void main(String[] args) { try { //用 getLocalHost() 方法创建的InetAddress的对象 InetAddress address = InetAddress.getLocalHost(); System.out.println(address.getHostName());//主机名 System.out.println(address.getCa

通过安卓应用获取任意蓝牙设备的MAC地址

最近做一个安卓应用,用蓝牙信号控制一台仪器,通过一个蓝牙转串口的装置,发送蓝牙信号,然后转换为串口命令发送给仪器.蓝牙装置如下: 在写安卓应用中的java代码时,如何获取这个蓝牙设备呢?BluetoothAdapter 的 getRemoteDevice(address) 方法可以通过MAC地址来获取蓝牙设备: BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address); 但问题来了,这个蓝牙设备的MAC地址是多少呢?