如何获取已连接WiFi的信号强度(Android)?

5

我想获取已连接到我的设备的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);

1
能否解释一下“它不起作用”具体是什么意思?提示:发布带有错误的LogCat。 - MarsAtomic
https://www.dropbox.com/s/7sabuxgcnt5c6lu/log.txt - Emrah Şentürk
2个回答

14

希望它能够正常运作..

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

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" />

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接