Find wifi networks android

How to get available wifi networks and display them in a list in android

Friends, I want to find all available WiFi networks and display them in a list I have tried as below. But it’s not working. I have edited my code, and now I got the result but with all the result that I don’t need. I only need names of wifi network in my list.

public class MainActivity extends Activity < TextView mainText; WifiManager mainWifi; WifiReceiver receiverWifi; ListwifiList; StringBuilder sb = new StringBuilder(); @Override protected void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mainText = (TextView) findViewById(R.id.tv1); mainWifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); if (mainWifi.isWifiEnabled() == false) < // If wifi disabled then enable it Toast.makeText(getApplicationContext(), "wifi is disabled..making it enabled", Toast.LENGTH_LONG).show(); mainWifi.setWifiEnabled(true); >receiverWifi = new WifiReceiver(); registerReceiver(receiverWifi, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)); mainWifi.startScan(); mainText.setText("Starting Scan. "); > public boolean onCreateOptionsMenu(Menu menu) < menu.add(0, 0, 0, "Refresh"); return super.onCreateOptionsMenu(menu); >public boolean onMenuItemSelected(int featureId, MenuItem item) < mainWifi.startScan(); mainText.setText("Starting Scan"); return super.onMenuItemSelected(featureId, item); >protected void onPause() < unregisterReceiver(receiverWifi); super.onPause(); >protected void onResume() < registerReceiver(receiverWifi, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)); super.onResume(); >// Broadcast receiver class called its receive method // when number of wifi connections changed class WifiReceiver extends BroadcastReceiver < // This method call when number of wifi connections changed public void onReceive(Context c, Intent intent) < sb = new StringBuilder(); wifiList = mainWifi.getScanResults(); sb.append("\n Number Of Wifi connections :"+wifiList.size()+"\n\n"); for(int i = 0; i < wifiList.size(); i++)< sb.append(new Integer(i+1).toString() + ". "); sb.append((wifiList.get(i)).toString()); sb.append("\n\n"); >mainText.setText(sb); > > > 

4 Answers 4

You need to create a BroadcastReceiver to listen for Wifi scan results:

private final BroadcastReceiver mWifiScanReceiver = new BroadcastReceiver() < @Override public void onReceive(Context c, Intent intent) < if (intent.getAction().equals(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) < ListmScanResults = mWifiManager.getScanResults(); // add your logic here > > > 

In onCreate() you would assign mWifiManager and initiate a scan:

mWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); registerReceiver(mWifiScanReceiver, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)); mWifiManager.startScan(); 

getScanResults() will return data only if you have appropriate permissions. For this, add one of the following two lines to your AndroidManifest.xml :

Also note that in API 23+, permissions must be requested at runtime. (For a lab environment, you can also grant permissions manually in Settings instead—less coding required, but not recommended for an end-user app.)

Note that the code which handles your scan results would run every time a new scan result is available, updating the result.

Please see my updated code. now i got the all available networks in list but it comes with details like BSSID,level and all that. so i only need the name of that wifi network..can you pls help me to sort it out.

Читайте также:  Виндовс телефон раздать вай фай

See the SDK documentation for ScanResult. There is a method called getSSID() (or similar). The SSID is the «display» name of the network.

Sorry, there is a bug in my Nexus 5, it shows the list of WiFi only when GPS is turned on..Your code works

@BalaVishnu Looks like the GPS setting enables/disables all location services, including wifi scans, so that no location can be inferred from nearby wifis.

android.permission.ACCESS_WIFI_STATE is also needed. Didn’t find anything in the docs, but that’s what the RuntimeException is telling me. Is this a new thing? Why isn’t anybody mentioning that here?

After Android 6.0

If your Android OS version is 6.0 or above then your application must ask for the following permission at runtime(Either of the following).

How to ask the permission at runtime

Just add this code in the onResume method of your activity

@Override public void onResume() < super.onResume(); if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) < if(checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) < requestPermissions(new String[], 87); > > > 

What will happen if you don’t have the above permission at Runtime?

Wifi.getScanResults() will return 0 results.

Many people including me have faced this problem in Nexus 5 phones and referred to it as a «bug».

How to scan and read wifi networks? (Deeper Understanding)

Scanning can be requested by

