我一直在使用我的nexus或我能够使用的任何其他移动设备上看到的WifiInfo.getMacAddress
字符串,即格式为01:02:03:04:05:06
但我的应用程序的一位用户刚报告Toshiba Folio100
崩溃,我的MAC地址解析失败。由于我没有任何日志文件且报告是匿名的,我无法联系那个人,所以我在这里问你是否知道它是如何在这种设备中编码的。
我想它可能就像010203040506
但我不那么自信。
答案 0 :(得分:2)
虽然我不能专门评论东芝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
为了解决上述问题,我首先将字符串强制为Lower()。
然后我检查了':'的存在。如果它存在我将字符串拆分成一个数组,然后检查数组中每个'八位字符串'的长度,如果长度= 1,则不使用填充,所以我的前缀为'0'。最后,我通过使用':'作为分隔符连接每个数组元素来重新组合字符串。如果字符串不包含':',那么我确认它的长度= 12,此时我将使用每对字符重建字符串并用':'分隔。
如果字符串没有分隔并且其长度不是12那么就不可能正确解析而我不得不假设请求MAC地址字符串失败并且我报告了错误的MAC地址。