рд╡рд╛рдп-рдлрд╛рдп рдЖрдгрд┐ рдЗрддрд░ рдЕрдиреЗрдХ рд╕рдВрдХреНрд╖реЗрдк. рдЕрдБрдбреНрд░реЙрдЗрдб рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рдирдордзреНрдпреЗ рд╡рд╛рдп-рдлрд╛рдп рдиреЛрдбреНрд╕рдЪрд╛ рдбреЗрдЯрд╛ рд╕реБрдЬрд▓реНрдпрд╛рд╢рд┐рд╡рд╛рдп рдХрд╕рд╛ рдорд┐рд│рд╡рд╛рдпрдЪрд╛

рдПрдХреЗ рджрд┐рд╡рд╢реА рдорд▓рд╛ рдЕрдБрдбреНрд░реЙрдЗрдб рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рд╡рд░реВрди рд╡рд╛рдп-рдлрд╛рдп рдиреЗрдЯрд╡рд░реНрдХ рд╕реНрдХреЕрди рдХрд░рд╛рдпрдЪреЗ рд╣реЛрддреЗ рдЖрдгрд┐ рдНрдХреНрд╕реЗрд╕ рдкреЙрдЗрдВрдЯреНрд╕рдмрджреНрджрд▓ рддрдкрд╢реАрд▓рд╡рд╛рд░ рдбреЗрдЯрд╛ рдорд┐рд│рд╡рд╛рдпрдЪрд╛ рд╣реЛрддрд╛.

рдпреЗрдереЗ рдЖрдореНрд╣рд╛рд▓рд╛ рдЕрдиреЗрдХ рдЕрдбрдЪрдгреАрдВрдЪрд╛ рд╕рд╛рдордирд╛ рдХрд░рд╛рд╡рд╛ рд▓рд╛рдЧрд▓рд╛: рдмрдВрдж. рдЕрдБрдбреНрд░реЙрдЗрдб рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдг рд╡рд░реНрдгрди рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╡рд░реНрдЧрд╛рдВрдкреИрдХреА рдмрд░реЗрдЪрд╕реЗ рдирд╛рдкрд╕рдВрдд рдЭрд╛рд▓реЗ (API рд╕реНрддрд░ > 26), рдЬреЗ рддреНрдпрд╛рдд рдкрд░рд╛рд╡рд░реНрддрд┐рдд рдЭрд╛рд▓реЗ рдирд╛рд╣реА; рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдгрд╛рддреАрд▓ рдХрд╛рд╣реА рдЧреЛрд╖реНрдЯреАрдВрдЪреЗ рд╡рд░реНрдгрди рдЕрддреНрдпрд▓реНрдк рдЖрд╣реЗ (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рд╡рд░реНрдЧрд╛рдЪреА рдХреНрд╖рдорддрд╛ рдлреАрд▓реНрдб рд╕реНрдХреЕрди рдкрд░рд┐рдгрд╛рдо рд▓реЗрдЦрдирд╛рдЪреНрдпрд╛ рд╡реЗрд│реА, рдЬрд╡рд│рдЬрд╡рд│ рдХрд╛рд╣реАрд╣реА рд╡рд░реНрдгрди рдХреЗрд▓реЗрд▓реЗ рдирд╛рд╣реА, рдЬрд░реА рддреНрдпрд╛рдд рднрд░рдкреВрд░ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдбреЗрдЯрд╛ рдЖрд╣реЗ). рддрд┐рд╕рд░реА рдЕрдбрдЪрдг рдпрд╛ рд╡рд╕реНрддреБрд╕реНрдерд┐рддреАрдд рдЕрд╕реВ рд╢рдХрддреЗ рдХреА рдЬреЗрд╡реНрд╣рд╛ рддреБрдореНрд╣реА рдкреНрд░рдердо рд╡рд╛рдп-рдлрд╛рдпрдЪреНрдпрд╛ рдЬрд╡рд│ рдЬрд╛рддрд╛, рд╕рд┐рджреНрдзрд╛рдВрдд рд╡рд╛рдЪрдгреНрдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд рдЖрдгрд┐ рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯрджреНрд╡рд╛рд░реЗ рд░рд╛рдЙрдЯрд░ рд╕реЗрдЯ рдХрд░рдгреНрдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рддреБрдореНрд╣рд╛рд▓рд╛ рд╡реИрдпрдХреНрддрд┐рдХрд░рд┐рддреНрдпрд╛ рд╕рдордЬрдгреНрдпрд╛рдпреЛрдЧреНрдп рд╡рд╛рдЯрдгрд╛рд▒реНрдпрд╛ рдЕрдиреЗрдХ рд╕рдВрдХреНрд╖реЗрдкрд╛рдВрдЪрд╛ рд╕рд╛рдордирд╛ рдХрд░рд╛рд╡рд╛ рд▓рд╛рдЧрддреЛ. рдкрд░рдВрддреБ рддреНрдпрд╛рдВрдЪрд╛ рд╕рдВрдмрдВрдз рдЖрдгрд┐ рд░рдЪрдирд╛ рдХрд╢реА рдХрд░рд╛рд╡реА рд╣реЗ рдХрджрд╛рдЪрд┐рдд рд╕реНрдкрд╖реНрдЯ рдирд╕реЗрд▓ (рдирд┐рд░реНрдгрдп рд╡реНрдпрдХреНрддрд┐рдирд┐рд╖реНрда рдЖрд╣реЗ рдЖрдгрд┐ рдорд╛рдЧреАрд▓ рдЕрдиреБрднрд╡рд╛рд╡рд░ рдЕрд╡рд▓рдВрдмреВрди рдЖрд╣реЗ).

рд╣рд╛ рд▓реЗрдЦ рдПрдирдбреАрдХреЗ, рд╣реЕрдХрд╢рд┐рд╡рд╛рдп Android рдХреЛрдбрд╡рд░реВрди рд╡рд╛рдп-рдлрд╛рдп рд╡рд╛рддрд╛рд╡рд░рдгрд╛рд╡рд┐рд╖рдпреА рд╕рд░реНрд╡рд╕рдорд╛рд╡реЗрд╢рдХ рдбреЗрдЯрд╛ рдХрд╕рд╛ рдорд┐рд│рд╡рд╛рдпрдЪрд╛, рдкрд░рдВрддреБ рдХреЗрд╡рд│ Android API рд╡рд╛рдкрд░реВрди рдЖрдгрд┐ рддреНрдпрд╛рдЪрд╛ рдЕрд░реНрде рдХрд╕рд╛ рд▓рд╛рд╡рд╛рдпрдЪрд╛ рд╣реЗ рд╕рдордЬреВрди рдШреЗрдгреНрдпрд╛рд╡рд░ рдЪрд░реНрдЪрд╛ рдХрд░рддреЛ.

рдЪрд▓рд╛ рдЙрд╢реАрд░ рдХрд░реВ рдирдХрд╛ рдЖрдгрд┐ рдХреЛрдб рд▓рд┐рд╣рд╛рдпрд▓рд╛ рд╕реБрд░реБрд╡рд╛рдд рдХрд░реВрдпрд╛.

1. рдПрдХ рдкреНрд░рдХрд▓реНрдк рддрдпрд╛рд░ рдХрд░рд╛

рд╣реА рдЯреАрдк рддреНрдпрд╛рдВрдЪреНрдпрд╛рд╕рд╛рдареА рдЖрд╣реЗ рдЬреНрдпрд╛рдВрдиреА рдПрдХрд╛рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рд╡реЗрд│рд╛ Android рдкреНрд░рдХрд▓реНрдк рддрдпрд╛рд░ рдХреЗрд▓рд╛ рдЖрд╣реЗ, рдореНрд╣рдгреВрди рдЖрдореНрд╣реА рдпрд╛ рдЖрдпрдЯрдордЪреЗ рддрдкрд╢реАрд▓ рд╡рдЧрд│рддреЛ. рдЦрд╛рд▓реАрд▓ рдХреЛрдб Kotlin рдордзреНрдпреЗ рд╕рд╛рджрд░ рдХреЗрд▓рд╛ рдЬрд╛рдИрд▓, minSdkVersion=23.

