Wi-Fi เช…เชจเซ‡ เช…เชจเซเชฏ เช˜เชฃเชพ เชธเช‚เช•เซเชทเซ‡เชช. เชเชจเซเชกเซเชฐเซ‹เช‡เชก เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชฎเชพเช‚ Wi-Fi เชจเซ‹เชกเซเชธ เชตเชฟเชถเซ‡เชจเซ‹ เชกเซ‡เชŸเชพ เชธเซ‹เชœเซ‹ เชตเชฟเชจเชพ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฎเซ‡เชณเชตเชตเซ‹

เชเช• เชฆเชฟเชตเชธ เชฎเชพเชฐเซ‡ Android เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซ‹เชฎเชพเช‚เชฅเซ€ Wi-Fi เชจเซ‡เชŸเชตเชฐเซเช•เซเชธ เชธเซเช•เซ‡เชจ เช•เชฐเชตเชพเชจเซ€ เช…เชจเซ‡ เชเช•เซเชธเซ‡เชธ เชชเซ‹เชˆเชจเซเชŸ เชตเชฟเชถเซ‡ เชตเชฟเช—เชคเชตเชพเชฐ เชกเซ‡เชŸเชพ เชฎเซ‡เชณเชตเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชนเชคเซ€.

เช…เชนเซ€เช‚ เช…เชฎเชจเซ‡ เช˜เชฃเซ€ เชฎเซเชถเซเช•เซ‡เชฒเซ€เช“เชจเซ‹ เชธเชพเชฎเชจเซ‹ เช•เชฐเชตเซ‹ เชชเชกเซเชฏเซ‹: เชฌเช‚เชง. เชเชจเซเชกเซเชฐเซ‹เช‡เชก เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃ เชตเชฐเซเชฃเชตเซ‡เชฒ เช˜เชฃเชพ เชตเชฐเซเช—เซ‹ เชจเชพเชชเชธเช‚เชฆ เชฅเชˆ เช—เชฏเชพ (API เชธเซเชคเชฐ > 26), เชœเซ‡ เชคเซ‡เชฎเชพเช‚ เชชเซเชฐเชคเชฟเชฌเชฟเช‚เชฌเชฟเชค เชฅเชฏเชพ เชจ เชนเชคเชพ; เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃเชฎเชพเช‚ เช•เซ‡เชŸเชฒเซ€เช• เชตเชธเซเชคเซเช“เชจเซเช‚ เชตเชฐเซเชฃเชจ เชจเซเชฏเซ‚เชจเชคเชฎ เช›เซ‡ (เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชตเชฐเซเช—เชจเซ€ เช•เซเชทเชฎเชคเชพเช“เชจเซเช‚ เช•เซเชทเซ‡เชคเซเชฐ เชธเซเช•เซ‡เชจ เชชเชฐเชฟเชฃเชพเชฎ เชฒเซ‡เช–เชจ เชธเชฎเชฏเซ‡, เชฒเช—เชญเช— เช•เช‚เชˆเชชเชฃ เชตเชฐเซเชฃเชตเซ‡เชฒ เชจเชฅเซ€, เชœเซ‹ เช•เซ‡ เชคเซ‡เชฎเชพเช‚ เช˜เชฃเซ‹ เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เชกเซ‡เชŸเชพ เช›เซ‡). เชคเซเชฐเซ€เชœเซ€ เชฎเซเชถเซเช•เซ‡เชฒเซ€ เช เชนเช•เซ€เช•เชคเชฎเชพเช‚ เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡ เช•เซ‡ เชœเซเชฏเชพเชฐเซ‡ เชคเชฎเซ‡ เชฅเชฟเชฏเชฐเซ€ เชตเชพเช‚เชšเชตเชพ เช…เชจเซ‡ เชฒเซ‹เช•เชฒเชนเซ‹เชธเซเชŸ เชฆเซเชตเชพเชฐเชพ เชฐเชพเช‰เชŸเชฐ เชธเซ‡เชŸ เช•เชฐเชตเชพ เชธเชฟเชตเชพเชฏ, เชœเซเชฏเชพเชฐเซ‡ เชคเชฎเซ‡ เชชเชนเซ‡เชฒเซ€เชตเชพเชฐ Wi-Fi เชจเซ€ เชจเชœเซ€เช• เชœเชพเช“ เช›เซ‹, เชคเซเชฏเชพเชฐเซ‡ เชคเชฎเชพเชฐเซ‡ เชตเซเชฏเช•เซเชคเชฟเช—เชค เชฐเซ€เชคเซ‡ เชธเชฎเชœเซ€ เชถเช•เชพเชฏ เชคเซ‡เชตเชพ เช…เชธเช‚เช–เซเชฏ เชธเช‚เช•เซเชทเชฟเชชเซเชค เชถเชฌเซเชฆเซ‹ เชธเชพเชฅเซ‡ เชตเซเชฏเชตเชนเชพเชฐ เช•เชฐเชตเซ‹ เชชเชกเชถเซ‡. เชชเชฐเช‚เชคเซ เชคเซ‡ เชธเซเชชเชทเซเชŸ เชจ เชนเซ‹เชˆ เชถเช•เซ‡ เช•เซ‡ เชคเซ‡เชฎเชจเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชœเซ‹เชกเชตเซเช‚ เช…เชจเซ‡ เชคเซ‡เชจเซ€ เชฐเชšเชจเชพ เช•เชฐเชตเซ€ (เชšเซเช•เชพเชฆเซ‹ เชตเซเชฏเช•เซเชคเชฟเชฒเช•เซเชทเซ€ เช›เซ‡ เช…เชจเซ‡ เช…เช—เชพเช‰เชจเชพ เช…เชจเซเชญเชต เชชเชฐ เช†เชงเชพเชฐ เชฐเชพเช–เซ‡ เช›เซ‡).

