Wi-Fi рд░ рдзреЗрд░реИ рдЕрдиреНрдп рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╛рдорд╣рд░реВред рдПрдиреНрдбреНрд░реЛрдЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╕рдирдорд╛ рд╡рд╛рдЗрдлрд╛рдЗ рдиреЛрдбрд╣рд░реВ рд╕реБрдиреНрди рдирдкрд░реЗрдХрди рдбрд╛рдЯрд╛ рдХрд╕рд░реА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреЗ

рдПрдХ рджрд┐рди рдореИрд▓реЗ рдПрдиреНрдбреНрд░реЛрдЗрдб рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдмрд╛рдЯ Wi-Fi рдиреЗрдЯрд╡рд░реНрдХрд╣рд░реВ рд╕реНрдХреНрдпрд╛рди рдЧрд░реНрди рд░ рдкрд╣реБрдБрдЪ рдмрд┐рдиреНрджреБрд╣рд░реВрдХреЛ рдмрд╛рд░реЗрдорд╛ рд╡рд┐рд╕реНрддреГрдд рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдерд┐рдпреЛред

рдпрд╣рд╛рдБ рд╣рд╛рдореАрд▓реЗ рдзреЗрд░реИ рдХрдард┐рдирд╛рдЗрд╣рд░реВрдХреЛ рд╕рд╛рдордирд╛ рдЧрд░реНрдиреБрдкрд░реНтАНрдпреЛ: рдмрдиреНрджред рдПрдиреНрдбреНрд░реЛрдЗрдб рдХрд╛рдЧрдЬрд╛рдд рдзреЗрд░реИ рд╡рд░реНрдгрд┐рдд рд╡рд░реНрдЧрд╣рд░реВ рдмрд╣рд┐рд╖реНрдХреГрдд рднрдП (рдПрдкреАрдЖрдИ рд╕реНрддрд░ > 26), рдЬреБрди рдпрд╕рдорд╛ рдкреНрд░рддрд┐рдмрд┐рдореНрдмрд┐рдд рднрдПрди; рдХрд╛рдЧрдЬрд╛рддрдорд╛ рдХреЗрд╣рд┐ рдЪреАрдЬрд╣рд░реВрдХреЛ рд╡рд┐рд╡рд░рдг рдиреНрдпреВрдирддрдо рдЫ (рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдХрдХреНрд╖рд╛рдХреЛ рдХреНрд╖рдорддрд╛ рдХреНрд╖реЗрддреНрд░ рд╕реНрдХреНрдпрд╛рди рдкрд░рд┐рдгрд╛рдо рд▓реЗрдЦрдирдХреЛ рд╕рдордпрдорд╛, рд▓рдЧрднрдЧ рдХреЗрд╣рд┐ рдкрдирд┐ рд╡рд░реНрдгрди рдЧрд░рд┐рдПрдХреЛ рдЫреИрди, рдпрджреНрдпрдкрд┐ рдпрд╕рд▓реЗ рдзреЗрд░реИ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдбреЗрдЯрд╛ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫ)ред рддреЗрд╕реНрд░реЛ рдХрдард┐рдирд╛рдИ рдпрд╕ рддрдереНрдпрдорд╛ рдирд┐рд╣рд┐рдд рд╣реБрди рд╕рдХреНрдЫ рдХрд┐ рдЬрдм рддрдкрд╛рдЗрдБ рдкрд╣рд┐рд▓реЛ рдкрдЯрдХ Wi-Fi рдХреЛ рдирдЬрд┐рдХ рдкреБрдЧреНрдиреБрд╣реБрдиреНрдЫ, рд╕рд┐рджреНрдзрд╛рдиреНрдд рдкрдвреНрди рд░ рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рдорд╛рд░реНрдлрдд рд░рд╛рдЙрдЯрд░ рд╕реЗрдЯрдЕрдк рдЧрд░реНрдиреБ рдмрд╛рд╣реЗрдХ, рддрдкрд╛рдЗрдБрд▓реЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдкрдорд╛ рдмреБрдЭреНрди рд╕рдХрд┐рдиреЗ рдзреЗрд░реИ рд╕рдВрдХреНрд╖реЗрдкрд╣рд░реВрдХреЛ рд╕рд╛рде рд╡реНрдпрд╡рд╣рд╛рд░ рдЧрд░реНрдиреБрдкрд░реНрдЫред рддрд░ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдХрд╕рд░реА рд╕рдореНрдмрдиреНрдзрд┐рдд рд░ рд╕рдВрд░рдЪрдирд╛ рдЧрд░реНрдиреЗ рднрдиреНрдиреЗ рдХреБрд░рд╛ рд╕реНрдкрд╖реНрдЯ рдирд╣реБрди рд╕рдХреНрдЫ (рдирд┐рд░реНрдгрдп рд╡реНрдпрдХреНрддрд┐рдкрд░рдХ рдЫ рд░ рдЕрдШрд┐рд▓реНрд▓реЛ рдЕрдиреБрднрд╡рдорд╛ рдирд┐рд░реНрднрд░ рдЧрд░реНрджрдЫ)ред

рдпрд╕ рд▓реЗрдЦрд▓реЗ NDK, рд╣реНрдпрд╛рдХрд╣рд░реВ рдмрд┐рдирд╛ рдПрдиреНрдбреНрд░реЛрдЗрдб рдХреЛрдбрдмрд╛рдЯ Wi-Fi рд╡рд╛рддрд╛рд╡рд░рдгрдХреЛ рдмрд╛рд░реЗрдорд╛ рд╡рд┐рд╕реНрддреГрдд рдбреЗрдЯрд╛ рдХрд╕рд░реА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреЗ рднрдиреЗрд░ рдЫрд▓рдлрд▓ рдЧрд░реНрджрдЫ, рддрд░ рдПрдиреНрдбреНрд░реЛрдЗрдб рдПрдкреАрдЖрдИ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд░ рдпрд╕рд▓рд╛рдИ рдХрд╕рд░реА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдЧрд░реНрдиреЗ рднрдиреЗрд░ рдмреБрдЭреНрдиреБрд╣реЛрд╕реНред

рдврд┐рд▓реЛ рдирдЧрд░реМрдВ рд░ рдХреЛрдб рд▓реЗрдЦреНрди рд╕реБрд░реБ рдЧрд░реМрдВред

1. рдПрдЙрдЯрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН

рдпреЛ рдиреЛрдЯ рдПрдХ рдкрдЯрдХ рднрдиреНрджрд╛ рдмрдврд┐ рдПрдиреНрдбреНрд░реЛрдЗрдб рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗрд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ рд╣реЛ, рддреНрдпрд╕реИрд▓реЗ рд╣рд╛рдореА рдпрд╕ рд╡рд╕реНрддреБрдХреЛ рд╡рд┐рд╡рд░рдгрд╣рд░реВ рдЫреЛрдбреНрдЫреМрдВред рддрд▓рдХреЛ рдХреЛрдб Kotlin рдорд╛ рдкреНрд░рд╕реНрддреБрдд рдЧрд░рд┐рдиреЗрдЫ, minSdkVersion=23ред

2. рдкрд╣реБрдБрдЪ рдЕрдиреБрдорддрд┐рд╣рд░реВ

