AndroidはMacアドレス(WIFI、モバイルネットワーク、LAN)を取得します.

4435 ワード

投稿元アドレス:http://blog.csdn.net/zxw136511485/article/details/52161269
macアドレスを取得するには、一般的に3つの状況があります.WIFI、モバイルネットワーク、lanポート、インターネットを一周しました.ほとんどはWIFIをサポートしています.モバイルネットワークとlanポートの状況を考慮していません.6.0システムの状況を考慮して、ようやくこの3つの状況に対応できる方法を見つけました.
/** 
 *   Mac   
 */  
public class MacUtils {  


    /** 
     *      MAC   
     *  
     * @return 
     */  
    public static String getMac() {  
        String str = "";  
        String macSerial = "";  
        try {  
            Process pp = Runtime.getRuntime().exec(  
                    "cat /sys/class/net/wlan0/address ");  
            InputStreamReader ir = new InputStreamReader(pp.getInputStream());  
            LineNumberReader input = new LineNumberReader(ir);  

            for (; null != str;) {  
                str = input.readLine();  
                if (str != null) {  
                    macSerial = str.trim();//      
                    break;  
                }  
            }  
        } catch (Exception ex) {  
            ex.printStackTrace();  
        }  
        if (macSerial == null || "".equals(macSerial)) {  
            try {  
                return loadFileAsString("/sys/class/net/eth0/address")  
                        .toUpperCase().substring(0, 17);  
            } catch (Exception e) {  
                e.printStackTrace();  

            }  

        }  
        return macSerial;  
    }  

    public static String loadFileAsString(String fileName) throws Exception {  
        FileReader reader = new FileReader(fileName);  
        String text = loadReaderAsString(reader);  
        reader.close();  
        return text;  
    }  

    public static String loadReaderAsString(Reader reader) throws Exception {  
        StringBuilder builder = new StringBuilder();  
        char[] buffer = new char[4096];  
        int readLength = reader.read(buffer);  
        while (readLength >= 0) {  
            builder.append(buffer, 0, readLength);  
            readLength = reader.read(buffer);  
        }  
        return builder.toString();  
    }     

}  
PS:6.0にはAndroid Manifest.xmlが必要です.以下の2つの権限を入れてください.
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />  
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />