如何获得连接WiFi android的信号强度?

时间:2013-09-16 15:11:51

标签: android wifi signals wireless wifimanager

我想获得与我的设备连接的这个wifi的信号强度。这可能很容易。但我是初学者。这是家庭作业。如何获得它?

我试过这段代码。但它不起作用。

    registerReceiver(new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {
        final WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
        int state = wifi.getWifiState();
        if(state == WifiManager.WIFI_STATE_ENABLED) {
            List<ScanResult> results = wifi.getScanResults();

            for (ScanResult result : results) {
                if(result.BSSID.equals(wifi.getConnectionInfo().getBSSID())) {
                    int level = WifiManager.calculateSignalLevel(wifi.getConnectionInfo().getRssi(),
                            result.level);
                    int difference = level * 100 / result.level;
                    int signalStrangth= 0;
                    if(difference >= 100)
                        signalStrangth = 4;
                    else if(difference >= 75)
                        signalStrangth = 3;
                    else if(difference >= 50)
                        signalStrangth = 2;
                    else if(difference >= 25)
                        signalStrangth = 1;
                    tv.setText(tv.getText() + "\nDifference :" + difference + " signal state:" + signalStrangth);

                }

            }
        }
    }
}, new IntentFilter(WifiManager.RSSI_CHANGED_ACTION));

我也试过这段代码。但这也行不通。

    int numberOfLevels = 5;
    WifiInfo wifiInfo = wifiManager.getConnectionInfo();
    int level = WifiManager.calculateSignalLevel(wifiInfo.getRssi(), numberOfLevels);

2 个答案:

答案 0 :(得分:12)

希望它有效..

public void onReceive(WifiManager wifiManager) {
                      int numberOfLevels=5;
                      WifiInfo wifiInfo = wifiManager.getConnectionInfo();
                      int level=WifiManager.calculateSignalLevel(wifiInfo.getRssi(), numberOfLevels);
                      System.out.println("Bars =" +level);
                }

答案 1 :(得分:0)

  

获取扫描的Wifi网络的信号强度。我在这里处理片段,因此您可以根据需要更改活动。

WifiManager mWifiManager;
WifiReceiver mWifiReceiver;
List<ScanResult> wifiList;

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    mWifiManager = (WifiManager) getActivity().getSystemService(Context.WIFI_SERVICE);
    if (!mWifiManager.isWifiEnabled()) {
        // If wifi disabled then enable it
        Toast.makeText(getActivity(), "wifi is disabled..making it enabled",
                Toast.LENGTH_LONG).show();
        mWifiManager.setWifiEnabled(true);
    }
    mWifiReceiver = new WifiReceiver();
    IntentFilter mIntentFilter = new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
    mIntentFilter.addAction(WifiManager.RSSI_CHANGED_ACTION);
    getActivity().registerReceiver(mWifiReceiver, mIntentFilter);
    mWifiManager.startScan();
}


  public void onPause() {
    getActivity().unregisterReceiver(mWifiReceiver);
    super.onPause();
}

public void onResume() {
    getActivity().registerReceiver(mWifiReceiver, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
    super.onResume();
}



class WifiReceiver extends BroadcastReceiver {
        // This method call when number of wifi connections changed
      public void onReceive(Context c, Intent intent) {
            int state = mWifiManager.getWifiState();
            int maxLevel = 5;
            if (state == WifiManager.WIFI_STATE_ENABLED) {
                // Get Scanned results in an array List
                wifiList = mWifiManager.getScanResults();
                // Iterate on the list 
                for (ScanResult result : wifiList) {
                    //The level of each wifiNetwork from 0-5
                    int level = WifiManager.calculateSignalLevel(
                            result.level,maxLevel);
                    String SSID = result.SSID;
                    String capabilities = result.capabilities;
                    // TODO add your own code.
                }
            }
        }
    }
  

您需要添加权限

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />