【问题标题】:BUG or Normal Behavior on Android MAC-Address?Android MAC 地址上的 BUG 或正常行为?
【发布时间】:2012-07-01 14:37:29
【问题描述】:

我正在尝试获取 Wifi 的 MAC 地址、BSSID 和 LINK_speed。我注意到即使 Wifi 关闭,所有三个都显示有值。我关闭手机然后再打开,但没有打开wifi。该应用程序在对这三个项目进行任何询问时崩溃,我无法尝试/捕获错误。如果我打开wifi然后关闭我可以询问项目并且应用程序运行良好。它就像 BSSID 和 LINKSPEED 真的是'LAST'BSSID 和'LAST'LINKSPEED。开机后对MAC地址视而不见,但没有打开wifi正常行为?有没有办法捕获错误以防止应用程序强制关闭?

    WifiManager wifi;
    wifi = (WifiManager) this.getSystemService(Context.WIFI_SERVICE);
    WifiInfo wifiInfo = wifi.getConnectionInfo();
    int ipAddress = wifiInfo.getIpAddress();
    ipAddress = wifiInfo.getIpAddress();
    //above work no matter whether wifi on or off before

    String BSSID=wifiInfo.getBSSID();  //<<<<< ERRORS FORCE CLOSE IF NOT EVER CONNECTED
    int WifiLinkSpeed=wifiInfo.getLinkSpeed(); printi("link speed",WifiLinkSpeed);  
    String MacAddress=wifiInfo.getMacAddress(); Log.e("MAC address",MacAddress);
    //All three of these FORCE close if WIFI has never been turn on

【问题讨论】:

  • 完整的 logcat 输出是否包含任何错误?

标签: android android-wifi


【解决方案1】:

试试这个,

WifiManager wifiManager = (WifiManager) Settings.cntxt.getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
strMacAddr = wifiInfo.getMacAddress();
if(strMacAddr==null) {
    strMacAddr = "Unknown MAC";
}

【讨论】:

  • 它确实是一个 NULL 并且它在 Log.e("MAC address",MacAddress); 上出错了。与某人交谈时,他们表示 Linux 正常,除非您打开收音机,否则操作系统不知道 MAC 地址。在windows下它不同。如果需要进行测试以显示自开机以来是否打开过 WiFi,LinkSpeed 将返回 -1。更正了下面在解决方案中发布的代码。
  • 字符串 BSSID=wifiInfo.getBSSID(); int WifiLinkSpeed=wifiInfo.getLinkSpeed(); printi("链接速度",WifiLinkSpeed); //如果wifi自上电后从未打开,则返回-1 String MacAddress=wifiInfo.getMacAddress();如果(MacAddress==null){MacAddress="0.0.0.0"; Log.e("未知 MAC 地址",MacAddress); } Log.e("MAC 地址",MacAddress); //不能为空
  • BSSID 更正:String BSSID=wifiInfo.getBSSID(); if(BSSID==null)BSSID="未知";Log.e("BSSID",BSSID); int WifiLinkSpeed=wifiInfo.getLinkSpeed(); printi("链接速度",WifiLinkSpeed); //如果wifi自上电后从未打开,则返回-1 String MacAddress=wifiInfo.getMacAddress();如果(MacAddress==null){MacAddress="0.0.0.0"; Log.e("未知 MAC 地址",MacAddress); } Log.e("MAC 地址",MacAddress); //不能为空
【解决方案2】:

虽然您确实说过您尝试过 try/catch...但您捕捉到了哪些错误/异常?显然不是正确的。

我已经有一段时间没有进行任何 Android 编程了,但这是问题的症结所在...找出当您尝试这些功能时触发的异常。

try {
    // don't declare variables inside block, you'll limit scope
    BSSID=wifiInfo.getBSSID();  //<<<<< ERRORS FORCE CLOSE IF NOT EVER CONNECTED
    WifiLinkSpeed=wifiInfo.getLinkSpeed(); printi("link speed",WifiLinkSpeed);  
    MacAddress=wifiInfo.getMacAddress(); Log.e("MAC address",MacAddress);
    //All three of these FORCE close if WIFI has never been turn on
}
catch { /* something bad happened, handle it */ }
// continue on since all is good in the world today...

【讨论】:

  • 我不知道如何确定发生了什么异常。线索?
  • 应该在某个地方的日志中......你可以实现一个通用异常,捕获任何东西......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 2012-05-02
  • 1970-01-01
  • 2014-11-07
相关资源
最近更新 更多