рдЕрдиреБрдкреНрд░рдпреЛрдЧрдмрд╛рдЯ Wi-Fi рд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрди, рддрдкрд╛рдИрдВрд▓реЗ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рдмрд╛рдЯ рдзреЗрд░реИ рдЕрдиреБрдорддрд┐рд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрдкрд░реНрдиреЗрдЫред рдпрд╕ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдЧрдЬрд╛рдд, 8.0 рдкрдЫрд┐ OS рд╕рдВрд╕реНрдХрд░рдгрд╣рд░реВ рднрдПрдХрд╛ рдпрдиреНрддреНрд░рд╣рд░реВрдорд╛ рдиреЗрдЯрд╡рд░реНрдХ рд╕реНрдХреНрдпрд╛рди рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рдиреЗрдЯрд╡рд░реНрдХ рд╡рд╛рддрд╛рд╡рд░рдгрдХреЛ рдЕрд╡рд╕реНрдерд╛ рд╣реЗрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдкрд╣реБрдБрдЪрдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд, рддрдкрд╛рдЗрдБрд▓рд╛рдИ рдпрд╛ рдд рдпрдиреНрддреНрд░рдХреЛ Wi-Fi рдореЛрдбреНрдпреБрд▓рдХреЛ рд╕реНрдерд┐рддрд┐ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрди рдкрд╣реБрдБрдЪ рдЪрд╛рд╣рд┐рдиреНрдЫ, рд╡рд╛ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХрд╣рд░реВрдорд╛ рдкрд╣реБрдБрдЪ рдЪрд╛рд╣рд┐рдиреНрдЫ (рдЕрдиреБрдорд╛рдирд┐рдд рд╡рд╛ рд╕рд╣рд┐)ред рд╕рдВрд╕реНрдХрд░рдг 9.0 рдмрд╛рдЯ рд╕реБрд░реБ рдЧрд░реНрджреИ, рддрдкрд╛рдИрдВрд▓реЗ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд▓рд╛рдИ рджреБрд╡реИрдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░рдореНрдкреНрдЯ рдЧрд░реНрдиреБрдкрд░реНрдЫ, рд░ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд▓рд╛рдИ рд╕реНрдерд╛рди рд╕реЗрд╡рд╛рд╣рд░реВ рд╕рдХреНрд░рд┐рдп рдЧрд░реНрди рд╕реНрдкрд╖реНрдЯ рд░реВрдкрдорд╛ рдЕрдиреБрд░реЛрдз рдкрдирд┐ рдЧрд░реНрдиреБрдкрд░реНрдЫред рдпреЛ рдЧреБрдЧрд▓рдХреЛ рдЗрдЪреНрдЫрд╛ рд╣реЛ, рд░ рдЙрд╣рд╛рдБрдорд╛ рдЬрд╛рд╕реБрд╕реА рдЧрд░реНрдиреЗ рд╣рд╛рдореНрд░реЛ рдЪрд╛рд╣рдирд╛ рд╣реЛрдЗрди рднрдиреЗрд░ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд▓рд╛рдИ рд╕рд╛рд╣рд╕рдкреВрд░реНрд╡рдХ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдЧрд░реНрди рдирдмрд┐рд░реНрд╕рдиреБрд╣реЛрд╕реН :)

рддреНрдпрд╕реИрд▓реЗ, AndroidManifest.xml рдорд╛ рд╣рд╛рдореА рдердкреНрдиреЗрдЫреМрдВ:

    <uses-permission android_name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android_name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android_name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android_name="android.permission.ACCESS_FINE_LOCATION"/>

рд░ рд╣рд╛рд▓рдХреЛ рдЧрддрд┐рд╡рд┐рдзрд┐рдХреЛ рд▓рд┐рдЩреНрдХ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрдиреЗ рдХреЛрдбрдорд╛:

import android.app.Activity
import android.content.Context
import android.location.LocationManager
import androidx.core.app.ActivityCompat

....

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
            ActivityCompat.requestPermissions(
                activity,
                arrayOf(Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.CHANGE_WIFI_STATE),
                1
            )
            makeEnableLocationServices(activity.applicationContext)
        } else {
            ActivityCompat.requestPermissions(
                activity,
                arrayOf(Manifest.permission.CHANGE_WIFI_STATE),
                1
            )
        }

    /* ╨▓╨║╨╗╤О╤З╨░╨╡╤В ╤Н╨║╤А╨░╨╜ ╨▓╨║╨╗╤О╤З╨╡╨╜╨╕╤П ╤Б╨╗╤Г╨╢╨▒╤Л ╨┐╨╛ ╨╛╨┐╤А╨╡╨┤╨╡╨╗╨╡╨╜╨╕╤О ╨╝╨╡╤Б╤В╨╛╨┐╨╛╨╗╨╛╨╢╨╡╨╜╨╕╤П */
    fun makeEnableLocationServices(context: Context) {
        // TODO: ╨┐╨╡╤А╨╡╨┤ ╨▓╤Л╨╖╨╛╨▓╨╛╨╝ ╤Н╤В╨╛╨╣ ╤Д╤Г╨╜╨║╤Ж╨╕╨╕ ╨╜╨░╨┤╨╛ ╤А╨░╤Б╤Б╨║╨░╨╖╨░╤В╤М ╨┐╨╛╨╗╤М╨╖╨╛╨▓╨░╤В╨╡╨╗╤О, ╨╖╨░╤З╨╡╨╝ ╨Т╨░╨╝ ╨┤╨╛╤Б╤В╤Г╨┐ ╨║ ╨╝╨╡╤Б╤В╨╛╨┐╨╛╨╗╨╛╨╢╨╡╨╜╨╕╤О
        val lm: LocationManager =
            context.applicationContext.getSystemService(Context.LOCATION_SERVICE) as LocationManager

        val gpsEnabled: Boolean = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
        val networkEnabled: Boolean = lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);

        if (!gpsEnabled && !networkEnabled) {
            context.startActivity(Intent(ACTION_LOCATION_SOURCE_SETTINGS));
        }
    }

3. рдПрдХ BroadcastReceiver рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ Wi-Fi рдиреЗрдЯрд╡рд░реНрдХ рд╡рд╛рддрд╛рд╡рд░рдг рд╕реНрдХреНрдпрд╛рди рдЧрд░реНрдиреЗ рдмрд╛рд░реЗ рдбрд╛рдЯрд╛ рдЕрдкрдбреЗрдЯ рдШрдЯрдирд╛рд╣рд░реВрдХреЛ рд╕рджрд╕реНрдпрддрд╛ рд▓рд┐рдиреБрд╣реЛрд╕реН

val wifiManager = context.getSystemService(Context.WIFI_SERVICE) as WifiManager

val wifiScanReceiver = object : BroadcastReceiver() {

  override fun onReceive(context: Context, intent: Intent) {
    val success = intent.getBooleanExtra(WifiManager.EXTRA_RESULTS_UPDATED, false)
    if (success) {
      scanSuccess()
    } 
  }
}

val intentFilter = IntentFilter()
/* ╨┐╨╛╨┤╨┐╨╕╤Б╤Л╨▓╨░╨╡╨╝╤Б╤П ╨╜╨░ ╤Б╨╛╨╛╨▒╤Й╨╡╨╜╨╕╤П ╨╛ ╨┐╨╛╨╗╤Г╤З╨╡╨╜╨╕╨╕ ╨╜╨╛╨▓╤Л╤Е ╤А╨╡╨╖╤Г╨╗╤М╤В╨░╤В╨╛╨▓ ╤Б╨║╨░╨╜╨╕╤А╨╛╨▓╨░╨╜╨╕╤П */
intentFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)
context.registerReceiver(wifiScanReceiver, intentFilter)

val success = wifiManager.startScan()
if (!success) {
  /* ╤З╤В╨╛-╤В╨╛ ╨╜╨╡ ╨┐╨╛╨╗╤Г╤З╨╕╨╗╨╛╤Б╤М ╨┐╤А╨╕ ╨╖╨░╨┐╤Г╤Б╨║╨╡ ╤Б╨║╨░╨╜╨╕╤А╨╛╨▓╨░╨╜╨╕╤П, ╨┐╤А╨╛╨▓╨╡╤А╤М╤В╨╡ ╨▓╤Л╨┤╨░╨╜╤Л╨╡ ╤А╨░╨╖╤А╨╡╤И╨╡╨╜╨╕╤П */
}

....

private fun scanSuccess() {
 /* ╨▓╨╛╤В ╨╛╨╜╨╕, ╤А╨╡╨╖╤Г╨╗╤М╤В╨░╤В╤Л ╤Б╨║╨░╨╜╨╕╤А╨╛╨▓╨░╨╜╨╕╤П */
  val results: List<ScanResult> = wifiManager.scanResults
}

рдХрд╛рдЧрдЬрд╛рддрдорд╛ WiFiManager.startScan рд╡рд┐рдзрд┐рд▓рд╛рдИ API рд╕рдВрд╕реНрдХрд░рдг 28 рджреЗрдЦрд┐ рд╡рдВрдЪрд┐рдд рднрдиреА рдЪрд┐рдиреНрд╣ рд▓рдЧрд╛рдЗрдПрдХреЛ рдЫ, рддрд░ рдмрдиреНрдж рдЫред рдбреЛрд░рд╝реНрдпрд╛рдЙрди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕реБрдЭрд╛рд╡ рджрд┐рдиреНрдЫред

