حفظ الشبكات وإعدادات Passpoint

على أجهزة Android 11 (حزمة SDK من المستوى 30) والإصدارات الأحدث، يمكن للتطبيقات استخدام android.provider.Settings.ACTION_WIFI_ADD_NETWORKS لإرشاد المستخدم خلال إضافة شبكة واحدة أو أكثر من الشبكات المحفوظة الجديدة أو إعدادات Passpoint. تعمل واجهة برمجة التطبيقات أيضًا كما هي لتعديل الإعدادات المحفوظة الحالية.

لحفظ شبكة أو إعدادات Passpoint، اتّبِع الخطوات التالية:

  1. أنشئ غرض ACTION_WIFI_ADD_NETWORKS.

  2. أنشئ إعدادًا واحدًا أو أكثر باستخدام WifiNetworkSuggestion.Builder. يُرجى العِلم أنّه على الرغم من استخدام WifiNetworkSuggestion، لا ترتبط واجهة برمجة التطبيقات هذه بـ واجهة برمجة تطبيقات الاقتراحات.

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