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

على أجهزة Android 11 (المستوى 30 من حزمة SDK) والإصدارات الأحدث، يمكن للتطبيقات استخدام الغرض android.provider.Settings.ACTION_WIFI_ADD_NETWORKS لتوجيه المستخدم خلال إضافة شبكة واحدة أو أكثر من الشبكات المحفوظة الجديدة أو إعدادات 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
        }
    }
}