рдХреБрд▓рдорд╛, рд╣рд╛рдореАрд▓реЗ рд╡рд╕реНрддреБрд╣рд░реВрдХреЛ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдпреМрдВ рд╕реНрдХреНрдпрд╛рди рдкрд░рд┐рдгрд╛рдо.

4. ScanResult рд╣реЗрд░реНрдиреБрд╣реЛрд╕реН рд░ рд╕рд░реНрддрд╣рд░реВ рдмреБрдЭреНрдиреБрд╣реЛрд╕реН

рдпрд╕ рд╡рд░реНрдЧрдХрд╛ рдХреЗрд╣реА рдХреНрд╖реЗрддреНрд░рд╣рд░реВ рд╣реЗрд░реМрдВ рд░ рддрд┐рдиреАрд╣рд░реВрдХреЛ рдЕрд░реНрде рдХреЗ рд╣реЛ рд╡рд░реНрдгрди рдЧрд░реМрдВ:

SSID - рд╕реЗрд╡рд╛ рд╕реЗрдЯ рдкрд╣рд┐рдЪрд╛рдирдХрд░реНрддрд╛ рдиреЗрдЯрд╡рд░реНрдХрдХреЛ рдирд╛рдо рд╣реЛ

рдмреАрдПрд╕рдПрд╕рдЖрдИрдбреА - рдЖрдзрд╛рд░рднреВрдд рд╕реЗрд╡рд╛ рд╕реЗрдЯ рдкрд╣рд┐рдЪрд╛рдирдХрд░реНрддрд╛ - рдиреЗрдЯрд╡рд░реНрдХ рдПрдбрд╛рдкреНрдЯрд░рдХреЛ MAC рдареЗрдЧрд╛рдирд╛ (Wi-Fi рдкреЛрдЗрдиреНрдЯ)

рд╕реНрддрд░ тАФ рдкреНрд░рд╛рдкреНрдд рд╕рд┐рдЧреНрдирд▓ рд╢рдХреНрддрд┐ рд╕реВрдЪрдХ [dBm (Russian dBm) тАФ рдбреЗрд╕рд┐рдмрд▓, рд╕рдиреНрджрд░реНрдн рд╢рдХреНрддрд┐ 1 mWред] тАФ рдкреНрд░рд╛рдкреНрдд рд╕рдЩреНрдХреЗрдд рд╢рдХреНрддрд┐рдХреЛ рд╕реВрдЪрдХред реж рджреЗрдЦрд┐ -резрежреж рд╕рдореНрдордХреЛ рдорд╛рди рд▓рд┐рдиреНрдЫ, реж рдмрд╛рдЯ рдЬрддрд┐ рдЕрдЧрд╛рдбрд┐, Wi-Fi рдкреЛрдЗрдиреНрдЯрдмрд╛рдЯ рддрдкрд╛рдИрдВрдХреЛ рдпрдиреНрддреНрд░рдорд╛ рдЬрд╛рдиреЗ рдмрд╛рдЯреЛрдорд╛ рдЙрддрд┐ рдзреЗрд░реИ рд╕рд┐рдЧреНрдирд▓ рдкрд╛рд╡рд░ рд╣рд░рд╛рдпреЛред рдердк рд╡рд┐рд╡рд░рдгрд╣рд░реВ рдлреЗрд▓рд╛ рдкрд╛рд░реНрди рд╕рдХрд┐рдиреНрдЫ, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдорд╛ рд╡рд┐рдХрд┐рдкреЗрдбрд┐рдпрд╛ред рдпрд╣рд╛рдБ рдо рддрдкрд╛рдИрдВрд▓рд╛рдИ рдПрдиреНрдбреНрд░реЛрдЗрдб рдХреНрд▓рд╛рд╕ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рднрдиреНрдиреЗрдЫреБ рд╡рд╛рдЗрдлрд╛рдЗрдореЗрдиреЗрдЬрд░ рддрдкрд╛рдИрд▓реЗ рдЫрдиреМрдЯ рдЧрд░реНрдиреБрднрдПрдХреЛ рдЪрд░рдгрдорд╛ рдЙрддреНрдХреГрд╖реНрдЯ рджреЗрдЦрд┐ рднрдпрд╛рдирдХ рд╕рдореНрдордХреЛ рд╕реНрдХреЗрд▓рдорд╛ рд╕рд┐рдЧреНрдирд▓ рд╕реНрддрд░ рдХреНрдпрд╛рд▓рд┐рдмреНрд░реЗрдЯ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ:

        val wifiManager = context.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager
        val numberOfLevels = 5
        val level = WifiManager.calculateSignalLevel(level, numberOfLevels)

рдЖрд╡реГрддреНрддрд┐ - Wi-Fi рдкреЛрдЗрдиреНрдЯ [Hz] рдХреЛ рд╕рдЮреНрдЪрд╛рд▓рди рдЖрд╡реГрддреНрддрд┐ред рдЖрд╡реГрддреНрддрд┐ рдЖрдлреИрдВрдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд, рддрдкрд╛рдЗрдБ рддрдерд╛рдХрдерд┐рдд рдЪреНрдпрд╛рдирд▓рдорд╛ рд░реБрдЪрд┐ рд╣реБрди рд╕рдХреНрдЫред рдкреНрд░рддреНрдпреЗрдХ рдмрд┐рдиреНрджреБрдХреЛ рдЖрдлреНрдиреИ рд╕рдЮреНрдЪрд╛рд▓рди рд╢реБрджреНрдзрддрд╛ рдЫред рд▓реЗрдЦреНрдиреЗ рд╕рдордпрдорд╛, Wi-Fi рдмрд┐рдиреНрджреБрд╣рд░реВрдХреЛ рд╕рдмреИрднрдиреНрджрд╛ рд▓реЛрдХрдкреНрд░рд┐рдп рджрд╛рдпрд░рд╛ 2.4 GHz рд╣реЛред рддрд░, рдердк рд╕рдЯреАрдХ рд╣реБрдирдХреЛ рд▓рд╛рдЧрд┐, рдмрд┐рдиреНрджреБрд▓реЗ рдирд╛рдордХреЛ рдирдЬрд┐рдХ рдирдореНрдмрд░ рдЧрд░рд┐рдПрдХреЛ рдлреНрд░рд┐рдХреНрд╡реЗрдиреНрд╕реАрдорд╛ рддрдкрд╛рдИрдВрдХреЛ рдлреЛрдирдорд╛ рдЬрд╛рдирдХрд╛рд░реА рдкрдард╛рдЙрдБрдЫред рдЪреНрдпрд╛рдирд▓рд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рд░ рд╕рдореНрдмрдиреНрдзрд┐рдд рдлреНрд░рд┐рдХреНрд╡реЗрдиреНрд╕реАрд╣рд░реВ рдорд╛рдирдХреАрдХреГрддред рдпреЛ рдпрд╕рд░реА рдЧрд░рд┐рдиреНрдЫ рдХрд┐ рдирдЬрд┐рдХрдХрд╛ рдмрд┐рдиреНрджреБрд╣рд░реВ рд╡рд┐рднрд┐рдиреНрди рдлреНрд░рд┐рдХреНрд╡реЗрдиреНрд╕реАрд╣рд░реВрдорд╛ рдХрд╛рдо рдЧрд░реНрдЫрдиреН, рдЬрд╕рд▓реЗ рдЧрд░реНрджрд╛ рдПрдХрдЕрд░реНрдХрд╛рд╕рдБрдЧ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдЧрд░реНрджреИрди рд░ рдкрд╛рд░рд╕реНрдкрд░рд┐рдХ рд░реВрдкрдорд╛ рдкреНрд░рд╕рд╛рд░рдгрдХреЛ рдЧрддрд┐ рд░ рдЧреБрдгрд╕реНрддрд░ рдШрдЯрд╛рдЙрдБрджреИрдиред рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛, рдмрд┐рдиреНрджреБрд╣рд░реВ рдПрдХ рдлреНрд░рд┐рдХреНрд╡реЗрдиреНрд╕реАрдорд╛ рдХрд╛рдо рдЧрд░реНрджреИрди, рддрд░ рдлреНрд░рд┐рдХреНрд╡реЗрдиреНрд╕реАрдХреЛ рджрд╛рдпрд░рд╛ (рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рдЪреНрдпрд╛рдирд▓ рдЪреМрдбрд╛рдИ), рдЪреНрдпрд╛рдирд▓ рдЪреМрдбрд╛рдИ рднрдирд┐рдиреНрдЫред рддреНрдпреЛ рд╣реЛ, рдЫреЗрдЙрдЫрд╛рдЙрдорд╛ рдХрд╛рдо рдЧрд░реНрдиреЗ рдмрд┐рдиреНрджреБрд╣рд░реВ (рд░ рди рдХреЗрд╡рд▓ рдЫреЗрдЙрдЫрд╛рдЙ, рддрд░ рдЖрдлреИрдВрдмрд╛рдЯ рдкрдирд┐ 3) рдЪреНрдпрд╛рдирд▓рд╣рд░реВ рдПрдХрдЕрд░реНрдХрд╛рд╕рдБрдЧ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдЧрд░реНрдЫрдиреНред рддрдкрд╛рдИрдВрд▓реЗ рдпреЛ рд╕рд░рд▓ рдХреЛрдб рдЙрдкрдпреЛрдЧреА рдкрд╛рдЙрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рдЬрд╕рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ 2.4 рд░ 5 Ghz рдХреЛ рдлреНрд░рд┐рдХреНрд╡реЗрдиреНрд╕реАрдХрд╛ рд╕рд╛рде рдкреЛрдЗрдиреНрдЯрд╣рд░реВрдХреЛ рдлреНрд░рд┐рдХреНрд╡реЗрдиреНрд╕реА рдорд╛рдирдмрд╛рдЯ рдЪреНрдпрд╛рдирд▓ рдирдореНрдмрд░ рдЧрдгрдирд╛ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫ:


    /* ╨┐╨╛ ╤З╨░╤Б╤В╨╛╤В╨╡ ╨╛╨┐╤А╨╡╨┤╨╡╨╗╤П╨╡╨╝ ╨╜╨╛╨╝╨╡╤А ╨║╨░╨╜╨░╨╗╨░ */
    val channel: Int
        get() {
            return if (frequency in 2412..2484) {
                (frequency - 2412) / 5 + 1
            } else if (frequency in 5170..5825) {
                (frequency - 5170) / 5 + 34
            } else {
                -1
            }
        }

