İnternet bağlantısı için Wi-Fi öneri API'sı

Android 10 (API düzeyi 29) ve sonraki sürümleri çalıştıran cihazlar, uygulamanızın ağ eklemesine izin verir kimlik bilgilerini kullanarak bir kablosuz erişim noktasına otomatik olarak bağlanmasını sağlayabilir. Bu belgeyi hangi ağa bağlanılacağına ilişkin öneriler WifiNetworkSuggestion. Platform, nihai olarak uygulamanızdan ve başkalarından gelen girişlerdir.

Android 11 (API düzeyi 30) ve sonraki sürümlerde:

ziyaret edin.
  • Ç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. Böyle İ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. Bildirim, şartlar ve koşulların kabul edilmesi gerektiğinde kullanıcıya gösterilir. Şartlar ve koşullara tabi Passpoint ağlarını öneren uygulamalar , cihazın bu özelliği desteklediğinden emin olmak için önce bu API'yi çağırmalıdır. Cihaz bu özelliği desteklemiyorsa bu ağ ve alternatif veya eski bir ağ önerilmelidir.

  • isDecoratedIdentitySupported(): Önek dekorasyonu olan ağlarda kimlik doğrulaması yapılırken, kimlik öneki, ağ operatörlerinin Ağ Erişimini güncellemesine olanak tanır İçindeki birden fazla proxy aracılığıyla açık yönlendirme gerçekleştiren tanımlayıcı (NAI) (bkz. AAA) RFC 7542: daha fazla bilgi edinebilirsiniz).

    Android 12 bu özelliği, PPS-MO uzantıları. Şifrelenmiş bir kimlik gerektiren Passpoint ağlarını öneren uygulamalar Cihazın bu özelliği desteklediğinden emin olmak için önce bu API'yi çağırın. 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 şunu kullanması gerekir: PasspointConfiguration Credential ve HomeSp sınıf. 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ğı:

Kotlin

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);

Java

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ü, çalıştırılan Android sürümüne bağlıdır cihazda:

  • Android 11 (API düzeyi 30) ve daha yeni sürümlerde uygulama aşağıdaki gibiyse kullanıcı bir iletişim kutusu görür: uygulamanın ön planda çalışıyorsa bir bildirim arka plan.
  • Android 10'da (API düzeyi 29) kullanıcı ne olursa olsun bir bildirim görür Uygulamanın ön planda mı yoksa arka planda mı çalıştığı.

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ı, bağlantı kurulduğunda, bu ağ diğer önerilere hâlâ aralıkta. 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.