1

Wifi の MAC アドレス、BSSID、LINK_speed を取得しようとしています。Wifi がオフになっている場合でも、3 つすべてに値が表示されることに気付きました。電話の電源を切ってからもう一度入れますが、wifiはオンにしません。3 つの項目の問い合わせ時にアプリがクラッシュし、エラーを試行またはキャッチできません。Wi-Fi をオンにしてからオフにすると、アイテムに問い合わせることができ、アプリは正常に動作します。BSSID と LINKSPEED は、実際には 'LAST'BSSID と 'LAST'LINKSPEED です。電源を入れた後に MAC アドレスが見えないのに、Wi-Fi をオンにしないのは通常の動作ですか? また、エラーをトラップしてアプリを強制的に閉じないようにする方法はありますか?

    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
4

2 に答える 2

1

これを試して、

WifiManager wifiManager = (WifiManager) Settings.cntxt.getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
strMacAddr = wifiInfo.getMacAddress();
if(strMacAddr==null) {
    strMacAddr = "Unknown MAC";
}
于 2012-06-30T07:59:44.713 に答える
0

あなたは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...
于 2012-06-30T07:44:01.780 に答える