Auf Geräten mit Android 10 (API-Level 29) und höher können Sie eine neue Peer-to-Peer-API verwenden, um
Bootstrap-Konfiguration für sekundäre Geräte wie Chromecast und Google Home
Hardware. Mit dieser Funktion kann deine App den Nutzer auffordern, den Zugriff zu ändern
mit dem das Gerät über
WifiNetworkSpecifier
zum Beschreiben der Eigenschaften eines angeforderten Netzwerks.
So verwenden Sie diese API:
Erstellen Sie einen WLAN-Spezifizierer mit
WifiNetworkSpecifier.Builder
Legen Sie einen Netzwerkfilter fest, um die Netzwerke zu finden, zu denen eine Verbindung hergestellt werden soll, sowie erforderliche Anmeldedaten.
Wählen Sie eine Kombination aus
SSID
,SSID pattern
,BSSID
, undBSSID pattern
den Netzwerkfilter in jeder Anfrage festzulegen. Dabei gilt Folgendes: Anforderungen:- Jede Anfrage sollte mindestens eines der folgenden Werte enthalten:
SSID
,SSID pattern
,BSSID
oderBSSID pattern
- Für jede Anfrage kann nur entweder
SSID
oderSSID pattern
festgelegt werden - Für jede Anfrage kann nur entweder
BSSID
oderBSSID pattern
festgelegt werden
- Jede Anfrage sollte mindestens eines der folgenden Werte enthalten:
Fügen Sie der Netzwerkanfrage die Spezifizierer zusammen mit einem
NetworkCallback
Instanz, um den Status der Anfrage zu verfolgen.Wenn der Nutzer die Anfrage akzeptiert und die Netzwerkverbindung erfolgreich war,
NetworkCallback.onAvailable()
wird im Callback-Objekt aufgerufen. Wenn der Nutzer die Anfrage ablehnt Verbindung zum Netzwerk nicht erfolgreich,NetworkCallback.onUnavailable()
wird im Callback-Objekt aufgerufen.
Beim Initiieren der Anfrage zum Verbinden mit einem Peer-Gerät wird ein Dialogfeld auf der und auf demselben Gerät, über das der Nutzer dieses Geräts die Verbindungsanfrage annehmen kann.
Umgehen der Nutzergenehmigung
Sobald der Nutzer als Reaktion auf eine Anfrage von einem Netzwerk die Verbindung mit einem Netzwerk genehmigt hat, App verwendet wird, speichert das Gerät die Genehmigung für den jeweiligen Zugangspunkt. Wenn die App eine bestimmte Anfrage an wieder eine Verbindung zu diesem Zugangspunkt herstellen, überspringt das Gerät die Genehmigungsphase des Nutzers und stellt automatisch eine Verbindung zum Netzwerk her. Wenn der Nutzer die solange eine Verbindung zu einem von der API angeforderten Netzwerk besteht, Genehmigung für diese Kombination aus App und Werbenetzwerk entfernt wird Anfrage von der App muss vom Nutzer noch einmal genehmigt werden. Wenn die App eine unspezifische Anfrage sendet, z. B. mit einem SSID- oder BSSID-Muster, Nutzer müssen die Anfrage genehmigen.
Codebeispiel
Im folgenden Codebeispiel wird gezeigt, wie Sie mit einer SSID eine Verbindung zu einem offenen Netzwerk herstellen.
Präfix "test"
und die BSSID-OUI "10:03:23"
lautet:
Kotlin
val specifier = WifiNetworkSpecifier.Builder() .setSsidPattern(PatternMatcher("test", PatternMatcher.PATTERN_PREFIX)) .setBssidPattern(MacAddress.fromString("10:03:23:00:00:00"), MacAddress.fromString("ff:ff:ff:00:00:00")) .build() val request = NetworkRequest.Builder() .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) .removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .setNetworkSpecifier(specifier) .build() val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager val networkCallback = object : ConnectivityManager.NetworkCallback() { ... override fun onAvailable(network: Network?) { // do success processing here.. } override fun onUnavailable() { // do failure processing here.. } ... } connectivityManager.requestNetwork(request, networkCallback) ... // Release the request when done. connectivityManager.unregisterNetworkCallback(networkCallback)
Java
final NetworkSpecifier specifier = new WifiNetworkSpecifier.Builder() .setSsidPattern(new PatternMatcher("test", PatternMatcher.PATTERN_PREFIX)) .setBssidPattern(MacAddress.fromString("10:03:23:00:00:00"), MacAddress.fromString("ff:ff:ff:00:00:00")) .build(); final NetworkRequest request = new NetworkRequest.Builder() .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) .removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .setNetworkSpecifier(specifier) .build(); final ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); final NetworkCallback networkCallback = new NetworkCallback() { ... @Override void onAvailable(...) { // do success processing here.. } @Override void onUnavailable(...) { // do failure processing here.. } ... }; connectivityManager.requestNetwork(request, networkCallback); ... // Release the request when done. connectivityManager.unregisterNetworkCallback(networkCallback);