2. рдкреНрд░рд╡реЗрд╢ рдкрд░рд╡рд╛рдирдЧреНрдпрд╛

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

рдореНрд╣рдгреВрди, 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. рдмреНрд░реЙрдбрдХрд╛рд╕реНрдЯ рд░рд┐рд╕реАрд╡реНрд╣рд░ рддрдпрд╛рд░ рдХрд░рд╛ рдЖрдгрд┐ рд╡рд╛рдп-рдлрд╛рдп рдиреЗрдЯрд╡рд░реНрдХ рд╡рд╛рддрд╛рд╡рд░рдг рд╕реНрдХреЕрди рдХрд░рдгреНрдпрд╛рдмрджреНрджрд▓ рдбреЗрдЯрд╛ рдЕрдкрдбреЗрдЯ рдЗрд╡реНрд╣реЗрдВрдЯрдЪреА рд╕рджрд╕реНрдпрддрд╛ рдШреНрдпрд╛

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 рдкрд╣рд╛ рдЖрдгрд┐ рдЕрдЯреА рд╕рдордЬреВрди рдШреНрдпрд╛

рдЪрд▓рд╛ рдпрд╛ рд╡рд░реНрдЧрд╛рддреАрд▓ рдХрд╛рд╣реА рдлреАрд▓реНрдб рдкрд╛рд╣реВ рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪрд╛ рдЕрд░реНрде рдХрд╛рдп рддреЗ рд╡рд░реНрдгрди рдХрд░реВрдпрд╛:

рдПрд╕рдПрд╕рдЖрдпрдбреА тАФ рд╕рд░реНрд╡реНрд╣рд┐рд╕ рд╕реЗрдЯ рдЖрдпрдбреЗрдВрдЯрд┐рдлрд╛рдпрд░ рд╣реЗ рдиреЗрдЯрд╡рд░реНрдХрдЪреЗ рдирд╛рд╡ рдЖрд╣реЗ

рдмреАрдПрд╕рдПрд╕рдЖрдпрдбреА - рдмреЗрд╕рд┐рдХ рд╕рд░реНрд╡реНрд╣рд┐рд╕ рд╕реЗрдЯ рдЖрдпрдбреЗрдВрдЯрд┐рдлрд╛рдпрд░ - рдиреЗрдЯрд╡рд░реНрдХ рдЕрдбреЕрдкреНрдЯрд░рдЪрд╛ MAC рдкрддреНрддрд╛ (рд╡рд╛рдп-рдлрд╛рдп рдкреЙрдЗрдВрдЯ)

