2

我正在尝试在 Android 中的 XBMC linux 环境中编写插件。我可以在 XBMC 中看到 Mac 地址。但我想获取插件的mac地址,但我不知道怎么做。

mac=uuid.getnode()

我已经尝试过使用上面的代码,但是每次在 android 中运行时只给我数字并且每次都不同。

有人可以提出任何建议吗

4

3 回答 3

3

如果您查看文档

以 48 位正整数形式获取硬件地址。第一次运行时,它可能会启动一个单独的程序,这可能会很慢。如果所有获取硬件地址的尝试都失败了,我们会按照 RFC 4122 的建议选择一个随机的 48 位数字,并将其第八位设置为 1。

第一部分解释了为什么它是“仅数字”。它应该是一个数字。如果你想要某种特定的十六进制字符串格式,只需格式化它——例如,通过调用hex().

最后一句话解释了为什么它“每次都不一样”。如果您查看源代码,在任何非 Windows 平台上,getnode都会尝试_unixdll_getnode,然后_ifconfig_getnode,然后回退到一个随机数。前者需要一个uuid_generate_timelibuuidor中调用的函数libc,这在 Android 上不存在。后者ifconfig使用一系列不同的标志运行命令并搜索特定的字符串,然后回退到arpand lanscan。同样,这些都不适用于 Android。

在 Android 上没有推荐的获取 MAC 地址的方法,主要是因为他们不希望你得到一个。这篇博文解释了原因,这个 SO 问题(尤其是 Seka Alekseyev 的回答)增加了更多细节。一些应用程序在获得 MAC 地址后会尝试保留它,并且不再检查,这解决了一些问题,但不是大多数问题。

有一个 Java API 可以为每个有意义的服务获取 MAC——WiFi、3G、蓝牙等。由您决定哪个是“该”MAC,并且您需要正确的权限(例如,android.permission.ACCESS_WIFI_STATE),并且可能没有值或垃圾值,但您可以使用如下代码获取它:

WifiManager wm = (WifiManager)getSystemService(Context.WIFI_SERVICE);
String mac = wm.getConnectionInfo().getMacAddress();

据我所知,SL4A 或任何其他 Android Python 发行版中都没有直接公开这些函数的内容,因此您必须编写自己的包装器。

于 2013-02-01T00:10:55.700 回答
3

您可以使用XBMC 信息标签

if xbmc.getInfoLabel('Network.MacAddress') != None:
    mac_address = xbmc.getInfoLabel('Network.MacAddress')
else:
    mac_address = None
于 2014-03-03T17:33:59.380 回答
0

您可以通过这种简单的方式获取 mac 地址,假设“eth0”是您的网络设备名称:

o = open('/sys/class/net/eth0/address', 'r')

mac_address = o.read().strip() #on "ff:ff:ff:ff:ff:ff" 形式

于 2013-05-22T04:56:17.380 回答