рдХреНрд╖рдорддрд╛рдУрдВ - рд╡рд┐рд╢реНрд▓реЗрд╖рдгрдХреЛ рд▓рд╛рдЧрд┐ рд╕рдмреИрднрдиреНрджрд╛ рд░реЛрдЪрдХ рдХреНрд╖реЗрддреНрд░, рдХрд╛рдо рдЬрд╕рдХреЛ рд╕рд╛рде рдзреЗрд░реИ рд╕рдордп рдЖрд╡рд╢реНрдпрдХ рдЫред рдпрд╣рд╛рдБ рдмрд┐рдиреНрджреБрдХреЛ "рдХреНрд╖рдорддрд╛рд╣рд░реВ" рд▓рд╛рдИ рд░реЗрдЦрд╛рдорд╛ рд▓реЗрдЦрд┐рдПрдХреЛ рдЫред рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛, рддрдкрд╛рдИрдВрд▓реЗ рдХрд╛рдЧрдЬрд╛рддрдорд╛ рд╕реНрдЯреНрд░рд┐рдЩ рд╡реНрдпрд╛рдЦреНрдпрд╛рдХреЛ рд╡рд┐рд╡рд░рдгрд╣рд░реВ рдЦреЛрдЬреНрдиреБ рдкрд░реНрджреИрдиред рдпрд╣рд╛рдБ рдпрд╕ рд▓рд╛рдЗрдирдорд╛ рдХреЗ рд╣реБрди рд╕рдХреНрдЫ рдХреЛ рдХреЗрд╣рд┐ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ рдЫрдиреН:

[WPA-PSK-TKIP+CCMP][WPA2-PSK-TKIP+CCMP][WPS][ESS]
[WPA2-PSK-CCMP][ESS]
[WPA2-PSK-CCMP+TKIP][ESS]
[WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][ESS]
[ESS][WPS]

5. рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдкрд╣рд░реВ рд░ рдкрд╛рд░реНрд╕рд┐рдЩ рдХреНрд╖рдорддрд╛рд╣рд░реВ рдмреБрдЭреНрджреИ

рдпреЛ рдЙрд▓реНрд▓реЗрдЦ рдЧрд░реНрди рд▓рд╛рдпрдХ рдЫ рдХрд┐ android.net.wifi.* рдкреНрдпрд╛рдХреЗрдЬрдХрд╛ рдХрдХреНрд╖рд╛рд╣рд░реВ рд▓рд┐рдирдХреНрд╕ рдЙрдкрдпреЛрдЧрд┐рддрд╛рджреНрд╡рд╛рд░рд╛ рд╣реБрдб рдЕрдиреНрддрд░реНрдЧрдд рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫред wpa_supplicant рд░ рдХреНрд╖рдорддрд╛ рдХреНрд╖реЗрддреНрд░ рдорд╛ рдЖрдЙрдЯрдкреБрдЯ рдкрд░рд┐рдгрд╛рдо рд╕реНрдХреНрдпрд╛рди рдЧрд░реНрджрд╛ рдЭрдгреНрдбрд╛ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдПрдХ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рд╣реЛред

рд╣рд╛рдореА рдирд┐рд░рдиреНрддрд░ рдХрд╛рдо рдЧрд░реНрдиреЗрдЫреМрдВред рдкрд╣рд┐рд▓реЗ рдПрдЙрдЯрд╛ рдврд╛рдБрдЪрд╛рдХреЛ рдЖрдЙрдЯрдкреБрдЯрд▓рд╛рдИ рд╡рд┐рдЪрд╛рд░ рдЧрд░реМрдВ рдЬрд╕рдорд╛ рдХреЛрд╖реНрдардХ рднрд┐рддреНрд░рдХрд╛ рддрддреНрд╡рд╣рд░реВрд▓рд╛рдИ "-" рдЪрд┐рдиреНрд╣рджреНрд╡рд╛рд░рд╛ рд╡рд┐рднрд╛рдЬрд┐рдд рдЧрд░рд┐рдПрдХреЛ рдЫ:

[WPA-PSK-TKIP+CCMP]
[WPA2-PSK-CCMP]