рдкрд╛рддрд│реА тАФ рдкреНрд░рд╛рдкреНрдд рд╕рд┐рдЧреНрдирд▓ рд╕реНрдЯреНрд░реЗрдВрде рдЗрдВрдбрд┐рдХреЗрдЯрд░ [dBm (рд░рд╢рд┐рдпрди dBm) тАФ рдбреЗрд╕рд┐рдмрд▓, рд╕рдВрджрд░реНрдн рд╢рдХреНрддреА 1 mW.] тАФ рдкреНрд░рд╛рдкреНрдд рдЭрд╛рд▓реЗрд▓реНрдпрд╛ рд╕рд┐рдЧреНрдирд▓ рд╕рд╛рдорд░реНрдереНрдпрд╛рдЪрд╛ рд╕реВрдЪрдХ. 0 рддреЗ -100 рдкрд░реНрдпрдВрдд рдореВрд▓реНрдп рдШреЗрддреЗ, 0 рдкрд╛рд╕реВрди рдкреБрдвреЗ, рд╡рд╛рдп-рдлрд╛рдп рдкреЙрдИрдВрдЯрдкрд╛рд╕реВрди рддреБрдордЪреНрдпрд╛ рдбрд┐рд╡реНрд╣рд╛рдЗрд╕рдХрдбреЗ рдЬрд╛рддрд╛рдирд╛ рдЕрдзрд┐рдХ рд╕рд┐рдЧреНрдирд▓ рдкреЙрд╡рд░ рдирд╖реНрдЯ рд╣реЛрддреЗ. рдЕрдзрд┐рдХ рддрдкрд╢реАрд▓ рдЖрдврд│реВ рд╢рдХрддрд╛рдд, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдпреЗрдереЗ рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛. рдпреЗрдереЗ рдореА рддреБрдореНрд╣рд╛рд▓рд╛ Android рдХреНрд▓рд╛рд╕ рд╡рд╛рдкрд░реВрди рд╕рд╛рдВрдЧреЗрди рд╡рд╛рдпрдлрд╛рдп рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рддреБрдореНрд╣реА рдирд┐рд╡рдбрд▓реЗрд▓реНрдпрд╛ рдкрд╛рдпрд░реАрдордзреНрдпреЗ рддреБрдореНрд╣реА рд╕рд┐рдЧреНрдирд▓ рдкрд╛рддрд│реА рдЙрддреНрдХреГрд╖реНрдЯ рддреЗ рднрдпрдВрдХрд░ рд╕реНрдХреЗрд▓рд╡рд░ рдХреЕрд▓рд┐рдмреНрд░реЗрдЯ рдХрд░реВ рд╢рдХрддрд╛:

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

