Wi-Fi Suggest API für Internetverbindung

Auf Geräten mit Android 10 (API-Level 29) und höher kann deine App ein Netzwerk hinzufügen Anmeldedaten für ein Gerät, um sich automatisch mit einem WLAN-Zugangspunkt verbinden zu können. Sie können Vorschläge, zu welchem Netzwerk Sie eine Verbindung herstellen möchten WifiNetworkSuggestion Die Plattform wählt basierend auf dem aus Ihrer App und anderen Quellen.

Unter Android 11 (API-Level 30) und höher:

  • Das Framework erzwingt Eigentumsanforderungen für EAP-SIM-basierte Enterprise-Versionen Vorschläge (EAP-SIM, EAP-AKA, EAP-AKA-PRIME); sind solche Vorschläge nur von Apps zugelassen, die vom Mobilfunkanbieter signiert sind.
  • Bei Vorschlägen, die von einer vom Mobilfunkanbieter signierten App stammen, wird das Framework automatisch weist ihm eine Mobilfunkanbieter-ID zu, die der Carrier Signierung Ein solches Vorschläge werden automatisch deaktiviert, wenn die entsprechende SIM-Karte entfernt wird vom Gerät aus.

Unter Android 12 (API-Level 31) und höher:

  • Zusätzlicher Datenschutz kann über eine persistente MAC-Zufallsauswahl aktiviert werden. die die zufällige MAC-Adresse regelmäßig neu zufällig generiert. setMacRandomizationSetting verwenden um den Grad der Randomisierung für Ihr Netzwerk festzulegen.

  • isPasspointTermsAndConditionsSupported(): Die Nutzungsbedingungen gelten als Passpoint. mit der Netzwerkbereitstellungen unsichere Captive Portale ersetzen können, die offene Netzwerke mit einem sicheren Passpoint-Netzwerk nutzen. Eine Benachrichtigung ist die dem Nutzer angezeigt werden, wenn die Nutzungsbedingungen akzeptiert werden müssen. Apps, die Passpoint-Netzwerke vorschlagen, für die die Nutzungsbedingungen gelten muss zuerst diese API aufrufen, um sicherzustellen, dass das Gerät die Funktion unterstützt. Wenn das Gerät diese Funktion nicht unterstützt, kann es keine Verbindung herstellen. und es muss ein alternatives oder Legacy-Netzwerk vorgeschlagen werden.

  • isDecoratedIdentitySupported(): Bei der Authentifizierung bei Netzwerken mit einem Präfix-Dekoration Mit dem Identitätspräfix können Netzwerkbetreiber den Netzwerkzugriff ID (NAI), um ein explizites Routing durch mehrere enthaltene Proxys durchzuführen eines AAA-Netzwerks (siehe RFC 7542 für mehr dazu).

    Diese Funktion wird in Android 12 implementiert, um der WBA-Spezifikation für PPS-MO . Apps, die Passpoint-Netzwerke vorschlagen, für die eine dekorierte Identität erforderlich ist, müssen rufen Sie zuerst diese API auf, um sicherzustellen, dass das Gerät die Funktion unterstützt. Wenn Das Gerät unterstützt die Funktion nicht und die Identität wird nicht dekoriert. Dann schlägt die Authentifizierung im Netzwerk möglicherweise fehl.

Um einen Passpoint-Vorschlag zu erstellen, müssen Apps die PasspointConfiguration, Credential und HomeSp Kurse. Diese Klassen beschreiben das Passpoint-Profil, das in der Wi-Fi Alliance definiert ist. Passpoint Spezifikation.

Das folgende Codebeispiel zeigt, wie Sie Anmeldedaten WPA2, ein WPA3-Netzwerk und ein Passpoint-Netzwerk:

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

Sobald die App zum ersten Mal einen Vorschlag macht, benachrichtigt. Der Benachrichtigungstyp hängt von der Android-Version ab auf dem Gerät:

  • Unter Android 11 (API-Level 30) und höher wird dem Nutzer ein Dialogfeld angezeigt, wenn die App die im Vordergrund ausgeführt wird, und eine Benachrichtigung, wenn die App in der Hintergrund.
  • Unter Android 10 (API-Level 29) erhält der Nutzer unabhängig von unabhängig davon, ob die App im Vordergrund oder im Hintergrund ausgeführt wird.

Wenn die Plattform eine Verbindung zu einem der Netzwerkvorschläge herstellt, werden die Einstellungen angezeigt Text, der die Netzwerkverbindung der entsprechenden Vorschlags-App zuordnet.

Umgang mit Verbindungstrennungen von Nutzern

Wenn der Nutzer die WLAN-Auswahl verwendet, um die Verbindung zu einem der Netzwerkvorschläge erhalten, wenn eine Verbindung besteht, wird dieses Netzwerk ignoriert, wenn es ist noch im Bereich. Während dieses Zeitraums wird das Netzwerk nicht berücksichtigt für die automatische Verbindung, auch wenn die App den Netzwerkvorschlag entfernt und wieder hinzufügt die dem Netzwerk entsprechen. Wenn der Nutzer die WLAN-Auswahl verwendet, sich mit einem Netzwerk verbinden, das zuvor getrennt wurde, sofort für die automatische Verbindung in Betracht gezogen werden.

Freigabestatus für App ändern

Lehnt ein Nutzer die Benachrichtigung zu den Netzwerkvorschlägen ab, CHANGE_WIFI_STATE-Berechtigung von der App. Der Nutzer kann diese Genehmigung erteilen. später über das Menü für die WLAN-Steuerung (Einstellungen > Apps und Benachrichtigungen > Besondere App Zugriff > WLAN-Steuerung > App name.