рдкрд╣рд┐рд▓реЛ рдЕрд░реНрде рддрдерд╛рдХрдерд┐рдд рд╡рд░реНрдгрди рдЧрд░реНрджрдЫред рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╡рд┐рдзрд┐ред рддреНрдпреЛ рд╣реЛ, рдкрд╣реБрдБрдЪ рдмрд┐рдиреНрджреБрд▓реЗ рдЖрдлреИрд▓рд╛рдИ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд░ рдкреЗрд▓реЛрдбрд▓рд╛рдИ рдХрд╕рд░реА рдЗрдиреНрдХреНрд░рд┐рдкреНрдЯ рдЧрд░реНрдиреЗ рдЕрдиреБрдорддрд┐ рджрд┐рдирдХреЛ рд▓рд╛рдЧрд┐ рдпрдиреНрддреНрд░ рд░ рдкрд╣реБрдБрдЪ рдмрд┐рдиреНрджреБрд▓реЗ рдХрд╛рд░реНрдпрд╣рд░реВрдХреЛ рдХреБрди рдЕрдиреБрдХреНрд░рдо рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрдиреБрдкрд░реНрдЫред рдпреЛ рдкреЛрд╖реНрдЯ рд▓реЗрдЦреНрдиреЗ рд╕рдордпрдорд╛, рд╕рдмреИрднрдиреНрджрд╛ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдХрд▓реНрдкрд╣рд░реВ WPA рд░ WPA2 рд╣реБрдиреН, рдЬрд╕рдорд╛ рдкреНрд░рддреНрдпреЗрдХ рдЬрдбрд╛рди рдЧрд░рд┐рдПрдХреЛ рдЙрдкрдХрд░рдг рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛ рддрдерд╛рдХрдерд┐рдд рдорд╛рд░реНрдлрддред RADIUS рд╕рд░реНрднрд░ (WPA-Enterprice) рд▓реЗ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдЪреНрдпрд╛рдирд▓рдорд╛ рдкрд╛рд╕рд╡рд░реНрдб рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫред рд╕рдореНрднрд╡рддрдГ, рддрдкрд╛рдИрдВрдХреЛ рдШрд░рдорд╛ рдкрд╣реБрдБрдЪ рдмрд┐рдиреНрджреБрд▓реЗ рдпрд╕ рдпреЛрдЬрдирд╛ рдЕрдиреБрд╕рд╛рд░ рдЬрдбрд╛рди рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫред рджреЛрд╕реНрд░реЛ рд╕рдВрд╕реНрдХрд░рдг рд░ рдкрд╣рд┐рд▓реЛ рдмреАрдЪрдХреЛ рднрд┐рдиреНрдирддрд╛ рдпреЛ рд╣реЛ рдХрд┐ рдпрд╕рдорд╛ рдмрд▓рд┐рдпреЛ рд╕рд╛рдЗрдлрд░ рдЫ: AES рдмрдирд╛рдо рдЕрд╕реБрд░рдХреНрд╖рд┐рдд TKIPред WPA3, рдЬреБрди рдЕрдЭ рдЬрдЯрд┐рд▓ рд░ рдЙрдиреНрдирдд рдЫ, рдкрдирд┐ рдмрд┐рд╕реНрддрд╛рд░реИ рдкреНрд░рд╕реНрддреБрдд рд╣реБрдБрджреИрдЫред рд╕реИрджреНрдзрд╛рдиреНрддрд┐рдХ рд░реВрдкрдорд╛, рддреНрдпрд╣рд╛рдБ рдЙрджреНрдпрдо рд╕рдорд╛рдзрд╛рди CCKM (рд╕рд┐рд╕реНрдХреЛ рдХреЗрдиреНрджреНрд░реАрдХреГрдд рдХреБрдЮреНрдЬреА рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди) рдХреЛ рд╕рд╛рде рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реБрди рд╕рдХреНрдЫ, рддрд░ рдореИрд▓реЗ рдпреЛ рдХрд╣рд┐рд▓реНрдпреИ рднреЗрдЯреЗрдХреЛ рдЫреИрдиред

рдкрд╣реБрдБрдЪ рдмрд┐рдиреНрджреБ MAC рдареЗрдЧрд╛рдирд╛ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдЧрд░реНрди рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░рд┐рдПрдХреЛ рд╣реБрди рд╕рдХреНрдЫред рд╡рд╛, рдпрджрд┐ рдкрд╣реБрдБрдЪ рдмрд┐рдиреНрджреБрд▓реЗ рдкреБрд░рд╛рдиреЛ WEP рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫ рднрдиреЗ, рддреНрдпрд╣рд╛рдБ рд╡рд╛рд╕реНрддрд╡рдорд╛ рдХреБрдиреИ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдЫреИрди (рдпрд╣рд╛рдБ рдЧреБрдкреНрдд рдХреБрдЮреНрдЬреА рдЧреБрдкреНрддрд┐рдХрд░рдг рдХреБрдЮреНрдЬреА рд╣реЛ)ред рд╣рд╛рдореА рддреНрдпрд╕реНрддрд╛ рд╡рд┐рдХрд▓реНрдкрд╣рд░реВрд▓рд╛рдИ рдЕрдиреНрдп рд░реВрдкрдорд╛ рд╡рд░реНрдЧреАрдХреГрдд рдЧрд░реНрдЫреМрдВред
рддреНрдпрд╣рд╛рдБ рдПрдЙрдЯрд╛ рд╡рд┐рдзрд┐ рдкрдирд┐ рдЫ рдЬреБрди рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ wi-fi рдорд╛ рд▓реБрдХреЗрдХреЛ рдХреНрдпрд╛рдкреНрдЯрд┐рдн рдкреЛрд░реНрдЯрд▓ рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрдиреЗрд╕рдБрдЧ рд▓реЛрдХрдкреНрд░рд┐рдп рдЫ - рдмреНрд░рд╛рдЙрдЬрд░ рдорд╛рд░реНрдлрдд рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдЕрдиреБрд░реЛрдзред рддреНрдпрд╕реНрддрд╛ рдкрд╣реБрдБрдЪ рдмрд┐рдиреНрджреБрд╣рд░реВ рд╕реНрдХреНрдпрд╛рдирд░рдорд╛ рдЦреБрд▓рд╛ рд░реВрдкрдорд╛ рджреЗрдЦрд┐рдиреНрдЫрдиреН (рдЬреБрди рддрд┐рдиреАрд╣рд░реВ рднреМрддрд┐рдХ рдЬрдбрд╛рдирдХреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдгрдмрд╛рдЯ рд╣реБрдиреН)ред рддреНрдпрд╕реИрд▓реЗ, рд╣рд╛рдореА рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдЦреБрд▓рд╛ рд░реВрдкрдорд╛ рд╡рд░реНрдЧреАрдХреГрдд рдЧрд░реНрдЫреМрдВред

рджреЛрд╕реНрд░реЛ рдорд╛рдирдХреЛ рд░реВрдкрдорд╛ рдмреБрдЭрд╛рдЙрди рд╕рдХрд┐рдиреНрдЫ рдкреНрд░рдореБрдЦ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдоред рдпреЛ рдорд╛рдерд┐ рд╡рд░реНрдгрди рдЧрд░рд┐рдПрдХреЛ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╡рд┐рдзрд┐рдХреЛ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рд╣реЛред рдЗрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреБрдЮреНрдЬреАрд╣рд░реВ рдХрд╕рд░реА рдЖрджрд╛рдирдкреНрд░рджрд╛рди рдЧрд░рд┐рдиреНрдЫ рднрдиреНрдиреЗ рдмрд╛рд░реЗ рдХреБрд░рд╛ рдЧрд░реНрдЫред рд╕рдореНрднрд╛рд╡рд┐рдд рд╡рд┐рдХрд▓реНрдкрд╣рд░реВ рд╡рд┐рдЪрд╛рд░ рдЧрд░реМрдВред EAP - рдЙрд▓реНрд▓реЗрдЦ рдЧрд░рд┐рдПрдХреЛ WPA-Enterprice рдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ, рдкреНрд░рд╡рд┐рд╖реНрдЯ рдЧрд░рд┐рдПрдХреЛ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдбрд╛рдЯрд╛ рдкреНрд░рдорд╛рдгрд┐рдд рдЧрд░реНрди рдбрд╛рдЯрд╛рдмреЗрд╕ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫред SAE - рдЙрдиреНрдирдд WPA3 рдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдпреЛ, рдмреНрд░реВрдЯ рдлреЛрд░реНрд╕рдХреЛ рд▓рд╛рдЧрд┐ рдЕрдзрд┐рдХ рдкреНрд░рддрд┐рд░реЛрдзреАред PSK - рд╕рдмреИрднрдиреНрджрд╛ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдХрд▓реНрдк, рдкрд╛рд╕рд╡рд░реНрдб рдкреНрд░рд╡рд┐рд╖реНрдЯ рдЧрд░реНрди рд░ рдпрд╕рд▓рд╛рдИ рдЧреБрдкреНрддрд┐рдХрд░рдг рдлрд╛рд░рдордорд╛ рдкреНрд░рд╕рд╛рд░рдг рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫред IEEE8021X - рдПрдХ рдЕрдиреНрддрд░реНрд░рд╛рд╖реНрдЯреНрд░рд┐рдп рдорд╛рдирдХ рдЕрдиреБрд╕рд╛рд░ (WPA рдкрд░рд┐рд╡рд╛рд░ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рднрдиреНрджрд╛ рдлрд░рдХ)ред OWE (рдЕрд╡рд╕рд░рд╡рд╛рджреА рд╡рд╛рдпрд░рд▓реЗрд╕ рдЗрдиреНрдХреНрд░рд┐рдкреНрд╢рди) рд╣рд╛рдореАрд▓реЗ OPEN рдХреЛ рд░реВрдкрдорд╛ рд╡рд░реНрдЧреАрдХреГрдд рдЕрдВрдХрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ IEEE 802.11 рдорд╛рдирдХрдХреЛ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реЛред OWE рд▓реЗ рдпрд╕рд▓рд╛рдИ рдЧреБрдкреНрддрд┐рдХрд░рдг рдЧрд░реЗрд░ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдиреЗрдЯрд╡рд░реНрдХрдорд╛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдбрд╛рдЯрд╛рдХреЛ рд╕реБрд░рдХреНрд╖рд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрджрдЫред рдкрд╣реБрдБрдЪ рдХреБрдЮреНрдЬреАрд╣рд░реВ рдирднрдПрдХреЛ рдмреЗрд▓рд╛ рд╡рд┐рдХрд▓реНрдк рдкрдирд┐ рд╕рдореНрднрд╡ рдЫ, рдпрд╕ рд╡рд┐рдХрд▓реНрдкрд▓рд╛рдИ NONE рднрдирд┐рдиреНрдЫред