boolean startScan() returns true or false immediately based on the fact whether the scan has started successfully or not.
However it starts an asynchronous event which sends an intent (WifiManager.SCAN_RESULTS_AVAILABLE_ACTION) when the scan completes. Since the scan results (asynchronous event result) will not be available immediately, you will have to register your activity with a BroadcastReceiver.

Here is the code snippet to read those results(asynchronously) using BroadcastReceiver.

public class WifiScanReceiver extends BroadcastReceiver < @Override public void onReceive(Context context, Intent intent) < if(intent.getAction().equals(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) < ListscanResults = wifimanager.getScanResults(); // Write your logic to show in the list > > > 

probably «android.permission.ACCESS_FINE_LOCATION» also covers «android.permission.ACCESS_COARSE_LOCATION» if am not wrong

 class WifiReceiver extends BroadcastReceiver < public void onReceive(Context c, Intent intent) < sb = new StringBuilder(); wifiList = mainWifi.getScanResults(); for (int i = 0; i < wifiList.size(); i++)< sb.append(new Integer(i+1).toString() + "."); sb.append((wifiList.get(i)).SSID); sb.append("\n"); >mainText.setText(sb); > > 

Android 10 (API level 29) and higher:

A successful call to WifiManager.startScan() requires all of the following conditions to be met:

If your app is targeting Android 10 (API level 29) SDK or higher, your app has the ACCESS_FINE_LOCATION permission. If your app is targeting SDK lower than Android 10 (API level 29), your app has the ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permission. Your app has the CHANGE_WIFI_STATE permission. Location services are enabled on the device (under Settings > Location). 

To successfully call WifiManager.getScanResults(), ensure all of the following conditions are met:

If your app is targeting Android 10 (API level 29) SDK or higher, your app has the ACCESS_FINE_LOCATION permission. If your app is targeting SDK lower than Android 10 (API level 29), your app has the ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permission. Your app has the ACCESS_WIFI_STATE permission. Location services are enabled on the device (under Settings > Location). 

If the calling app doesn’t meet all of these requirements, the call fails with a SecurityException.

Читайте также:  Вай фай в ннгу

this is the code which you can try:

BtWifiscan.setOnClickListener(new View.OnClickListener() < @Override public void onClick(View view) < if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) < requestPermissions(new String[], 1); > > >); public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) < if (requestCode == 1/*PERMISSIONS_REQUEST_CODE_ACCESS_COARSE_LOCATION*/ && grantResults[0] == PackageManager.PERMISSION_GRANTED) < permisio_state[1] = 1; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) < requestPermissions(new String[], 2); > > if (requestCode == 2/*PERMISSIONS_REQUEST_CODE_ACCESS_COARSE_LOCATION*/ && grantResults[0] == PackageManager.PERMISSION_GRANTED) < permisio_state[2] = 2; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) < requestPermissions(new String[], 3); > > if (requestCode == 3/*PERMISSIONS_REQUEST_CODE_ACCESS_COARSE_LOCATION*/ && grantResults[0] == PackageManager.PERMISSION_GRANTED) < permisio_state[3] = 3; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) < requestPermissions(new String[], 4); > > if (requestCode == 4/*PERMISSIONS_REQUEST_CODE_ACCESS_COARSE_LOCATION*/ && grantResults[0] == PackageManager.PERMISSION_GRANTED) < permisio_state[4] = 4; >if (permisio_state[1] == 1 && permisio_state[2] == 2 && permisio_state[3] == 3 && permisio_state[4] == 4) WifiScaning(); > 

Источник

7 лучших Android-приложений для анализа Wi-Fi сетей

Если ваше Wi-Fi соединение нестабильно и связь периодически неожиданно пропадает, скорее всего, есть сильные помехи от других сетей Wi-Fi. Это очень распространённая проблема, с которой сталкиваются люди, живущие в многоквартирных домах.

Подобная проблема возникает, когда слишком много пользователей находится на том же Wi-Fi канале, что и вы. В этом случае вы можете воспользоваться одним из разработанных для Android приложений-анализаторов Wi-Fi, позволяющих увидеть наименее загруженные каналы. Некоторые из этих приложений можно также использовать для проверки уровня сигнала Wi-Fi.

Рассмотрим лучшие приложения для анализа Wi-Fi сетей, доступные для устройств, работающих на платформе Android.

WiFi Analyzer от OLGOR.COM

Это приложение для анализа Wi-Fi является одним из самых популярных в Play Store. Работает оно быстро и имеет простой в использовании интерфейс. Благодаря ему вы можете найти лучшие каналы, используя график каналов или их рейтинг.

