Android 10 (API düzeyi 29) ve sonraki sürümleri çalıştıran cihazlarda, Chromecast ve Google Home donanımı gibi ikincil cihazlar için yapılandırmayı başlatmak üzere yeni bir eşler arası API kullanabilirsiniz. Bu özellik, uygulamanızın istenen ağın özelliklerini açıklamak için WifiNetworkSpecifier
kullanarak kullanıcıdan cihazın bağlı olduğu erişim noktasını değiştirmesini istemesini sağlar.
Bu API'yi kullanmak için aşağıdakileri yapın:
WifiNetworkSpecifier.Builder
kullanarak bir kablosuz ağ belirteci oluşturun.Gerekli kimlik bilgileriyle birlikte bağlanılacak ağlarla eşleşecek bir ağ filtresi ayarlayın.
Aşağıdaki şartlara tabi olarak her istekte ağ filtresini ayarlamak için
SSID
,SSID pattern
,BSSID
veBSSID pattern
kombinasyonuna karar verin:- Her istek en az bir
SSID
,SSID pattern
,BSSID
veyaBSSID pattern
sağlamalıdır - Her istekte yalnızca
SSID
veyaSSID pattern
ayarlanabilir. - Her istekte yalnızca
BSSID
veyaBSSID pattern
ayarlanabilir.
- Her istek en az bir
İsteğin durumunu izlemek için belirteci, ağ isteğine bir
NetworkCallback
örneğiyle birlikte ekleyin.Kullanıcı isteği kabul ederse ve ağa bağlantı başarılı olursa geri arama nesnesinde
NetworkCallback.onAvailable()
çağrılır. Kullanıcı isteği reddederse veya ağ bağlantısı başarısız olursa geri çağırma nesnesindeNetworkCallback.onUnavailable()
çağrılır.
Eş cihaza bağlanma isteği başlatıldığında, aynı cihazda kullanıcının bağlantı isteğini kabul edebileceği bir iletişim kutusu açılır.
Kullanıcı onayı atlama
Kullanıcı, belirli bir uygulamadan gelen bir isteğe yanıt olarak bağlanılacak bir ağı onayladığında cihaz, söz konusu erişim noktası için onayı saklar. Uygulama, söz konusu erişim noktasına tekrar bağlanmak için belirli bir istek gönderirse cihaz, kullanıcı onayı aşamasını atlar ve ağa otomatik olarak bağlanır. Kullanıcı, API tarafından istenen bir ağa bağlıyken ağı unutmayı seçerse uygulama ve ağ kombinasyonu için saklanan bu onay kaldırılır ve gelecekte uygulamadan gelen isteklerin kullanıcı tarafından tekrar onaylanması gerekir. Uygulama, SSID veya BSSID deseniyle belirli olmayan bir istek gönderirse kullanıcının isteği onaylaması gerekir.
Kod örneği
Aşağıdaki kod örneğinde, "test"
ön ekiyle başlayan bir SSID ve "10:03:23"
BSSID OUI ile açık bir ağa nasıl bağlanılacağı gösterilmektedir:
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);