рддреЗрд╕реНрд░реЛ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рддрдерд╛рдХрдерд┐рдд рдЫред рдЧреБрдкреНрддрд┐рдХрд░рдг рдпреЛрдЬрдирд╛рд╣рд░реВ - рдкреНрд░рд╕рд╛рд░рд┐рдд рдбрд╛рдЯрд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рдЧрд░реНрди рдХрд╕рд░реА рд╕рд╛рдЗрдлрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫред рд╡рд┐рдХрд▓реНрдкрд╣рд░реВ рд╕реВрдЪреАрдмрджреНрдз рдЧрд░реМрдВред WEP - RC4 рд╕реНрдЯреНрд░рд┐рдо рд╕рд╛рдЗрдлрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫ, рдЧреБрдкреНрдд рдХреБрдЮреНрдЬреА рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреБрдЮреНрдЬреА рд╣реЛ, рдЬреБрди рдЖрдзреБрдирд┐рдХ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреАрдХреЛ рд╕рдВрд╕рд╛рд░рдорд╛ рдЕрд╕реНрд╡реАрдХрд╛рд░реНрдп рдорд╛рдирд┐рдиреНрдЫред TKIP - WPA рдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ, CKIP - WPA2 рдорд╛ред TKIP + CKIP - рдкрдЫрд╛рдбрд┐ рдЕрдиреБрдХреВрд▓рддрд╛рдХреЛ рд▓рд╛рдЧрд┐ WPA рд░ WPA2 рдорд╛ рд╕рдХреНрд╖рдо рдЕрдВрдХрд╣рд░реВрдорд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред

рддреАрди рддрддреНрд╡рд╣рд░реВрдХреЛ рд╕рдЯреНрдЯрд╛, рддрдкрд╛рдИрдВрд▓реЗ рдПрдХреНрд▓реЛ WEP рдЪрд┐рдиреНрд╣ рдкрд╛рдЙрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ:

[WEP]

рд╣рд╛рдореАрд▓реЗ рдорд╛рдерд┐ рдЫрд▓рдлрд▓ рдЧрд░реЗрдЭреИрдВ, рдпреЛ рдХреБрдЮреНрдЬреАрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрди рдкрд░реНрдпрд╛рдкреНрдд рдЫреИрди, рдЬреБрди рдЕрд╡рд╕реНрдерд┐рдд рдЫреИрди, рд░ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рд╡рд┐рдзрд┐, рдЬреБрди рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛ рд╕рдорд╛рди рдЫред

рдЕрдм рдпреЛ рдХреЛрд╖реНрдардХ рд╡рд┐рдЪрд╛рд░ рдЧрд░реНрдиреБрд╣реЛрд╕реН:

[ESS]

рдпреЛ Wi-Fi рд╕рдЮреНрдЪрд╛рд▓рди рдореЛрдб рд╡рд╛ Wi-Fi рдиреЗрдЯрд╡рд░реНрдХ рдЯреЛрдкреЛрд▓реЛрдЬреАред рддрдкрд╛рдИрдВрд▓реЗ BSS (рдЖрдзрд╛рд░рднреВрдд рд╕реЗрд╡рд╛ рд╕реЗрдЯ) рдореЛрдбрдХреЛ рд╕рд╛рдордирд╛ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ - рдЬрдм рддреНрдпрд╣рд╛рдБ рдПрдХ рдкрд╣реБрдБрдЪ рдмрд┐рдиреНрджреБ рд╣реБрдиреНрдЫ рдЬрд╕рдХреЛ рдорд╛рдзреНрдпрдордмрд╛рдЯ рдЬрдбрд╛рди рдЧрд░рд┐рдПрдХрд╛ рдЙрдкрдХрд░рдгрд╣рд░реВ рд╕рдЮреНрдЪрд╛рд░ рдЧрд░реНрдЫрдиреНред рд╕реНрдерд╛рдиреАрдп рдиреЗрдЯрд╡рд░реНрдХрд╣рд░реВрдорд╛ рдлреЗрд▓рд╛ рдкрд╛рд░реНрди рд╕рдХрд┐рдиреНрдЫред рдирд┐рдпрдордХреЛ рд░реВрдкрдорд╛, рдкрд╣реБрдБрдЪ рдмрд┐рдиреНрджреБрд╣рд░реВ рд╡рд┐рднрд┐рдиреНрди рд╕реНрдерд╛рдиреАрдп рдиреЗрдЯрд╡рд░реНрдХрд╣рд░реВрдмрд╛рдЯ рдЙрдкрдХрд░рдгрд╣рд░реВ рдЬрдбрд╛рди рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ, рддреНрдпрд╕реИрд▓реЗ рддрд┐рдиреАрд╣рд░реВ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╕реЗрд╡рд╛ рд╕реЗрдЯрд╣рд░реВ - ESS рдХреЛ рднрд╛рдЧ рд╣реБрдиреНред IBSSs (рд╕реНрд╡рддрдиреНрддреНрд░ рдЖрдзрд╛рд░рднреВрдд рд╕реЗрд╡рд╛ рд╕реЗрдЯрд╣рд░реВ) рдкреНрд░рдХрд╛рд░рд▓реЗ рдЙрдкрдХрд░рдг рдкрд┐рдпрд░-рдЯреВ-рдкрд┐рдпрд░ рдиреЗрдЯрд╡рд░реНрдХрдХреЛ рдЕрдВрд╢ рд╣реЛ рднрдиреА рд╕рдВрдХреЗрдд рдЧрд░реНрдЫред

рддрдкрд╛рдИрдВрд▓реЗ WPS рдЭрдгреНрдбрд╛ рдкрдирд┐ рджреЗрдЦреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ:

[WPS]

WPS (Wi-Fi рд╕рдВрд░рдХреНрд╖рд┐рдд рд╕реЗрдЯрдЕрдк) Wi-Fi рдиреЗрдЯрд╡рд░реНрдХрдХреЛ рдЕрд░реНрдз-рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкреНрд░рд╛рд░рдореНрднрдХреЛ рд▓рд╛рдЧрд┐ рдПрдХ рдкреНрд░реЛрдЯреЛрдХрд▓ рд╣реЛред рд╕реБрд░реБ рдЧрд░реНрди, рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд▓реЗ рдпрд╛ рдд 8-рдХреНрдпрд╛рд░реЗрдХреНрдЯрд░рдХреЛ рдкрд╛рд╕рд╡рд░реНрдб рдкреНрд░рд╡рд┐рд╖реНрдЯ рдЧрд░реНрджрдЫ рд╡рд╛ рд░рд╛рдЙрдЯрд░рдорд╛ рдмрдЯрди рдерд┐рдЪреНрджрдЫред рдпрджрд┐ рддрдкрд╛рдЗрдБрдХреЛ рдкрд╣реБрдБрдЪ рдмрд┐рдиреНрджреБ рдкрд╣рд┐рд▓реЛ рдкреНрд░рдХрд╛рд░рдХреЛ рд╣реЛ рд░ рдпреЛ рдЪреЗрдХрдмрдХреНрд╕ рддрдкрд╛рдЗрдБрдХреЛ рдкрд╣реБрдБрдЪ рдмрд┐рдиреНрджреБрдХреЛ рдирд╛рдордХреЛ рдЫреЗрдЙрдорд╛ рджреЗрдЦрд┐рдиреНрдЫ рднрдиреЗ, рддрдкрд╛рдЗрдБрд▓рд╛рдИ рдкреНрд░рд╢рд╛рд╕рдХ рдкреНрдпрд╛рдирд▓рдорд╛ рдЬрд╛рдиреБрд╣реЛрд╕реН рд░ WPS рдкрд╣реБрдБрдЪ рдЕрд╕рдХреНрд╖рдо рдЧрд░реНрди рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░рд┐рдиреНрдЫред рддрдереНрдп рдпреЛ рд╣реЛ рдХрд┐ рдкреНрд░рд╛рдп: 8-рдЕрдВрдХрдХреЛ PIN MAC рдареЗрдЧрд╛рдирд╛рдмрд╛рдЯ рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрди рд╕рдХрд┐рдиреНрдЫ, рд╡рд╛ рдпрд╕рд▓рд╛рдИ рдирд┐рдХрдЯрддрдо рд╕рдордпрдорд╛ рдХреНрд░рдордмрджреНрдз рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ, рдЬрд╕рдХреЛ рдХрд╕реИрд▓реЗ рдмреЗрдЗрдорд╛рдирдкреВрд░реНрд╡рдХ рдлрд╛рдЗрджрд╛ рд▓рд┐рди рд╕рдХреНрдЫред