เช† เชฒเซ‡เช– เชšเชฐเซเชšเชพ เช•เชฐเซ‡ เช›เซ‡ เช•เซ‡ NDK, เชนเซ‡เช•เซเชธ เชตเช—เชฐ Android เช•เซ‹เชกเชฎเชพเช‚เชฅเซ€ Wi-Fi เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชตเชฟเชถเซ‡เชจเซ‹ เชตเซเชฏเชพเชชเช• เชกเซ‡เชŸเชพ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฎเซ‡เชณเชตเชตเซ‹, เชชเชฐเช‚เชคเซ เชฎเชพเชคเซเชฐ Android API เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช…เชจเซ‡ เชคเซ‡เชจเซเช‚ เช…เชฐเซเชฅเช˜เชŸเชจ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชฐเชตเซเช‚ เชคเซ‡ เชธเชฎเชœเชตเซเช‚.

เชšเชพเชฒเซ‹ เชตเชฟเชฒเช‚เชฌ เชจ เช•เชฐเซ€เช เช…เชจเซ‡ เช•เซ‹เชก เชฒเช–เชตเชพเชจเซเช‚ เชถเชฐเซ‚ เช•เชฐเซ€เช.

1. เชเช• เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฌเชจเชพเชตเซ‹

เช† เชจเซ‹เช‚เชง เชเชตเชพ เชฒเซ‹เช•เซ‹ เชฎเชพเชŸเซ‡ เช›เซ‡ เช•เซ‡ เชœเซ‡เชฎเชฃเซ‡ เชเช• เช•เชฐเชคเชพ เชตเชงเซ เชตเช–เชค Android เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฌเชจเชพเชตเซเชฏเซ‹ เช›เซ‡, เชคเซ‡เชฅเซ€ เช…เชฎเซ‡ เช† เช†เช‡เชŸเชฎเชจเซ€ เชตเชฟเช—เชคเซ‹ เช›เซ‹เชกเซ€ เชฆเชˆเช เช›เซ€เช. เชจเซ€เชšเซ‡เชจเซ‹ เช•เซ‹เชก เช•เซ‹เชŸเชฒเชฟเชจเชฎเชพเช‚ เชฐเชœเซ‚ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡, minSdkVersion=23.

2. เชเช•เซเชธเซ‡เชธ เชชเชฐเชตเชพเชจเช—เซ€เช“

เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชฎเชพเช‚เชฅเซ€ Wi-Fi เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเชพเชฐเซ‡ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชชเชพเชธเซ‡เชฅเซ€ เช˜เชฃเซ€ เชชเชฐเชตเชพเชจเช—เซ€เช“ เชฎเซ‡เชณเชตเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชชเชกเชถเซ‡. เช…เชจเซเชธเชพเชฐ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃ, 8.0 เชชเช›เซ€ OS เชธเช‚เชธเซเช•เชฐเชฃเซ‹เชตเชพเชณเชพ เช‰เชชเช•เชฐเชฃเซ‹ เชชเชฐ เชจเซ‡เชŸเชตเชฐเซเช• เชธเซเช•เซ‡เชจ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชจเซ‡เชŸเชตเชฐเซเช• เชชเชฐเซเชฏเชพเชตเชฐเชฃเชจเซ€ เชธเซเชฅเชฟเชคเชฟ เชœเซ‹เชตเชพเชจเซ€ เชเช•เซเชธเซ‡เชธ เช‰เชชเชฐเชพเช‚เชค, เชคเชฎเชพเชฐเซ‡ เช‰เชชเช•เชฐเชฃเชจเชพ Wi-Fi เชฎเซ‹เชกเซเชฏเซเชฒเชจเซ€ เชธเซเชฅเชฟเชคเชฟ เชฌเชฆเชฒเชตเชพ เชฎเชพเชŸเซ‡ เช…เชฅเชตเชพ เช•เซ‹เช“เชฐเซเชกเชฟเชจเซ‡เชŸเซเชธเชจเซ€ เชเช•เซเชธเซ‡เชธเชจเซ€ เชœเชฐเซ‚เชฐ เชชเชกเชถเซ‡ (เช…เช‚เชฆเชพเชœเซ‡ เช…เชฅเชตเชพ เชšเซ‹เช•เซเช•เชธ). เชธเช‚เชธเซเช•เชฐเชฃ 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. เชฌเซเชฐเซ‹เชกเช•เชพเชธเซเชŸ เชฐเซ€เชธเซ€เชตเชฐ เชฌเชจเชพเชตเซ‹ เช…เชจเซ‡ 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 เชœเซเช“ เช…เชจเซ‡ เชถเชฐเชคเซ‹ เชธเชฎเชœเซ‹

เชšเชพเชฒเซ‹ เช† เชตเชฐเซเช—เชจเชพ เช•เซ‡เชŸเชฒเชพเช• เช•เซเชทเซ‡เชคเซเชฐเซ‹ เชœเซ‹เชˆเช เช…เชจเซ‡ เชคเซ‡เชจเซ‹ เช…เชฐเซเชฅ เชถเซเช‚ เช›เซ‡ เชคเซ‡เชจเซเช‚ เชตเชฐเซเชฃเชจ เช•เชฐเซ€เช:

เชเชธเชเชธเช†เชˆเชกเซ€ โ€” เชธเชฐเซเชตเชฟเชธ เชธเซ‡เชŸ เช†เช‡เชกเซ‡เชจเซเชŸเชฟเชซเชพเชฏเชฐ เช เชจเซ‡เชŸเชตเชฐเซเช•เชจเซเช‚ เชจเชพเชฎ เช›เซ‡

เชฌเซ€เชเชธเชเชธเช†เชˆเชกเซ€ - เชฎเซ‚เชณเชญเซ‚เชค เชธเซ‡เชตเชพ เชธเซ‡เชŸ เช“เชณเช–เช•เชฐเซเชคเชพ - เชจเซ‡เชŸเชตเชฐเซเช• เชเชกเซ‡เชชเซเชŸเชฐเชจเซเช‚ MAC เชธเชฐเชจเชพเชฎเซเช‚ (Wi-Fi เชชเซ‹เช‡เชจเซเชŸ)

เชธเซเชคเชฐ โ€” เชชเซเชฐเชพเชชเซเชค เชธเชฟเช—เซเชจเชฒ เชธเซเชŸเซเชฐเซ‡เชจเซเชฅ เชˆเชจเซเชกเชฟเช•เซ‡เชŸเชฐ [dBm (เชฐเชถเชฟเชฏเชจ dBm) โ€” เชกเซ‡เชธเชฟเชฌเชฒ, เชฐเซ‡เชซเชฐเชจเซเชธ เชชเชพเชตเชฐ 1 mW.] โ€” เชชเซเชฐเชพเชชเซเชค เชธเชฟเช—เซเชจเชฒ เชธเซเชŸเซเชฐเซ‡เชจเซเชฅเชจเซเช‚ เชธเซ‚เชšเช•. 0 เชฅเซ€ -100 เชธเซเชงเซ€เชจเซเช‚ เชฎเซ‚เชฒเซเชฏ เชฒเซ‡ เช›เซ‡, 0 เชฅเซ€ เช†เช—เชณ, 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 เช—เซ€เช—เชพเชนเชฐเซเชŸเซเชเชจเซ€ เช†เชตเชฐเซเชคเชจ เชธเชพเชฅเซ‡เชจเชพ เชชเซ‹เชˆเชจเซเชŸ เชฎเชพเชŸเซ‡ เช†เชตเชฐเซเชคเชจ เชฎเซ‚เชฒเซเชฏเชฎเชพเช‚เชฅเซ€ เชšเซ‡เชจเชฒ เชจเช‚เชฌเชฐเชจเซ€ เช—เชฃเชคเชฐเซ€ เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡:


    /* ะฟะพ ั‡ะฐัั‚ะพั‚ะต ะพะฟั€ะตะดะตะปัะตะผ ะฝะพะผะตั€ ะบะฐะฝะฐะปะฐ */
    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.* เชชเซ‡เช•เซ‡เชœเชจเชพ เชตเชฐเซเช—เซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— Linux เช‰เชชเชฏเซ‹เช—เชฟเชคเชพ เชฆเซเชตเชพเชฐเชพ เชนเซ‚เชก เชนเซ‡เช เชณ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. wpa_supplicant เช…เชจเซ‡ เชธเซเช•เซ‡เชจ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ เช•เซเชทเชฎเชคเชพ เชซเซ€เชฒเซเชกเชฎเชพเช‚ เช†เช‰เชŸเชชเซเชŸ เชชเชฐเชฟเชฃเชพเชฎ เชซเซเชฒเซ‡เช— เชซเซ€เชฒเซเชกเชจเซ€ เชจเช•เชฒ เช›เซ‡.

เช…เชฎเซ‡ เชธเชคเชค เช•เชพเชฎ เช•เชฐเซ€เชถเซเช‚. เชšเชพเชฒเซ‹ เชชเชนเซ‡เชฒเชพ เชซเซ‹เชฐเซเชฎเซ‡เชŸเชจเชพ เช†เช‰เชŸเชชเซเชŸเชจเซ‡ เชงเซเชฏเชพเชจเชฎเชพเช‚ เชฒเชˆเช เชœเซ‡เชฎเชพเช‚ เช•เซŒเช‚เชธเชจเซ€ เช…เช‚เชฆเชฐเชจเชพ เช˜เชŸเช•เซ‹เชจเซ‡ โ€œ-โ€ เชšเชฟเชนเซเชจ เชฆเซเชตเชพเชฐเชพ เช…เชฒเช— เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡:

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

เชชเซเชฐเชฅเชฎ เช…เชฐเซเชฅ เช•เชนเซ‡เชตเชพเชคเชพ เชตเชฐเซเชฃเชตเซ‡ เช›เซ‡. เชชเซเชฐเชฎเชพเชฃเซ€เช•เชฐเชฃ เชชเชฆเซเชงเชคเชฟ. เชเชŸเชฒเซ‡ เช•เซ‡, เชเช•เซเชธเซ‡เชธ เชชเซ‹เชˆเชจเซเชŸเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช…เชจเซ‡ เชชเซ‡เชฒเซ‹เชกเชจเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชเชจเซเช•เซเชฐเชฟเชชเซเชŸ เช•เชฐเชตเซเช‚ เชคเซ‡ เชฎเชพเชŸเซ‡ เช‰เชชเช•เชฐเชฃ เช…เชจเซ‡ เชเช•เซเชธเซ‡เชธ เชชเซ‹เชˆเชจเซเชŸเซ‡ เช•เซเชฐเชฟเชฏเชพเช“เชจเซ‹ เช•เชฏเซ‹ เช•เซเชฐเชฎ เช•เชฐเชตเซ‹ เชœเซ‹เชˆเช. เช† เชชเซ‹เชธเซเชŸ เชฒเช–เชคเซ€ เชตเช–เชคเซ‡, เชธเซŒเชฅเซ€ เชธเชพเชฎเชพเชจเซเชฏ เชตเชฟเช•เชฒเซเชชเซ‹ WPA เช…เชจเซ‡ WPA2 เช›เซ‡, เชœเซ‡เชฎเชพเช‚ เช•เซเชฏเชพเช‚ เชคเซ‹ เชฆเชฐเซ‡เช• เช•เชจเซ‡เช•เซเชŸเซ‡เชก เช‰เชชเช•เชฐเชฃ เชธเซ€เชงเชพ เช…เชฅเชตเชพ เช•เชนเซ‡เชตเชพเชคเชพ เชฆเซเชตเชพเชฐเชพ. RADIUS เชธเชฐเซเชตเชฐ (WPA-Enterprice) เชเชจเซเช•เซเชฐเชฟเชชเซเชŸเซ‡เชก เชšเซ‡เชจเชฒ เชชเชฐ เชชเชพเชธเชตเชฐเซเชก เชชเซ‚เชฐเซ‹ เชชเชพเชกเซ‡ เช›เซ‡. เชฎเซ‹เชŸเซ‡ เชญเชพเช—เซ‡, เชคเชฎเชพเชฐเชพ เช˜เชฐเชฎเชพเช‚ เชเช•เซเชธเซ‡เชธ เชชเซ‹เชˆเชจเซเชŸ เช† เชธเซเช•เซ€เชฎ เช…เชจเซเชธเชพเชฐ เช•เชจเซ‡เช•เซเชถเชจ เชชเซ‚เชฐเซเช‚ เชชเชพเชกเซ‡ เช›เซ‡. เชฌเซ€เชœเชพ เชธเช‚เชธเซเช•เชฐเชฃ เช…เชจเซ‡ เชชเซเชฐเชฅเชฎ เชตเชšเซเชšเซ‡เชจเซ‹ เชคเชซเชพเชตเชค เช เช›เซ‡ เช•เซ‡ เชคเซ‡เชฎเชพเช‚ เชฎเชœเชฌเซ‚เชค เชธเชพเช‡เชซเชฐ เช›เซ‡: AES เชตเชฟเชฐเซเชฆเซเชง เช…เชธเซเชฐเช•เซเชทเชฟเชค TKIP. WPA3, เชœเซ‡ เชตเชงเซ เชœเชŸเชฟเชฒ เช…เชจเซ‡ เช…เชฆเซเชฏเชคเชจ เช›เซ‡, เชคเซ‡ เชชเชฃ เชงเซ€เชฎเซ‡ เชงเซ€เชฎเซ‡ เชฐเชœเซ‚ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡. เชธเซˆเชฆเซเชงเชพเช‚เชคเชฟเช• เชฐเซ€เชคเซ‡, เชเชจเซเชŸเชฐเชชเซเชฐเชพเชˆเชธ เชธเซ‹เชฒเซเชฏเซเชถเชจ CCKM (เชธเชฟเชธเซเช•เซ‹ เชธเซ‡เชจเซเชŸเซเชฐเชฒเชพเชˆเชเซเชก เช•เซ€ เชฎเซ‡เชจเซ‡เชœเชฎเซ‡เชจเซเชŸ) เชธเชพเชฅเซ‡ เช•เซ‹เชˆ เชตเชฟเช•เชฒเซเชช เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡, เชชเชฐเช‚เชคเซ เชฎเชจเซ‡ เชคเซ‡ เช•เซเชฏเชพเชฐเซ‡เชฏ เชฎเชณเซเชฏเซเช‚ เชจเชฅเซ€.

