How to get the signal strength of a connected WiFi android?

I want to get the signal strength of this Wi-Fi, which is connected with my device. This is probably easy. But I'm a newbie. And this is homework. How to get it?

I tried this code. But that does not work.

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)); 

I also tried this code. But that doesn't work either.

  int numberOfLevels = 5; WifiInfo wifiInfo = wifiManager.getConnectionInfo(); int level = WifiManager.calculateSignalLevel(wifiInfo.getRssi(), numberOfLevels); 
+4
source share
2 answers

Hope this works.

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

Get the signal strength of scanned Wi-Fi networks. I work with fragments here, so you can change if you want the activity accordingly.

 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. } } } } 

You need to add permissions

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

Source: https://habr.com/ru/post/1502434/


All Articles