6. рдореЛрдбреЗрд▓ рд░ рдкрд╛рд░реНрд╕рд┐рдЩ рдкреНрд░рдХрд╛рд░реНрдп рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН

рд╣рд╛рдореАрд▓реЗ рдорд╛рдерд┐ рдкрддреНрддрд╛ рд▓рдЧрд╛рдПрдХреЛ рдЖрдзрд╛рд░рдорд╛, рд╣рд╛рдореА рдбреЗрдЯрд╛ рд╡рд░реНрдЧрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдХреЗ рднрдпреЛ рднрдиреЗрд░ рд╡рд░реНрдгрди рдЧрд░реНрдиреЗрдЫреМрдВ:

/* ╤Б╤Е╨╡╨╝╨░ ╨░╤Г╤В╨╡╨╜╤В╨╕╤Д╨╕╨║╨░╤Ж╨╕╨╕ */
enum class AuthMethod {
    WPA3,
    WPA2,
    WPA, // Wi-Fi Protected Access
    OTHER, // ╨▓╨║╨╗╤О╤З╨░╨╡╤В ╨▓ ╤Б╨╡╨▒╤П Shared Key Authentication ╨╕ ╨┤╤А. ╨╕╤Б╨┐╨╛╨╗╤М╨╖╤Г╤О╤Й╨╕╨╡ mac-address-based ╨╕ WEP
    CCKM, // Cisco
    OPEN // Open Authentication. ╨Ь╨╛╨╢╨╡╤В ╨▒╤Л╤В╤М ╤Б╨╛ ╤Б╨║╤А╤Л╤В╤Л╨╝ Captive Portal Detection - ╨╖╨░╨┐╤А╨╛╤Б ╨░╤Г╤В╨╡╨╜╤В╨╕╤Д╨╕╨║╨░╤Ж╨╕╨╕ ╤З╨╡╤А╨╡╨╖ ╨▒╤А╨░╤Г╨╖╨╡╤А
}

/* ╨░╨╗╨│╨╛╤А╨╕╤В╨╝ ╨▓╨▓╨╛╨┤╨░ ╨║╨╗╤О╤З╨╡╨╣ */
enum class KeyManagementAlgorithm {
    IEEE8021X, // ╨┐╨╛ ╤Б╤В╨░╨╜╨┤╨░╤А╤В╤Г
    EAP, // Extensible Authentication Protocol, ╤А╨░╤Б╤И╨╕╤А╤П╨╡╨╝╤Л╨╣ ╨┐╤А╨╛╤В╨╛╨║╨╛╨╗ ╨░╤Г╤В╨╡╨╜╤В╨╕╤Д╨╕╨║╨░╤Ж╨╕╨╕
    PSK, // Pre-Shared Key тАФ ╨║╨░╨╢╨┤╤Л╨╣ ╤Г╨╖╨╡╨╗ ╨▓╨▓╨╛╨┤╨╕╤В ╨┐╨░╤А╨╛╨╗╤М ╨┤╨╗╤П ╨┤╨╛╤Б╤В╤Г╨┐╨░ ╨║ ╤Б╨╡╤В╨╕
    WEP, // ╨▓ WEP ╨┐╨░╤А╨╛╨╗╤М ╤П╨▓╨╗╤П╨╡╤В╤Б╤П ╨║╨╗╤О╤З╨╛╨╝ ╤И╨╕╤Д╤А╨╛╨▓╨░╨╜╨╕╤П (No auth key)
    SAE, // Simultaneous Authentication of Equals - ╨╝╨╛╨╢╨╡╤В ╨▒╤Л╤В╤М ╨▓ WPA3
    OWE, // Opportunistic Wireless Encryption - ╨▓ ╤А╨╛╤Г╤В╨╡╤А╨░╤Е ╨╜╨╛╨▓╤Л╤Е ╨┐╨╛╨║╨╛╨╗╨╡╨╜╨╕╨╣, ╨┐╤Г╨▒╨╗╨╕╤З╨╜╤Л╤Е ╤Б╨╡╤В╤П╤Е ╤В╨╕╨┐╨░ OPEN
    NONE // ╨╝╨╛╨╢╨╡╤В ╨▒╤Л╤В╤М ╨▒╨╡╨╖ ╤И╨╕╤Д╤А╨╛╨▓╨░╨╜╨╕╤П ╨▓ OPEN, OTHER
}

/* ╨╝╨╡╤В╨╛╨┤ ╤И╨╕╤Д╤А╨╛╨▓╨░╨╜╨╕╤П */
enum class CipherMethod {
    WEP, // Wired Equivalent Privacy, ╨Р╨╜╨░╨╗╨╛╨│ ╤И╨╕╤Д╤А╨╛╨▓╨░╨╜╨╕╤П ╤В╤А╨░╤Д╨╕╨║╨░ ╨▓ ╨┐╤А╨╛╨▓╨╛╨┤╨╜╤Л╤Е ╤Б╨╡╤В╤П╤Е
    TKIP, // Temporal Key Integrity Protocol
    CCMP, // Counter Mode with Cipher Block Chaining Message Authentication Code Protocol,
    // ╨┐╤А╨╛╤В╨╛╨║╨╛╨╗ ╨▒╨╗╨╛╤З╨╜╨╛╨│╨╛ ╤И╨╕╤Д╤А╨╛╨▓╨░╨╜╨╕╤П ╤Б ╨║╨╛╨┤╨╛╨╝ ╨░╤Г╤В╨╡╨╜╤В╨╕╤З╨╜╨╛╤Б╤В╨╕ ╤Б╨╛╨╛╨▒╤Й╨╡╨╜╨╕╤П ╨╕ ╤А╨╡╨╢╨╕╨╝╨╛╨╝ ╤Б╤Ж╨╡╨┐╨╗╨╡╨╜╨╕╤П ╨▒╨╗╨╛╨║╨╛╨▓ ╨╕ ╤Б╤З╨╡╤В╤З╨╕╨║╨░
    // ╨╜╨░ ╨╛╤Б╨╜╨╛╨▓╨╡ AES
    NONE // ╨╝╨╛╨╢╨╡╤В ╨▒╤Л╤В╤М ╨▒╨╡╨╖ ╤И╨╕╤Д╤А╨╛╨▓╨░╨╜╨╕╤П ╨▓ OPEN, OTHER
}

/* ╨╜╨░╨▒╨╛╤А ╨╝╨╡╤В╨╛╨┤╨╛╨▓ ╤И╨╕╤Д╤А╨╛╨▓╨░╨╜╨╕╤П ╨╕ ╨┐╤А╨╛╤В╨╛╨║╨╛╨╗╨╛╨▓, ╨┐╨╛ ╨║╨╛╤В╨╛╤А╤Л╨╝ ╨╝╨╛╨╢╨╡╤В ╤А╨░╨▒╨╛╤В╨░╤В╤М ╤В╨╛╤З╨║╨░ */
data class Capability(
    var authScheme: AuthMethod? = null,
    var keyManagementAlgorithm: KeyManagementAlgorithm? = null,
    var cipherMethod: CipherMethod? = null
)

