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

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

لحفظ إعداد شبكة أو نقطة مرور، عليك اتّباع الخطوات التالية:

  1. أنشئ هدفًا ACTION_WIFI_ADD_NETWORKS.

  2. يمكنك إنشاء واحدة أو أكثر من الإعدادات باستخدام WifiNetworkSuggestion.Builder تجدر الإشارة إلى أنّه على الرغم من استخدام WifiNetworkSuggestion، فإنّ Intent 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. إذا تم الطلب بنجاح، تبدأ المنصة اتصالاً بأحد الشبكات المحفوظة حديثًا.

نموذج التعليمات البرمجية

يعرض نموذج الرمز البرمجي التالي كيفية حفظ شبكة أو نقطة مرور. التكوين.

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