เชเช•เซเชธเซ‡เชธ เชชเซ‹เชˆเชจเซเชŸ MAC เชเชกเซเชฐเซ‡เชธ เชฆเซเชตเชพเชฐเชพ เชชเซเชฐเชฎเชพเชฃเชฟเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช—เซ‹เช เชตเซ‡เชฒ เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡. เช…เชฅเชตเชพ, เชœเซ‹ เชเช•เซเชธเซ‡เชธ เชชเซ‹เชˆเชจเซเชŸ เชœเซ‚เชจเชพ WEP เช…เชฒเซเช—เซ‹เชฐเชฟเชงเชฎเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชกเซ‡เชŸเชพ เชชเซเชฐเชฆเชพเชจ เช•เชฐเซ‡ เช›เซ‡, เชคเซ‹ เชตเชพเชธเซเชคเชตเชฎเชพเช‚ เช•เซ‹เชˆ เชชเซเชฐเชฎเชพเชฃเซ€เช•เชฐเชฃ เชจเชฅเซ€ (เช…เชนเซ€เช‚ เช—เซเชชเซเชค เช•เซ€ เช เชเชจเซเช•เซเชฐเชฟเชชเซเชถเชจ เช•เซ€ เช›เซ‡). เช…เชฎเซ‡ เช†เชตเชพ เชตเชฟเช•เชฒเซเชชเซ‹เชจเซ‡ เช…เชจเซเชฏ เชคเชฐเซ€เช•เซ‡ เชตเชฐเซเช—เซ€เช•เซƒเชค เช•เชฐเซ€เช เช›เซ€เช.
เช›เซเชชเชพเชฏเซ‡เชฒเชพ เช•เซ‡เชชเซเชŸเชฟเชต เชชเซ‹เชฐเซเชŸเชฒ เชกเชฟเชŸเซ‡เช•เซเชถเชจ เชธเชพเชฅเซ‡ เชชเชฌเซเชฒเชฟเช• เชตเชพเช‡-เชซเชพเช‡เชฎเชพเช‚ เชฒเซ‹เช•เชชเซเชฐเชฟเชฏ เชเชตเซ€ เชชเชฆเซเชงเชคเชฟ เชชเชฃ เช›เซ‡ - เชฌเซเชฐเชพเช‰เชเชฐ เชฆเซเชตเชพเชฐเชพ เชชเซเชฐเชฎเชพเชฃเซ€เช•เชฐเชฃเชจเซ€ เชตเชฟเชจเช‚เชคเซ€. เช†เชตเชพ เชเช•เซเชธเซ‡เชธ เชชเซ‹เชˆเชจเซเชŸ เชธเซเช•เซ‡เชจเชฐเชจเซ‡ เช–เซเชฒเซเชฒเชพ เชคเชฐเซ€เช•เซ‡ เชฆเซ‡เช–เชพเชฏ เช›เซ‡ (เชœเซ‡ เชคเซ‡เช“ เชญเซŒเชคเชฟเช• เชœเซ‹เชกเชพเชฃเชจเชพ เชฆเซƒเชทเซเชŸเชฟเช•เซ‹เชฃเชฅเซ€ เช›เซ‡). เชคเซ‡เชฅเซ€, เช…เชฎเซ‡ เชคเซ‡เชฎเชจเซ‡ OPEN เชคเชฐเซ€เช•เซ‡ เชตเชฐเซเช—เซ€เช•เซƒเชค เช•เชฐเซ€เช เช›เซ€เช.

