1. 程式人生 > >Android 手機獲取Mac地址的幾種方法

Android 手機獲取Mac地址的幾種方法

最常用的方法,通過WiFiManager獲取:

/**
     * 通過WiFiManager獲取mac地址
     * @param context
     * @return
     */
    private static String tryGetWifiMac(Context context) {
        WifiManager wm = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
        WifiInfo wi = wm.getConnectionInfo();
        if
(wi == null || wi.getMacAddress() == null) { return null; } if ("02:00:00:00:00:00".equals(wi.getMacAddress().trim())) { return null; } else { return wi.getMacAddress().trim(); } }

這個方法Android 7.0是獲取不到的,返回的是null,其實是返回“02:00:00:00:00:00”

根據本地IP獲取:

/**
     * 根據IP地址獲取MAC地址
     *
     * @return
*/
private static String getLocalMacAddressFromIp() { String strMacAddr = null; try { //獲得IpD地址 InetAddress ip = getLocalInetAddress(); byte[] b = NetworkInterface.getByInetAddress(ip).getHardwareAddress(); StringBuffer buffer = new
StringBuffer(); for (int i = 0; i < b.length; i++) { if (i != 0) { buffer.append(':'); } String str = Integer.toHexString(b[i] & 0xFF); buffer.append(str.length() == 1 ? 0 + str : str); } strMacAddr = buffer.toString().toUpperCase(); } catch (Exception e) { } return strMacAddr; } /** * 獲取移動裝置本地IP * * @return */ private static InetAddress getLocalInetAddress() { InetAddress ip = null; try { //列舉 Enumeration<NetworkInterface> en_netInterface = NetworkInterface.getNetworkInterfaces(); while (en_netInterface.hasMoreElements()) {//是否還有元素 NetworkInterface ni = (NetworkInterface) en_netInterface.nextElement();//得到下一個元素 Enumeration<InetAddress> en_ip = ni.getInetAddresses();//得到一個ip地址的列舉 while (en_ip.hasMoreElements()) { ip = en_ip.nextElement(); if (!ip.isLoopbackAddress() && ip.getHostAddress().indexOf(":") == -1) break; else ip = null; } if (ip != null) { break; } } } catch (SocketException e) { e.printStackTrace(); } return ip; }

這個方法Android 7.0及其以下版本都可以獲取到。

根據網路介面獲取:

    /**
     * 通過網路介面取
     * @return
     */
    private static String getNewMac() {
        try {
            List<NetworkInterface> all = Collections.list(NetworkInterface.getNetworkInterfaces());
            for (NetworkInterface nif : all) {
                if (!nif.getName().equalsIgnoreCase("wlan0")) continue;

                byte[] macBytes = nif.getHardwareAddress();
                if (macBytes == null) {
                    return null;
                }

                StringBuilder res1 = new StringBuilder();
                for (byte b : macBytes) {
                    res1.append(String.format("%02X:", b));
                }

                if (res1.length() > 0) {
                    res1.deleteCharAt(res1.length() - 1);
                }
                return res1.toString();
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return null;
    }

注意網路介面的Name有跟多:dummy0、p2p0、wlan0….其中wlan0就是我們需要WiFi mac地址。這個方法Android 7.0及其以下版本都可以獲取到。

相關推薦

Android 手機獲取Mac地址方法

最常用的方法,通過WiFiManager獲取: /** * 通過WiFiManager獲取mac地址 * @param context * @return */ private static String t

Android 手機獲取Mac地址方法

轉載地址:https://blog.csdn.net/yushuangping/article/details/83245847 這期需求,要求從系統裝置上獲取一個唯一碼作為當前登入使用者的唯一標識,最後決定採用mac地址。 第一種: 官方獲取

Android獲取FPS的方法

sunrain_hjb的BLOG ARM.WinCE.Android.Robot.Linux.IoT.VR... Develop Helpful and Effective apps to make Jobs easier and lives Better!

Spring 獲取 request 的方法及其線程安全性分析

就是 base p地址 sco 便是 情況 C4D cookie tex 本文將介紹在Spring MVC開發的Web系統中,獲取request對象的幾種方法,並討論其線程安全性。 一、概述 在使用Spring MVC開發Web系統時,經常需要在處理請求時使用request

Android去掉標題欄的方法

1、直接在重寫的onCreate方法中說明 注意: this.requestWindowFeature(Window.FEATURE_NO_TITLE); 需要在setContentView(R.layout.activity_main);這一句上面。 2、在Andro

JS獲取DOM的方法

tar ren nod 找到 綁定 inpu 相同 html node JS獲取DOM和幾種方法 通過ID獲取(getElementById) 通過name屬性(getElementsByName) 通過標簽名(getElementsByTagName) 通過類名(get

android 超長圖顯示的方法

問題:用ImageView控制元件載入長圖的時候會遇到這樣的一個問題,同一張長圖在有些機型可以正常顯示,但是在部分機型確顯示不了。 原因:當APP開啟硬體加速的時候,GPU對於openglRender 渲染有一個限制值,超過了這個限制值,就無法渲染,不同的手機會有不同的限制值; j針對這

(一百零五)Android O 獲取mac地址流程分析

1.流程分析 1.1 WifiInfoPreferenceController public void updateWifiInfo() { if (mWifiMacAddressPref != null) { final

Java從檔案路徑中獲取檔名的方法

Java從檔案路徑中獲取檔名的幾種方法 舉例:String fName =” G:\Java_Source\navigation_tigra_menu\demo1\img\lev1_arrow.gif ” 方法一: ? View Code 

html5 如何打包成apk,將H5封裝成android應用APK檔案的方法

直接使用程式設計軟體提供的方法: 1、需要下載安裝MyEclipse2014,Android SDK,eclipse(需配置Android開發環境) Java和Android環境安裝與配置。 2、開啟MyEclipse2014,新建一個HTML5 Mobile Ap

java中獲取時間的方法

1. 通過Date類來獲取當前時間 Date day=new Date(); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:

python 獲取路徑的方法

1、sys.path[0] 獲取當前執行的python檔案路徑,無論是在別的模組中的什麼位置 使用sys.path[0] 都會返回同一個值,當前執行的Python檔案路徑。 2、os.getcwd() 獲取Python的工作目錄。預設就是命令列執行命令的路徑,但是可以通

獲取session的方法

獲取session常用的幾種方法 1.spring mvc中 HttpServletRequest request = ((ServletRequestAttributes) RequestConte

Android非同步更新UI的方法

前言  我們知道在android開發中不能在非ui執行緒中更新ui,但是,有的時候我們需要在程式碼中執行一些諸如訪問網路、查詢資料庫等耗時操作,為了不阻塞ui執行緒,我們時常會開啟一個新的執行緒(工作執行緒)來執行這些耗時操作,然後我們可能需要將查詢到的資料渲

Android獲取Bitmap的方式總結

ApplicationInfo appInfo = getApplicationInfo(); //得到該圖片的id(name 是該圖片的名字,"drawable" 是該圖片存放的目錄,appInfo.packageName是應用程式的包) int resID = getResources().getIde

記錄Android中實現滑動的方法

一、layou方法 程式碼示例如下,自定義一個view,在onTouchEvent()方法中計算手指滑動時的偏移量,呼叫view的layout()方法,在當前left、top、right、bottom上加上偏移量,實現view的滑動。 public clas

獲取HDC的方法

當需要在顯示器上(當然包括印表機等裝置上)繪圖時,或者寫文字的時候,需要取得裝置的上下文控制代碼,即HDC,本文以下都稱為HDC。那麼,有哪些辦法取得HDC呢? 1 BeginPain()和EndPaint() 在處理WM_PAINT訊息時,使用 hdc = BeginPa

從網路獲取圖片的方法

通過API獲取網路的圖片下載,這裡以天行資料為例,做簡要實驗。 資料獲取地址:網站地址(key請在個人中心獲取,需註冊,然後在個人中心複製,替換APIKEY即可) 1. Python方法

spring獲取webapplicationcontext,applicationcontext方法詳解

方法一:在初始化時儲存ApplicationContext物件 程式碼: ApplicationContext ac = new FileSystemXmlApplicationContext("applicationContext.xml"); ac.getBean("

Android Studio匯入專案的方法

Android Studio,最近也在試著使用它,原因是多方面的,一個畢竟是未來的趨勢,二則是github上越來越多的大牛開源專案都是基於Android Studio的,因此會使用Android Studio就成為一件必須的任務。 本文主要說一下如何在Android Studio中匯入已有的專案進去