Android 10 (API düzeyi 29) ve sonraki sürümleri çalıştıran cihazlar, uygulamanızın bir cihazın kablosuz erişim noktasına otomatik olarak bağlanması için ağ kimlik bilgilerini eklemesine izin verir. Bu belgeyi
hangi ağa bağlanılacağına ilişkin öneriler
WifiNetworkSuggestion
.
Platform, uygulamanızdan ve diğer kaynaklardan gelen girişlere göre hangi erişim noktasını kabul edeceğini belirler.
Android 11 (API düzeyi 30) ve sonraki sürümlerde:
PasspointConfiguration
için temel hazırlık öneri API'si tarafından desteklenir. Android 11'den önce,PasspointConfiguration
için temel hazırlığı yapmak içinaddOrUpdatePasspointConfiguration()
API'sinin kullanılması gerekir.- Çerçeve, TLS tabanlı kuruluşlarda güvenlik gereksinimlerini zorunlu kılar
öneriler (EAP-TLS, EAP-TTLS ve EAP-PEAP); bu tür ağlara yönelik öneriler
bir
Root CA certificate
ayarlamalıdır veserver domain name
.
- Çerçeve, EAP-SIM tabanlı kuruluşlar için sahiplik şartlarını zorunlu kılar öneriler (EAP-SIM, EAP-AKA, EAP-AKA-PRIME) bu tür öneriler yalnızca operatör tarafından imzalanmış uygulamalar tarafından izin verilir.
- Operatör tarafından imzalanmış bir uygulama tarafından sağlanan öneriler için çerçeve otomatik olarak uygulamanın operatörüne karşılık gelen operatör imzalama. Bu tür İlgili SIM kaldırılırsa öneriler otomatik olarak devre dışı bırakılır kaldırmamız gerekir.
Android 12 (API düzeyi 31) ve sonraki sürümlerde:
Kalıcı olmayan MAC rastgele hale getirme işleviyle ek gizlilik etkinleştirilebilir. Bu işlem, rastgele hale getirilmiş MAC adresini düzenli olarak yeniden rastgele yapar.
setMacRandomizationSetting
kullanın kullanabilirsiniz.isPasspointTermsAndConditionsSupported()
: Hükümler ve koşullar bir Passpoint'tir Bu özellik, ağ dağıtımlarının güvenli olmayan giriş portallarının yerini almasını sağlar. açık ve güvenli bir Passpoint ağı kullanan anlık ağaçlar. Hükümler ve koşulların kabul edilmesi gerektiğinde kullanıcıya bir bildirim gösterilir. Şartlar ve koşullara göre sınırlandırılmış Passpoint ağları öneren uygulamaların, cihazın bu özelliği desteklediğinden emin olmak için önce bu API'yi çağırması gerekir. Cihaz bu özelliği desteklemiyorsa bu ağ ve alternatif veya eski bir ağ önerilmelidir.isDecoratedIdentitySupported()
: Önek süslemesi içeren ağlarda kimlik doğrulama yapılırken süslenmiş kimlik öneki, ağ operatörlerinin AAA ağının içindeki birden fazla proxy üzerinden açık yönlendirme yapmak için ağ erişim tanımlayıcısı (NAI) güncellemesine olanak tanır (bu konuda daha fazla bilgi için RFC 7542'ye bakın).Android 12 bu özelliği, PPS-MO uzantıları. Süslenmiş kimlik gerektiren Passpoint ağları öneren uygulamaların, cihazın bu özelliği desteklediğinden emin olmak için önce bu API'yi çağırması gerekir. Eğer cihaz bu özelliği desteklemiyorsa kimlik dekore edilmez ve ağ kimlik doğrulaması başarısız olabilir.
Passpoint önerisi oluşturmak için uygulamaların PasspointConfiguration
, Credential
ve HomeSp
sınıflarını kullanması gerekir. Bu
sınıfları, Wi-Fi Alliance'ta tanımlanan Passpoint profilini açıklar.
Passpoint
spesifikasyonlarına göz atın.
Aşağıdaki kod örneğinde, bir açık, bir veya iki WPA2, bir WPA3 ağı ve bir Passpoint ağı:
val suggestion1 = WifiNetworkSuggestion.Builder() .setSsid("test111111") .setIsAppInteractionRequired(true) // Optional (Needs location permission) .build(); val suggestion2 = WifiNetworkSuggestion.Builder() .setSsid("test222222") .setWpa2Passphrase("test123456") .setIsAppInteractionRequired(true) // Optional (Needs location permission) .build(); val suggestion3 = WifiNetworkSuggestion.Builder() .setSsid("test333333") .setWpa3Passphrase("test6789") .setIsAppInteractionRequired(true) // Optional (Needs location permission) .build(); val passpointConfig = PasspointConfiguration(); // configure passpointConfig to include a valid Passpoint configuration val suggestion4 = WifiNetworkSuggestion.Builder() .setPasspointConfig(passpointConfig) .setIsAppInteractionRequired(true) // Optional (Needs location permission) .build(); val suggestionsList = listOf(suggestion1, suggestion2, suggestion3, suggestion4); val wifiManager = context.getSystemService(Context.WIFI_SERVICE) as WifiManager; val status = wifiManager.addNetworkSuggestions(suggestionsList); if (status != WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS) { // do error handling here } // Optional (Wait for post connection broadcast to one of your suggestions) val intentFilter = IntentFilter(WifiManager.ACTION_WIFI_NETWORK_SUGGESTION_POST_CONNECTION); val broadcastReceiver = object : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { if (!intent.action.equals(WifiManager.ACTION_WIFI_NETWORK_SUGGESTION_POST_CONNECTION)) { return; } // do post connect processing here } }; context.registerReceiver(broadcastReceiver, intentFilter);
final WifiNetworkSuggestion suggestion1 = new WifiNetworkSuggestion.Builder() .setSsid("test111111") .setIsAppInteractionRequired(true) // Optional (Needs location permission) .build(); final WifiNetworkSuggestion suggestion2 = new WifiNetworkSuggestion.Builder() .setSsid("test222222") .setWpa2Passphrase("test123456") .setIsAppInteractionRequired(true) // Optional (Needs location permission) .build(); final WifiNetworkSuggestion suggestion3 = new WifiNetworkSuggestion.Builder() .setSsid("test333333") .setWpa3Passphrase("test6789") .setIsAppInteractionRequired(true) // Optional (Needs location permission) .build(); final PasspointConfiguration passpointConfig = new PasspointConfiguration(); // configure passpointConfig to include a valid Passpoint configuration final WifiNetworkSuggestion suggestion4 = new WifiNetworkSuggestion.Builder() .setPasspointConfig(passpointConfig) .setIsAppInteractionRequired(true) // Optional (Needs location permission) .build(); final List<WifiNetworkSuggestion> suggestionsList = new ArrayList<WifiNetworkSuggestion> {{ add(suggestion1); add(suggestion2); add(suggestion3); add(suggestion4); }}; final WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); final int status = wifiManager.addNetworkSuggestions(suggestionsList); if (status != WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS) { // do error handling here… } // Optional (Wait for post connection broadcast to one of your suggestions) final IntentFilter intentFilter = new IntentFilter(WifiManager.ACTION_WIFI_NETWORK_SUGGESTION_POST_CONNECTION); final BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (!intent.getAction().equals( WifiManager.ACTION_WIFI_NETWORK_SUGGESTION_POST_CONNECTION)) { return; } // do post connect processing here... } }; context.registerReceiver(broadcastReceiver, intentFilter);
Uygulama ilk kez bir öneride bulunduktan hemen sonra kullanıcı bildirim alır. Bildirim türü, cihazda çalışan Android sürümüne bağlıdır:
- Android 11 (API düzeyi 30) ve sonraki sürümlerde, uygulama ön planda çalışıyorsa kullanıcı bir iletişim kutusu, arka planda çalışıyorsa bir bildirim görür.
- Android 10'da (API düzeyi 29), uygulamanın ön planda veya arka planda çalışıp çalışmadığından bağımsız olarak kullanıcı bir bildirim görür.
Platform, ağ önerilerinden birine bağlandığında ayarlar, ağ bağlantısını ilgili önerici uygulamasıyla ilişkilendiren metin.
Kullanıcı bağlantı kesme işlemlerini yönetme
Kullanıcı, kablosuz ağ seçiciyi kullanarak bağlı olduğu ağ önerilerinden biriyle bağlantısını açıkça keserse bu ağ, kapsama alanındayken yoksayılır. Bu süre zarfında bu ağ dikkate alınmaz. Uygulama, ağ önerisini kaldırıp yeniden eklese bile otomatik bağlantı için belirir. Kullanıcı, kablosuz ağ seçiciyi kullanarak açıkça daha önce bağlantısı kesilmiş bir ağa bağlanırsanız söz konusu ağ otomatik olarak bağlanmanız için anında dikkate alınır.
Uygulamanın onay durumunu değiştirme
Kullanıcı ağ önerisi bildirimini reddettiğinde
CHANGE_WIFI_STATE
izni. Kullanıcı bu onayı verebilir
kablosuz kontrol menüsüne (Ayarlar >
Uygulamalar ve bildirimler > Özel Uygulama
erişim > Kablosuz Kontrolü > App name) tıklayın.