当前位置: 首页 > 知识库问答 >
问题:

如何通过代码获取android设备的MAC地址(WIFI已关闭)?

栾烨华
2023-03-14

我需要设计一个Android应用程序,应该显示设备的MAC地址..我已经完成了以下编码..

WifiManager wifimanager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiInfo winfo = wifimanager.getConnectionInfo();
String MACAddress = winfo.getMACAdress();

但问题是,这段代码只有在wifi打开的情况下才起作用,而我的要求是无论wifi是否打开都要找到MAC地址。

共有2个答案

连乐
2023-03-14
    private TextView btnInfo;
    private View txtWifiInfo;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        txtWifiInfo = (TextView) findViewById(R.id.idTxt);
        btnInfo = (Button) findViewById(R.id.idBtn);
    }
    public void getWifiInformation(View view){
        WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE);
        WifiInfo wifiInfo = wifiManager.getConnectionInfo();
        int ip = wifiInfo.getIpAddress();
        String macAddress = wifiInfo.getMacAddress();
        String bssid = wifiInfo.getBSSID();



        int rssi = wifiInfo.getRssi();
        int linkspeed = wifiInfo.getLinkSpeed();
        String ssid = wifiInfo.getSSID();
        int networkId = wifiInfo.getNetworkId();
        String ipAddress = Formatter.formatIpAddress(ip);
        String info = "Ipaddress: " + ipAddress +
                "\n" + "MacAddress: " +macAddress +
                "\n" + "BSSID: " + bssid +
                "\n" + "SSID: " + ssid +
                "\n" +  "NetworkId: "+ networkId;
                 // "\n" + "RSSI: " + rssi +
               // "\n" + linkspeed + "Link Speed: ";
        txtWifiInfo.setText(info);
    }
}
逄岳
2023-03-14

这是在不使用wifi管理器的情况下获取Mac地址的代码。

public static String getMACAddress(String interfaceName) {
    try {
        List<NetworkInterface> interfaces = Collections.list(NetworkInterface.getNetworkInterfaces());
        for (NetworkInterface intf : interfaces) {
            if (interfaceName != null) {
                if (!intf.getName().equalsIgnoreCase(interfaceName)) continue;
            }
            byte[] mac = intf.getHardwareAddress();
            if (mac==null) return "";
            StringBuilder buf = new StringBuilder();
            for (int idx=0; idx<mac.length; idx++)
                buf.append(String.format("%02X:", mac[idx]));       
            if (buf.length()>0) buf.deleteCharAt(buf.length()-1);
            return buf.toString();
        }
    } catch (Exception ex) { } 
    return "";

}

一些android设备可能没有可用的wifi或正在使用以太网布线。并根据可用的网络调用此方法。

getMACAddress("wlan0"); //using wifi available
getMACAddress("eth0"); //using ethernet connection availale

并且不要忘记设置清单权限。

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
 类似资料:
  • 问题内容: 我需要在Swift中获取iOS设备的IP地址。这不是其他有关此问题的重复!如果没有wifi IP地址,我只需要获取WiFiIP地址-我需要处理它。关于堆栈溢出有一些问题,但是只有返回IP地址的函数。: 在这里,我得到2个值-来自移动互联网的地址(我认为)和需要的WiFi地址。还有其他方法可以获取仅WiFi IP地址吗? 问题答案: 根据多个SO线程(例如,iOS网络接口名称的确切含义是

  • 问题内容: 看来android的java.net.NetworkInterface实现没有 byte [] getHardwareAddress()方法 http://developer.android.com/reference/java/net/NetworkInterface.html 我发现有几个论坛的人都试图这样做,但没有明确的答案,我需要获得一个跨设备的UUID,所以我不能依赖电话号码

  • 问题内容: 我是Serval Project的开发人员之一,我们正在考虑将华为Ideos U1850 作为我们Android开发活动的默认平台。 我们已经从我们在澳大利亚的一家本地经销商那里购买了几部手机。 我们注意到,我们从该供应商处采购的许多设备都具有相同的WiFi MAC地址。 具体来说,我们看到的MAC地址如下: 00:90:4C:14:43:19 具有相同MAC地址的多个设备给我们的开发

  • 问题内容: 我正在寻找一种方法(使用python)从本地网络上的设备获取地址。 地址是已知的。 目标是建立一个脚本,该脚本将定期轮询IP地址数据库,以确保mac地址没有更改,如果有更改,则将电子邮件警报发送给我自己。 问题答案: 用Python回答问题取决于您的平台。我没有Windows,因此以下解决方案可在我写过的Linux机器上使用。对正则表达式进行小的更改将使其在OS X中运行。 首先,您必

  • 问题内容: 我使用的是Api级别8的Android,我想获取我的以太网接口的地址(eth0)。 在API级别8中,NetworkInterface类没有函数getHardwareAddress()。WifiManager也不起作用,因为它不是无线接口。 提前致谢! 问题答案: 假设您的以太网接口是eth0,请尝试打开并读取文件。

  • 嗨,我正试图找到从android连接到我的WIFI路由器的所有设备,我需要设备每个设备(包括物联网设备)的Mac地址和本地ip地址,现在,我正尝试从ARP缓存表中查找。但有时在扫描中,一些设备丢失,这不是那么准确。 我的代码: 如何准确扫描android中的所有设备(IP地址和Mac地址)。