شبکه ها و تنظیمات Passpoint را ذخیره کنید

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

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

  1. یک هدف ACTION_WIFI_ADD_NETWORKS ایجاد کنید.

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

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

  4. Activity.startActivityForResult() را اجرا کنید و در intent ارسال کنید.

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