/* ╨а╨╡╨╢╨╕╨╝ ╤А╨░╨▒╨╛╤В╤Л WiFi (╨╕╨╗╨╕ ╤В╨╛╨┐╨╛╨╗╨╛╨│╨╕╤П ╤Б╨╡╤В╨╡╨╣ WiFi) */
enum class TopologyMode {
    IBSS, // ╨н╨┐╨╕╨╖╨╛╨┤╨╕╤З╨╡╤Б╨║╨░╤П ╤Б╨╡╤В╤М (Ad-Hoc ╨╕╨╗╨╕ IBSS тАУ Independent Basic Service Set).
    BSS, // ╨Ю╤Б╨╜╨╛╨▓╨╜╨░╤П ╨╖╨╛╨╜╨░ ╨╛╨▒╤Б╨╗╤Г╨╢╨╕╨▓╨░╨╜╨╕╤П Basic Service Set (BSS) ╨╕╨╗╨╕ Infrastructure Mode.
    ESS // ╨а╨░╤Б╤И╨╕╤А╨╡╨╜╨╜╨░╤П ╨╖╨╛╨╜╨░ ╨╛╨▒╤Б╨╗╤Г╨╢╨╕╨▓╨░╨╜╨╕╤П ESS тАУ Extended Service Set.
}

рдЕрдм рдПрдЙрдЯрд╛ рдкреНрд░рдХрд╛рд░реНрдп рд▓реЗрдЦреМрдВ рдЬрд╕рд▓реЗ рдХреНрд╖рдорддрд╛ рдлрд┐рд▓реНрдбрд▓рд╛рдИ рдкрд╛рд░реНрд╕ рдЧрд░реНрдиреЗрдЫ:


private fun parseCapabilities(capabilitiesString: String): List < Capability > {
    val capabilities: List < Capability > = capabilitiesString
        .splitByBrackets()
        .filter {
            !it.isTopology() && !it.isWps()
        }
        .flatMap {
            parseCapability(it)
        }
    return
        if (!capabilities.isEmpty()) {
            capabilities
        } else {
            listOf(Capability(AuthMethod.OPEN, KeyManagementAlgorithm.NONE, CipherMethod.NONE))
        }
}

private fun parseCapability(part: String): List < Capability > {
    if (part.contains("WEP")) {
        return listOf(Capability(
            AuthMethod.OTHER,
            KeyManagementAlgorithm.WEP,
            CipherMethod.WEP
        ))
    }

    val authScheme = when {
        part.contains("WPA3") - > AuthMethod.WPA3
        part.contains("WPA2") - > AuthMethod.WPA2
        part.contains("WPA") - > AuthMethod.WPA
        else - > null
    }

    val keyManagementAlgorithm = when {
        part.contains("OWE") - > KeyManagementAlgorithm.OWE
        part.contains("SAE") - > KeyManagementAlgorithm.SAE
        part.contains("IEEE802.1X") - > KeyManagementAlgorithm.IEEE8021X
        part.contains("EAP") - > KeyManagementAlgorithm.EAP
        part.contains("PSK") - > KeyManagementAlgorithm.PSK
        else - > null
    }

    val capabilities = ArrayList < Capability > ()
    if (part.contains("TKIP") || part.contains("CCMP")) {
        if (part.contains("TKIP")) {
            capabilities.add(Capability(
                authScheme ? : AuthMethod.OPEN,
                keyManagementAlgorithm ? : KeyManagementAlgorithm.NONE,
                CipherMethod.TKIP
            ))
        }
        if (part.contains("CCMP")) {
            capabilities.add(Capability(
                authScheme ? : AuthMethod.OPEN,
                keyManagementAlgorithm ? : KeyManagementAlgorithm.NONE,
                CipherMethod.CCMP
            ))
        }
    } else if (authScheme != null || keyManagementAlgorithm != null) {
        capabilities.add(Capability(
            authScheme ? : AuthMethod.OPEN,
            keyManagementAlgorithm ? : KeyManagementAlgorithm.NONE,
            CipherMethod.NONE
        ))
    }

    return capabilities
}

private fun parseTopologyMode(capabilitiesString: String): TopologyMode ? {
    return capabilitiesString
        .splitByBrackets()
        .mapNotNull {
            when {
                it.contains("ESS") - > TopologyMode.ESS
                it.contains("BSS") - > TopologyMode.BSS
                it.contains("IBSS") - > TopologyMode.IBSS
                else - > null
            }
        }
        .firstOrNull()
}

private fun parseWPSAvailable(capabilitiesString: String): Boolean {
    return capabilitiesString
        .splitByBrackets()
        .any {
            it.isWps()
        }
}

private fun String.splitByBrackets(): List < String > {
    val m = Pattern.compile("[(.*?)]").matcher(this)
    val parts = ArrayList < String > ()
    while (m.find()) {
        parts.add(m.group().replace("[", "").replace("]", ""))
    }
    return parts
}

private fun String.isTopology(): Boolean {
    return TopologyMode.values().any {
        this == it.name
    }
}

private fun String.isWps(): Boolean {
    return this == "WPS"
}

8. рдирддрд┐рдЬрд╛ рд╣реЗрд░реНрдиреБрд╣реЛрд╕реН

рдо рдиреЗрдЯрд╡рд░реНрдХ рд╕реНрдХреНрдпрд╛рди рдЧрд░реНрдЫреБ рд░ рдореИрд▓реЗ рдлреЗрд▓рд╛ рдкрд╛рд░реЗрдХреЛ рдХреБрд░рд╛ рджреЗрдЦрд╛рдЙрдиреЗрдЫреБред Log.d рдорд╛рд░реНрдлрдд рд╕рд╛рдзрд╛рд░рдг рдЖрдЙрдЯрдкреБрдЯрдХреЛ рдирддрд┐рдЬрд╛ рджреЗрдЦрд╛рдЗрдПрдХреЛ рдЫ:

Capability of Home-Home [WPA2-PSK-CCMP][ESS][WPS]
...
capabilities=[Capability(authScheme=WPA2, keyManagementAlgorithm=PSK, cipherMethod=CCMP)], topologyMode=ESS, availableWps=true

рдПрдкреНрд▓рд┐рдХреЗрд╕рди рдХреЛрдбрдмрд╛рдЯ рд╕рдЮреНрдЬрд╛рд▓рдорд╛ рдЬрдбрд╛рдирдХреЛ рдореБрджреНрджрд╛ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд░рд╣реНрдпреЛред рдо рдХреЗрд╡рд▓ рдпреЛ рднрдиреНрди рдЪрд╛рд╣рдиреНрдЫреБ рдХрд┐ рдореЛрдмрд╛рдЗрд▓ рдЙрдкрдХрд░рдгрдХреЛ OS рдмрд╛рдЯ рд╕реБрд░рдХреНрд╖рд┐рдд рдЧрд░рд┐рдПрдХрд╛ рдкрд╛рд╕рд╡рд░реНрдбрд╣рд░реВ рдкрдвреНрдирдХреЛ рд▓рд╛рдЧрд┐, рддрдкрд╛рдЗрдБрд▓рд╛рдИ wpa_supplicant.conf рдкрдвреНрдирдХреЛ рд▓рд╛рдЧрд┐ рдлрд╛рдЗрд▓ рдкреНрд░рдгрд╛рд▓реА рдорд╛рд░реНрдлрдд рд░реВрдЯ рдЕрдзрд┐рдХрд╛рд░ рд░ рд░рдореЗрдЬ рдЧрд░реНрдиреЗ рдЗрдЪреНрдЫрд╛ рдЪрд╛рд╣рд┐рдиреНрдЫред рдпрджрд┐ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рддрд░реНрдХрд▓рд╛рдИ рдмрд╛рд╣рд┐рд░рдмрд╛рдЯ рдкрд╛рд╕рд╡рд░реНрдб рдкреНрд░рд╡рд┐рд╖реНрдЯ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ рднрдиреЗ, рдЬрдбрд╛рди рдХрдХреНрд╖рд╛ рдорд╛рд░реНрдлрдд рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ android.net.wifi.WifiManager.

╨б╨┐╨░╤Б╨╕╨▒╨╛ Egor Ponomarev рдмрд╣реБрдореВрд▓реНрдп рдердкрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ред

рдпрджрд┐ рддрдкрд╛рдЗрдБ рдХреЗрд╣рд┐ рдердкреНрди рд╡рд╛ рд╕реБрдзрд╛рд░ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ рдЬрд╕реНрддреЛ рд▓рд╛рдЧреНрдЫ рднрдиреЗ, рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВрдорд╛ рд▓реЗрдЦреНрдиреБрд╣реЛрд╕реН :)

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди