ذخیره شبکه‌ها و پیکربندی‌های Passpoint

در Android 11 (کیت توسعه نرم‌افزار سطح ۳۰) و بالاتر، برنامه‌ها می‌توانند از هدف android.provider.Settings.ACTION_WIFI_ADD_NETWORKS استفاده کنند تا کاربر را برای افزودن یک یا چند شبکه ذخیره‌شده جدید یا پیکربندی Passpoint راهنمایی کنند. این میانای برنامه‌سازی کاربردی همچنین برای اصلاح پیکربندی‌های ذخیره‌شده موجود به‌همان صورت کار می‌کند.

برای ذخیره کردن پیکربندی شبکه یا Passpoint، کارهای زیر را انجام دهید:

  1. قصد ACTION_WIFI_ADD_NETWORKS ایجاد کنید.

  2. یک یا چند پیکربندی بااستفاده از WifiNetworkSuggestion.Builder ایجاد کنید. توجه داشته باشید که اگرچه از WifiNetworkSuggestion استفاده می‌کنید، این Intent API به Suggestion API مربوط نیست.

  3. فهرست آرایه قابل‌بسته‌بندی از پیکربندی‌ها ایجاد کنید و آن را با EXTRA_WIFI_NETWORK_LIST اضافی به هدف پیوست کنید.

  4. Activity.startActivityForResult() را اجرا کنید و قصد را به آن ارسال کنید.

  5. بااستفاده از فراخوان Activity.onActivityResult() به نتیجه گوش دهید.

    ‫resultCode می‌تواند یکی از موارد زیر باشد:

    • Activity.RESULT_OK: نشان می‌دهد که کاربر شبکه‌های پیشنهادی را پذیرفته و آن‌ها را ذخیره کرده است.
    • Activity.RESULT_CANCELED: نشان می‌دهد که کاربر شبکه‌های پیشنهادی را رد کرده است.

    اگر resultCode RESULT_OK باشد، داده Intent حاوی EXTRA_WIFI_NETWORK_RESULT_LIST اضافی است که شامل آرایه‌ای از کدهای نتیجه است که نشان می‌دهد آیا پیکربندی‌های فردی با موفقیت ذخیره شده‌اند یا نه. کدهای نتیجه احتمالی عبارت‌اند از:

  6. اگر درخواست موفقیت‌آمیز باشد، پلتفرم اتصالی به یکی از شبکه‌های جدیداً ذخیره‌شده را راه‌اندازی می‌کند.

نمونه کد

نمونه کد زیر نحوه ذخیره کردن پیکربندی شبکه یا Passpoint را نشان می‌دهد.

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
        }
    }
}