【问题标题】:Android WifiInfo.getMacAddress on Toshiba Folio东芝 Folio 上的 Android WifiInfo.getMacAddress
【发布时间】:2011-01-02 20:15:48
【问题描述】:

我一直在使用 WifiInfo.getMacAddress 字符串,如在我的 nexus 一个或我能够使用的任何其他移动设备上看到的那样,即格式为 01:02:03:04:05:06

但是我的应用程序的一位用户刚刚报告了Toshiba Folio100 的崩溃,我的 MAC 地址解析失败。由于我没有任何日志文件并且报告是匿名的,我无法联系那个人,所以我在这里问你是否知道它是如何在这种设备中编码的。

我想它可能像010203040506,但我没那么自信。

【问题讨论】:

    标签: android network-programming android-networking


    【解决方案1】:

    虽然我无法具体评论东芝 Folio,但我还是敦促您重新考虑如何解析 MAC 地址字符串。

    我多年前编写了代码来从 PC 中的 NIC 获取 MAC 地址 - 由于它使用卡的 PC 驱动程序,因此格式可能因制造商而异。 WifiInfo.getMACAddress() 的文档实际上并没有保证如何返回此字符串,因此请考虑为所有可能发生的情况做好准备。

    我看到了以下格式...

    01:02:03:04:05:06 // Delimited with ':' and padded to 2 chars
    1:2:3:4:5:6 // Delimited but if < 16, there was no leading '0'
    010203040506 // No delimiters but octets ALWAYS pre-padded with '0' when < 16
    

    注意:字母字符也可能是大写或小写(尽管在每种情况下都是一致的,即全部大写或全部小写)。示例...

    0A0B0C0D0E0F
    0a0b0c0d0e0f
    A:B:C:D:E:F
    a:b:c:d:e:f
    

    为了应付上面的情况,我先强制字符串toLower()。

    然后我检查了是否存在“:”。如果它存在,我会将字符串拆分为一个数组,然后检查数组中每个“八位字节字符串”的长度,如果长度 = 1,则不使用填充,所以我会添加前缀“0”。最后,我将通过使用 ':' 作为分隔符连接每个数组元素来重新组合字符串。

    如果字符串不包含 ':',那么我会确认它的长度 = 12,此时我将使用每对字符重新构建字符串并用 ':' 分隔。

    如果字符串没有分隔并且它的长度不是 12,那么将无法正确解析,我不得不假设请求 MAC 地址字符串失败并且我报告了错误的 MAC 地址。

    【讨论】:

    • 我同意你的观点,MisterSquonk。我将尝试用我错误的算法解析你的案例,看看异常是否与用户得到的相似。而且我刚刚读到这款 Toshiba Folio 100 由于太多错误而几乎从市场上退役,所以我猜网络部分也不是标准的,这就是为什么它是我的应用程序看到的唯一案例,它已经在许多不同的设备上进行了测试.同时,我希望能够联系到至少一位 Toshiba Folio100 用户,以验证修复。
    • @Carlo Medas:这是个好消息。祝你好运。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-23
    • 1970-01-01
    相关资源
    最近更新 更多