เชฌเซ€เชœเซ€ เช•เชฟเช‚เชฎเชค เชคเชฐเซ€เช•เซ‡ เชธเซ‚เชšเชฟเชค เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡ เช•เซ€ เชฎเซ‡เชจเซ‡เชœเชฎเซ‡เชจเซเชŸ เช…เชฒเซเช—เซ‹เชฐเชฟเชงเชฎ. เช† เช‰เชชเชฐ เชตเชฐเซเชฃเชตเซ‡เชฒ เชชเซเชฐเชฎเชพเชฃเซ€เช•เชฐเชฃ เชชเชฆเซเชงเชคเชฟเชจเซเช‚ เชชเชฐเชฟเชฎเชพเชฃ เช›เซ‡. เชฌเชฐเชพเชฌเชฐ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชเชจเซเช•เซเชฐเชฟเชชเซเชถเชจ เช•เซ€เชจเซ€ เช†เชชเชฒเซ‡ เชฅเชพเชฏ เช›เซ‡ เชคเซ‡ เชตเชฟเชถเซ‡ เชตเชพเชค เช•เชฐเซ‡ เช›เซ‡. เชšเชพเชฒเซ‹ เชถเช•เซเชฏ เชตเชฟเช•เชฒเซเชชเซ‹ เชงเซเชฏเชพเชจเชฎเชพเช‚ เชฒเชˆเช. EAP - เช‰เชฒเซเชฒเซ‡เช–เชฟเชค WPA-Enterprice เชฎเชพเช‚ เชตเชชเชฐเชพเชฏเซ‡เชฒ, เชฆเชพเช–เชฒ เช•เชฐเซ‡เชฒ เชชเซเชฐเชฎเชพเชฃเซ€เช•เชฐเชฃ เชกเซ‡เชŸเชพเชจเซ‡ เชšเช•เชพเชธเชตเชพ เชฎเชพเชŸเซ‡ เชกเซ‡เชŸเชพเชฌเซ‡เชเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡. SAE - เช…เชฆเซเชฏเชคเชจ WPA3 เชฎเชพเช‚ เชตเชชเชฐเชพเชฏเซ‡เชฒ, เชœเชก เชฌเชณ เชฎเชพเชŸเซ‡ เชตเชงเซ เชชเซเชฐเชคเชฟเชฐเซ‹เชงเช•. PSK - เชธเซŒเชฅเซ€ เชธเชพเชฎเชพเชจเซเชฏ เชตเชฟเช•เชฒเซเชช, เชœเซ‡เชฎเชพเช‚ เชชเชพเชธเชตเชฐเซเชก เชฆเชพเช–เชฒ เช•เชฐเชตเซ‹ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชเชจเซเช•เซเชฐเชฟเชชเซเชŸเซ‡เชก เชธเซเชตเชฐเซ‚เชชเชฎเชพเช‚ เชŸเซเชฐเชพเชจเซเชธเชฎเชฟเชŸ เช•เชฐเชตเชพเชจเซ‹ เชธเชฎเชพเชตเซ‡เชถ เชฅเชพเชฏ เช›เซ‡. IEEE8021X - เช†เช‚เชคเชฐเชฐเชพเชทเซเชŸเซเชฐเซ€เชฏ เชงเซ‹เชฐเชฃ เชฎเซเชœเชฌ (WPA เช•เซเชŸเซเช‚เชฌ เชฆเซเชตเชพเชฐเชพ เชธเชฎเชฐเซเชฅเชฟเชค เชคเซ‡เชจเชพเชฅเซ€ เช…เชฒเช—). OWE (เช“เชชเซ‹เชฐเซเชšเซเชฏเซเชจเชฟเชธเซเชŸเชฟเช• เชตเชพเชฏเชฐเชฒเซ‡เชธ เชเชจเซเช•เซเชฐเชฟเชชเซเชถเชจ) เช เชชเซ‹เชˆเชจเซเชŸ เชฎเชพเชŸเซ‡ IEEE 802.11 เชธเซเชŸเชพเชจเซเชกเชฐเซเชกเชจเซเช‚ เชตเชฟเชธเซเชคเชฐเชฃ เช›เซ‡ เชœเซ‡เชจเซ‡ เช…เชฎเซ‡ OPEN เชคเชฐเซ€เช•เซ‡ เชตเชฐเซเช—เซ€เช•เซƒเชค เช•เชฐเซเชฏเซเช‚ เช›เซ‡. 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 เชเช•เซเชธเซ‡เชธเชจเซ‡ เช…เช•เซเชทเชฎ เช•เชฐเชตเชพเชจเซ€ เชญเชพเชฐเชชเซ‚เชฐเซเชตเช• เชญเชฒเชพเชฎเชฃ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชนเช•เซ€เช•เชค เช เช›เซ‡ เช•เซ‡ เช˜เชฃเซ€เชตเชพเชฐ MAC เชเชกเซเชฐเซ‡เชธ เชฆเซเชตเชพเชฐเชพ 8-เช…เช‚เช•เชจเซ‹ เชชเชฟเชจ เชถเซ‹เชงเซ€ เชถเช•เชพเชฏ เช›เซ‡, เช…เชฅเชตเชพ เชคเซ‡เชจเซ‡ เชจเชœเซ€เช•เชจเชพ เชธเชฎเชฏเชฎเชพเช‚ เชธเซ‹เชฐเซเชŸ เช†เช‰เชŸ เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡, เชœเซ‡เชจเซ‹ เช•เซ‹เชˆ เช…เชชเซเชฐเชฎเชพเชฃเชฟเช•เชชเชฃเซ‡ เชฒเชพเชญ เชฒเชˆ เชถเช•เซ‡ เช›เซ‡.

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

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