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

در اندروید ۱۱ (SDK سطح ۳۰) و بالاتر، برنامه‌ها می‌توانند از اینتنت 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 اضافی است که شامل آرایه‌ای از کدهای نتیجه است که نشان می‌دهد آیا پیکربندی‌های جداگانه با موفقیت ذخیره شده‌اند یا خیر. کدهای نتیجه ممکن عبارتند از:

    • ADD_WIFI_RESULT_SUCCESS : پیکربندی اضافه یا با موفقیت به‌روزرسانی شد.
    • ADD_WIFI_RESULT_ADD_OR_UPDATE_FAILED : هنگام تلاش برای افزودن پیکربندی، مثلاً به دلیل پیکربندی بد، شکست خورد.
    • ADD_WIFI_RESULT_ALREADY_EXISTS : پیکربندی درخواستی از قبل وجود داشته، بنابراین نیازی به انجام هیچ کاری نیست.
  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
        }
    }
}