Сканер показывает уровень сигнала каждой точки доступа в режиме реального времени и расчёты расстояния. Кроме того, вы можете посмотреть скрытые Wi-Fi.

В целом, это лучший Wi-Fi анализатор для Android, который вы можете использовать для просмотра переполненных каналов. Однако реклама в этом бесплатном приложении для многих является реальной проблемой.

WiFi Analyzer (open source)

Если вы беспокоитесь о конфиденциальности и ищете приложение с открытым кодом, то этот анализатор Wi-Fi станет лучшим вариантом для вас.

В данном приложении вы сможете посмотреть несколько точек доступа, узнать уровень их сигнала и канал, на котором они находятся. Вы также можете отфильтровать точки доступа на основе их уровня сигнала, диапазона Wi-Fi и безопасности. Осуществлять сортировку можно и по другим критериям, для этого достаточно зайти в настройки приложения.

Читайте также:  Скорость домашней сети wifi измерить

Чтобы вы смогли определить лучший канал, данное Android-приложение предоставляет график каналов и страницу рейтинга каналов. Есть также временной график.

WiFi Analyzer от Zoltán Pallagi

Это наиболее полное приложение для анализа Wi-Fi из этой подборки. Оно сканирует вашу сеть Wi-Fi, чтобы определить уровень сигнала, скорость и задержку.

Данный бесплатный анализатор Wi-Fi обладает всеми стандартными функциями, такими как рейтинг каналов, график каналов, мощность сети в реальном времени и многое другое.

В приложении также есть сетевой сканер, с помощью которого можно найти неизвестные устройства, подключённые к вашей сети. Кроме того, из данного приложения вы можете увидеть и отредактировать настройки роутера.

Network Cell Info Lite

Если вы ищете приложение для определения уровня сигнала Wi-Fi, то обязательно обратите внимание на Network Cell Info Lite. Оно, бесспорно, является одним из лучших.

Приложение отобразит на карте информацию о сети и поможет вам диагностировать проблемы с подключением. Network Cell Info Lite поддерживает GSM, CDMA, UMTS (WCDMA), WLAN, LTE и LTE+.

Измерения параметров сетей можно экспортировать в различные типы баз данных, в том числе в KML 2.2, CLF v.3, OpenCellID csv, CMW и т.д. Хотя приложение хорошо подходит для измерения уровня сигнала, вы не можете использовать его для просмотра каналов Wi-Fi.

WiFiman

По-моему, это одно из лучших тематических приложений для Android. Оно идеально подходит для тех, кто хочет проверить уровень сигнала своего Wi-Fi. И в нём нет рекламы.

Приложение имеет простой пользовательский интерфейс и позволяет легко перемещать точки доступа на другие каналы для повышения скорости интернета. Вы можете сравнить сигналы Wi-Fi, проверить скорость загрузки и выгрузки и многое другое.

Следует иметь в виду, что данное приложение не показывает каналы Wi-Fi. И если вы хотите поменять канал, то лучше выберите другой вариант.

WiFi Signal Meter

Используя WiFi Signal Meter, вы можете проверить скорость вашего Wi-Fi, измерить уровень сигнала и увидеть каналы с наименьшей загруженностью.

Приложение имеет обновлённый пользовательский интерфейс, а подробная инструкция поможет вам легко выбрать правильный канал Wi-Fi. Кроме того, WiFi Signal Meter обладает прочими необходимыми функциями, такими как просмотр графических данных в режиме реального времени, просмотр скорости загрузки и выгрузки в конкретной сети и т.д.

В целом, это одно из лучших приложений для определения уровня сигнала Wi-Fi, которое стоит попробовать пользователям Android.

Network Analyzer

Это полноценное приложение для сканирования каналов Wi-Fi, которое также способно диагностировать проблемы в вашей сети Wi-Fi и на удалённых серверах.

Данное приложение для Android (есть версия для iOS) лучше всего подходит тем, кто хочет знать каждую мелочь о своей локальной сети. Network Analyzer имеет различные инструменты сетевой диагностики, такие как сканер портов, поиск DNS и многое другое. Кроме того, с его помощью вы можете посмотреть уровень сигнала Wi-Fi, его шифрование и производителя роутера.

Источник

Оцените статью
Adblock
detector