Android 獲取wifi信號強度

先來了解下Android如何獲取wifi的信息:
WifiManager wifi_service = (WifiManager)getSystemService(WIFI_SERVICE);
WifiInfo wifiInfo = wifi_service.getConnectionInfo();

其中wifiInfo有以下的方法:
wifiinfo.getBSSID();
wifiinfo.getSSID();
wifiinfo.getIpAddress();獲取IP地址。
wifiinfo.getMacAddress();獲取MAC地址。
wifiinfo.getNetworkId();獲取網絡ID。
wifiinfo.getLinkSpeed();獲取連接速度,可以讓用戶獲知這一信息。
wifiinfo.getRssi();獲取RSSI,RSSI就是接受信號強度指示。
這裏得到信號強度就靠wifiinfo.getRssi()這個方法。得到的值是一個0到-100的區間值,是一個int型數據,其中0到-50表示信號最好,-50到-70表示信號偏差,小於-70表示最差,有可能連接不上或者掉線,一般Wifi已斷則值爲-200。

  • 獲取wifi信號強度:
    private int obtainWifiInfo() {
        // Wifi的連接速度及信號強度:
        int strength = 0;
        WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
        // WifiInfo wifiInfo = wifiManager.getConnectionInfo();
        WifiInfo info = wifiManager.getConnectionInfo();
        if (info.getBSSID() != null) {
            // 鏈接信號強度,5爲獲取的信號強度值在5以內
             strength = WifiManager.calculateSignalLevel(info.getRssi(), 5);
            // 鏈接速度
            int speed = info.getLinkSpeed();
            // 鏈接速度單位
            String units = WifiInfo.LINK_SPEED_UNITS;
            // Wifi源名稱
            String ssid = info.getSSID();
        }
//        return info.toString();
        return strength;
    }
  • 廣播接收信號強度變化的處理:
    public BroadcastReceiver rssiReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            int s = obtainWifiInfo();
            tv.setText(s+"");
        }
    };
  • 註冊廣播:
        registerReceiver(rssiReceiver,new IntentFilter(WifiManager.RSSI_CHANGED_ACTION));
  • 權限:
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章