Zapisuj sieci i konfiguracje Passpoint

W Androidzie 11 (SDK na poziomie 30) i nowszych aplikacje mogą używać android.provider.Settings.ACTION_WIFI_ADD_NETWORKS poprowadzi użytkownika przez dodanie co najmniej jednej zapisanej sieci lub Konfiguracje protokołu Passpoint. Interfejs API może też modyfikować istniejące zapisane elementy. konfiguracji.

Aby zapisać sieć lub konfigurację Passpoint, wykonaj te czynności:

  1. Utwórz intencję ACTION_WIFI_ADD_NETWORKS.

  2. Utwórz co najmniej jedną konfigurację za pomocą: WifiNetworkSuggestion.Builder Pamiętaj, że chociaż używasz interfejsu WifiNetworkSuggestion, ten interfejs Intent API jest niezwiązane z interfejsem Suggestions API.

  3. Utwórz listę tablicy z możliwością parzystej i dołącz ją do parametru z intem EXTRA_WIFI_NETWORK_LIST dodatkowe.

  4. Wykonaj Activity.startActivityForResult() przekazywanie intencji.

  5. Wykryj wynik za pomocą Activity.onActivityResult() oddzwanianie.

    resultCode może być jednym z tych elementów:

    Jeśli resultCode to RESULT_OK, dane Intent zawierają EXTRA_WIFI_NETWORK_RESULT_LIST dodatkowo, który zawiera tablicę kodów wyników wskazujących, czy dana osoba Konfiguracje zostały zapisane. Możliwe kody wyników:

  6. Jeśli żądanie zostanie zrealizowane, platforma wywoła połączenie z jednym z tych z nowo zapisanymi sieciami.

Przykładowy kod

Poniższy przykładowy kod pokazuje, jak zapisać sieć lub Passpoint konfiguracji.

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        ...
    }

    fun startOperation() {
        val suggestions = ArrayList<WifiNetworkSuggestion>()

        // WPA2 configuration
        suggestions.add(
                WifiNetworkSuggestion.Builder()
                        .setSsid("test111111")
                        .setWpa2Passphrase("test123456")
                        .build()
        )

        // Open configuration
        suggestions.add(
                WifiNetworkSuggestion.Builder()
                        .setSsid("test222222")
                        .build()
        )

        // Passpoint configuration
        val config = PasspointConfiguration()
        config.credential = Credential().apply {
            realm = "realm.example.com"
            simCredential = Credential.SimCredential().apply {
                eapType = 18
                imsi = "123456*"
            }
        }
        config.homeSp = HomeSp().apply {
            fqdn = "test1.example.com"
            friendlyName = "Some Friendly Name"
        }
        suggestions.add(
                WifiNetworkSuggestion.Builder()
                        .setPasspointConfig(config)
                        .build())

        // Create intent
        val bundle = Bundle()
        bundle.putParcelableArrayList(EXTRA_WIFI_NETWORK_LIST, suggestions)
        val intent = Intent(ACTION_WIFI_ADD_NETWORKS)
        intent.putExtras(bundle)

        // Launch intent
        startActivityForResult(intent, 0)
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if(resultCode == RESULT_OK) {
            // user agreed to save configurations: still need to check individual results
            if (data != null && data.hasExtra(EXTRA_WIFI_NETWORK_RESULT_LIST)) {
                for (code in data.getIntegerArrayListExtra(EXTRA_WIFI_NETWORK_RESULT_LIST)) {
                    when (code) {
                        ADD_WIFI_RESULT_SUCCESS ->
                            ... // Configuration saved or modified
                        ADD_WIFI_RESULT_ADD_OR_UPDATE_FAILED ->
                            ... // Something went wrong - invalid configuration
                        ADD_WIFI_RESULT_ALREADY_EXISTS ->
                            ... // Configuration existed (as-is) on device, nothing changed
                        else ->
                            ... // Other errors
                    }
                }
            }
        } else {
            // User refused to save configurations
        }
    }
}