рд╡рд╛рд░рдВрд╡рд╛рд░рддрд╛ тАФ рд╡рд╛рдп-рдлрд╛рдп рдкреЙрдЗрдВрдЯ [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 рдЕрд▓реНрдЧреЛрд░рд┐рджрдо рд╡рд╛рдкрд░реВрди рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рди рдХрд░рдд рдЕрд╕реЗрд▓, рддрд░ рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд рдХреЛрдгрддреЗрд╣реА рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдирд╛рд╣реА (рдпреЗрдереЗ рдЧреБрдкреНрдд рдХреА рд╣реА рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреА рдЖрд╣реЗ). рдЖрдореНрд╣реА рдЕрд╢рд╛ рдкрд░реНрдпрд╛рдпрд╛рдВрдЪреЗ рдЗрддрд░ рдореНрд╣рдгреВрди рд╡рд░реНрдЧреАрдХрд░рдг рдХрд░рддреЛ.
рд▓рдкрд╡рд┐рд▓реЗрд▓реНрдпрд╛ рдХреЕрдкреНрдЯрд┐рд╡реНрд╣ рдкреЛрд░реНрдЯрд▓ рдбрд┐рдЯреЗрдХреНрд╢рдирд╕рд╣ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд╛рдп-рдлрд╛рдпрдордзреНрдпреЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдЕрд╕рд▓реЗрд▓реА рдПрдХ рдкрджреНрдзрдд рджреЗрдЦреАрд▓ рдЖрд╣реЗ - рдмреНрд░рд╛рдЙрдЭрд░рджреНрд╡рд╛рд░реЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╡рд┐рдирдВрддреА. рдЕрд╕реЗ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреВ рд╕реНрдХреЕрдирд░рд▓рд╛ рдЙрдШрдбреЗ рджрд┐рд╕рддрд╛рдд (рдЬреЗ рддреЗ рднреМрддрд┐рдХ рдХрдиреЗрдХреНрд╢рдирдЪреНрдпрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдирд╛рддреВрди рдЖрд╣реЗрдд). рдореНрд╣рдгреВрди, рдЖрдореНрд╣реА рддреНрдпрд╛рдВрдирд╛ рдУрдкрди рдореНрд╣рдгреВрди рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рддреЛ.

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

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

рддреАрди рдШрдЯрдХрд╛рдВрдРрд╡рдЬреА, рддреБрдореНрд╣реА рдПрдХрд╛рдХреА WEP рдЪрд┐рдиреНрд╣ рд╢реЛрдзреВ рд╢рдХрддрд╛:

[WEP]

рдЖрдореНрд╣реА рд╡рд░ рдЪрд░реНрдЪрд╛ рдХреЗрд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ, рдХреА рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЕрд▓реНрдЧреЛрд░рд┐рджрдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рди рдХрд░рдгреЗ рдкреБрд░реЗрд╕реЗ рдЖрд╣реЗ, рдЬреА рдЕрд╕реНрддрд┐рддреНрд╡рд╛рдд рдирд╛рд╣реА рдЖрдгрд┐ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдкрджреНрдзрдд, рдЬреА рдбреАрдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░ рд╕рдорд╛рди рдЖрд╣реЗ.

рдЖрддрд╛ рдпрд╛ рдмреНрд░реЕрдХреЗрдЯрдЪрд╛ рд╡рд┐рдЪрд╛рд░ рдХрд░рд╛:

[ESS]

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

рддреБрдореНрд╣реА WPS рдзреНрд╡рдЬ рджреЗрдЦреАрд▓ рдкрд╛рд╣реВ рд╢рдХрддрд╛:

[WPS]

WPS (рд╡рд╛рдп-рдлрд╛рдп рд╕рдВрд░рдХреНрд╖рд┐рдд рд╕реЗрдЯрдЕрдк) рд╣рд╛ рд╡рд╛рдп-рдлрд╛рдп рдиреЗрдЯрд╡рд░реНрдХрдЪреНрдпрд╛ рдЕрд░реНрдз-рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рдкреНрд░рд╛рд░рдВрднрд╛рд╕рд╛рдареА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдЖрд╣реЗ. рдкреНрд░рд╛рд░рдВрдн рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдПрдХрддрд░ 8-рд╡рд░реНрдгрд╛рдВрдЪрд╛ рдкрд╛рд╕рд╡рд░реНрдб рдкреНрд░рд╡рд┐рд╖реНрдЯ рдХрд░рддреЛ рдХрд┐рдВрд╡рд╛ рд░рд╛рдЙрдЯрд░рд╡рд░реАрд▓ рдмрдЯрдг рджрд╛рдмрддреЛ. рдЬрд░ рддреБрдордЪрд╛ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреВ рдкрд╣рд┐рд▓реНрдпрд╛ рдкреНрд░рдХрд╛рд░рдЪрд╛ рдЕрд╕реЗрд▓ рдЖрдгрд┐ рд╣рд╛ рдЪреЗрдХрдмреЙрдХреНрд╕ рддреБрдордЪреНрдпрд╛ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреВрдЪреНрдпрд╛ рдирд╛рд╡рд╛рдкреБрдвреЗ рджрд┐рд╕рдд рдЕрд╕реЗрд▓, рддрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рдкреНрд░рд╢рд╛рд╕рди рдкреЕрдиреЗрд▓рд╡рд░ рдЬрд╛рдгреНрдпрд╛рдЪреА рдЖрдгрд┐ WPS рдкреНрд░рд╡реЗрд╢ рдЕрдХреНрд╖рдо рдХрд░рдгреНрдпрд╛рдЪреА рдЬреЛрд░рджрд╛рд░ рд╢рд┐рдлрд╛рд░рд╕ рдХреЗрд▓реА рдЬрд╛рддреЗ. рд╡рд╕реНрддреБрд╕реНрдерд┐рддреА рдЕрд╢реА рдЖрд╣реЗ рдХреА рдмрд░реНтАНрдпрд╛рдЪрджрд╛ 8-рдЕрдВрдХреА рдкрд┐рди 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.

╨б╨┐╨░╤Б╨╕╨▒╨╛ рдПрдЧреЛрд░ рдкреЛрдиреЛрдорд╛рд░реЗрд╡реНрд╣ рдореМрд▓реНрдпрд╡рд╛рди рдЬреЛрдбрдгреНрдпрд╛рдВрд╕рд╛рдареА.

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

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