【问题标题】:How to get signal strength of connected WiFi android?如何获取连接的 WiFi android 的信号强度?
【发布时间】:2013-09-20 19:19:22
【问题描述】:

我想获取与我的设备连接的这个 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);

【问题讨论】:

标签: android wifi signals wireless wifimanager


【解决方案1】:

希望它有效..

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

【讨论】:

    【解决方案2】:

    获取扫描的 Wifi 网络的信号强度。我在这里使用片段,因此您可以根据需要对 Activity 进行相应更改。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-26
      • 1970-01-01
      相关资源
      最近更新 更多